Skip to main content
Glama

Robot Actions — Remote Device Control

Server Details

Drive real Android & iOS devices and web browsers from natural language for mobile + web QA. 290+ tools across device control, app management, automation sessions, browser automation, and flow recording / replay. Bearer-auth — get a token at robotactions.com → Profile → API Tokens.

Ownership verified
Status
Healthy
Uptime
39.4% over 36 days
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A3.8/5.0

Scored across 376 tools

Disambiguation4/5

Most tools have distinct purposes within their domains, but there is significant overlap across the device, browser, and automation layers (e.g., device_tap vs device_tap_by_text vs session_click, webpage_* vs web_*, ios_safari_* vs webpage_*). The descriptions attempt to disambiguate, but an agent could still confuse tools that accomplish similar actions on different surfaces.

Naming Consistency3/5

The naming is broadly consistent within families (device_*, ios_*, web_*, webpage_*, flow_*, testrail_*), but the variety of prefixes and the mix of noun-verb and verb-noun forms (e.g., android_traffic_start, ios_safari_list_pages, automation_session_get, get_visual_review) makes it less predictable. The underscore-based convention is consistent, but the overall pattern is not uniform.

Tool Count2/5

With 376 tools, this is far beyond what an agent can effectively navigate. Even for a comprehensive device-control platform, the tool surface is excessively large and likely includes redundant or rarely-needed tools. This creates a high cognitive load and makes tool selection error-prone.

Completeness5/5

The tool set is extraordinarily comprehensive, covering device control (Android, iOS, TV), web automation (desktop grid, real-device browsers), performance monitoring, network capture/mocking, crash analytics, test management (TestRail, Jira, AzDO), and flow recording/replay. For the stated purpose of remote device control and testing, there are very few gaps; the coverage is exhaustive.

Available Tools

376 tools
agent_memory_appendAInspect

Append a block to the calling user's persistent agent memory. Use this when the user explicitly says "remember X", "save this", or "note for next time" — DO NOT auto-update on every interaction. Memory is auto-prepended to your system prompt on every chat in this user's account. Cap: 10240 bytes total; over-cap appends return 413. Markdown is encouraged; keep entries terse and factual (preferences, project context, references), not verbose.

ParametersJSON Schema
NameRequiredDescriptionDefault
blockYesMarkdown block to append. Will be separated from existing content by a blank line.

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden and does so well: it discloses that memory is persistent, auto-prepended to the system prompt on every chat, capped at 10240 bytes, and that over-cap appends return 413. It also gives content guidance (Markdown encouraged, terse and factual). This goes well beyond the schema and gives the agent a clear picture of side effects and constraints.

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?

Three dense sentences with no wasted words. The core action is front-loaded, and the usage triggers, negative guidance, persistence behavior, cap, error code, and content style are all packed efficiently. 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?

For a single-parameter tool with no annotations and no output schema, this description is remarkably complete. It covers when to use it, what it does, the persistence side effect, size constraints, failure mode, and content guidance. An agent has everything needed to invoke it correctly.

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 the baseline is 3. The description adds value beyond the schema by advising Markdown and specifying the desired content style ('terse and factual', 'preferences, project context, references'). This helps the agent compose the block parameter appropriately, though it doesn't add technical parameter details like encoding or length.

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 states a specific action and resource: 'Append a block to the calling user's persistent agent memory.' It clearly distinguishes itself from the sibling agent_memory_replace by using 'append' and describing the persistent memory context. No ambiguity about what the tool does.

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 gives explicit trigger conditions: use when the user says 'remember X', 'save this', or 'note for next time', and explicitly warns DO NOT auto-update on every interaction. It does not explicitly name agent_memory_replace as the alternative for overwriting existing memory, but the append-versus-replace distinction is largely implied by the tool names and action verb.

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

agent_memory_replaceAInspect

Replace the entire memory file for the calling user. USE SPARINGLY — append is the safer primary. Only call replace when memory has drifted wrong, accumulated stale entries, or the user asks for a clean rewrite. Cap: 10240 bytes; over-cap calls return 413.

ParametersJSON Schema
NameRequiredDescriptionDefault
contentYesFull memory content (Markdown). Pass empty string to clear.

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral disclosure burden. It discloses the 10240-byte cap, the 413 over-cap response, and the warning that replace is riskier than append. It does not explicitly state that all previous memory content is discarded, but 'replace the entire memory file' strongly implies it.

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 three sentences with no filler: the operation, the usage warning, the trigger conditions, and the cap/error are all packed in. The most important guidance is front-loaded with 'USE SPARINGLY.'

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?

For a single-parameter tool with no output schema, the description provides everything needed: what it does, when to use it, when not to use it, the size limit, and the failure response. No critical context appears missing.

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?

The schema already documents the single 'content' parameter at 100% coverage, including its Markdown format and the empty-string-to-clear behavior. The description reinforces that the content replaces the entire file and adds context about size limits, but it does not add substantial parameter meaning 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 states a specific verb and resource: 'Replace the entire memory file for the calling user.' It also distinguishes itself from the append alternative by explicitly calling append 'the safer primary,' so an agent can tell the two operations apart.

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?

Usage guidance is explicit and actionable: 'USE SPARINGLY,' append is preferred, and replace should only be called when memory has drifted wrong, accumulated stale entries, or the user requests a clean rewrite. This clearly routes the agent between replace and append.

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

android_accessibility_auditAInspect

Run an accessibility audit on the CURRENT screen of an Android device. Checks match the rules Google's own Accessibility Scanner applies, so findings line up with what Android developers already act on. Audits whatever is in the foreground right now, so navigate to the screen you care about FIRST (device_tap_by_text / device_launch_app), then call this. Reports tap targets below the recommended minimum, several tappable elements stacked on identical bounds (the screen reader announces the same thing twice), controls that report a button class but expose no click action (the screen reader announces a button the user cannot activate), actionable controls the screen reader cannot name at all (no text, no description, no labelled child — the classic unlabelled icon button), descriptions that redundantly restate the element's type, state or action ("Submit button" — the screen reader says "button" already), and controls reporting a class assistive technology cannot interpret. Each finding carries the element's label, class and pixel rect — the rect centre is directly tappable with device_tap. Pass scroll:true to keep scrolling and re-auditing until nothing new comes into view, so content below the fold is covered too. IMPORTANT LIMITS, so findings are read correctly: tap-target results are a screening signal, not a verdict, because a control can legitimately extend its own tap area in a way this audit cannot observe; only elements actually drawn on screen are examined; and an element made tappable purely by an ancestor's touch dispatch is invisible here unless its own class is a control class. Contrast and text-size are NOT checked — that needs data this audit cannot read.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID)
checksNoChecks to run; omit for all. "TouchTargetSize" = tap targets below the recommended minimum; "DuplicateClickableBounds" = several tappable elements on identical bounds; "MissingClickAction" = a button-class element exposing no click action; "SpeakableTextPresent" = an actionable control with no text, content description or labelled descendant; "RedundantDescription" = description restates type/state/action; "ClassName" = control reports an uninterpretable class.
scrollNoDefaults false. When true, audit the screen, scroll down, and audit again — repeating until a pass reveals no new elements or maxScrollSteps is reached — then report the deduplicated union. This CHANGES THE SCREEN: it scrolls the app and does not scroll back, and on a lazily-loaded list it will trigger loading. Leave it off when the app must not be disturbed.
maxScrollStepsNoOnly with scroll:true. Maximum scrolls before stopping regardless (default 6, max 20).
localeIsEnglishNoDefaults true. The redundant-description check matches English words, so set false on a non-English device to skip it rather than have it compare English words against other-language text.

TDQS

A4.4/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure, and it does so exceptionally. It openly states that results are 'a screening signal, not a verdict,' documents that only on-screen elements are examined, explains the ancestor-touch-dispatch blind spot, and discloses that scroll mode changes the screen (further detailed in the schema). It also explains WHY contrast/text-size are excluded, which lets the agent set correct expectations.

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 long but well-structured and front-loaded: purpose first, then checks, then usage, then a clearly marked 'IMPORTANT LIMITS' section. The prose list of the six checks partially duplicates the schema's enum descriptions, which is a slight inefficiency, but every other sentence earns its place by adding operational or interpretive value.

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?

For a complex tool with 5 parameters and no output schema, the description is remarkably complete. It explains prerequisites, the full scope of what is audited, what is deliberately not audited and why, how the scroll mode behaves, and — critically — what findings carry ('label, class and pixel rect') so the agent can act on results despite the absent 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 100%, so the baseline is 3. The description's prose enumeration of the six checks largely restates what the schema's enum descriptions already provide, and it adds nothing beyond the schema for udid, scroll, maxScrollSteps, or localeIsEnglish. The one modest addition is the note that each finding's rect centre is tappable, but that concerns output, not parameters.

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 opening sentence states a specific verb and resource: 'Run an accessibility audit on the CURRENT screen of an Android device.' The platform and scope are explicit, which distinguishes it from the sibling ios_accessibility_audit even without opening the schema. The subsequent enumeration of the six checks gives the agent a concrete sense of what the audit produces.

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 gives explicit sequencing guidance: 'navigate to the screen you care about FIRST (device_tap_by_text / device_launch_app), then call this.' It also states when to pass scroll:true and explicitly lists exclusions ('Contrast and text-size are NOT checked'). It does not name an alternative tool for exclusion, but the platform and workflow context are clear enough.

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

android_app_launch_timeAInspect

Cold app-launch time (ms) via am start -W -S, averaged over N runs. Resolves the launcher activity from the package.

ParametersJSON Schema
NameRequiredDescriptionDefault
pkgYesApp package (or full component pkg/activity), e.g. com.android.settings
runsNoCold launches to average (default 3)
serialYesAndroid device serial (from `device_list`)

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral burden. It discloses the command, the averaging over N runs, and launcher-activity resolution. It stops short of stating that the -S flag force-stops the app and may disrupt running state, but the mechanism is explicit enough for an Android-aware agent.

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?

One dense sentence front-loads the outcome and then supplies method and scope. No filler or repetition of schema content.

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

Completeness4/5

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

Given no output schema, it tells the agent what the metric is (ms, averaged) and how it is obtained. It lacks an explicit statement of which am start timing field is reported (e.g., TotalTime vs WaitTime) and the force-stop side effect, but remains sufficient for basic invocation.

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 explains pkg, runs, and serial meaning. The description's 'averaged over N runs' and launcher resolution reinforce the parameters but add no new semantic detail 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 states a specific measurable outcome ('Cold app-launch time (ms)'), names the exact command mechanism ('am start -W -S'), and distinguishes itself from sibling performance tools by focusing on launch latency rather than FPS, traffic, or general snapshots.

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 clearly implies when to use it: whenever cold app-launch duration is needed. It does not explicitly name alternatives or exclusions (e.g., warm launch or rendering FPS), but the cold-launch qualifier and measurement description provide enough context to select it.

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

android_crash_analyticsAInspect

Crash / ANR / native-crash analytics from DropBoxManager (total, per-process, per-type, per-day timeline). Use android_crash_detail for one entry.

ParametersJSON Schema
NameRequiredDescriptionDefault
serialYesAndroid device serial (from `device_list`)

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It discloses that the tool reads from DropBoxManager and provides aggregate analytics, but it does not mention any side effects (likely none), whether it requires special permissions, or what the output structure looks like. Since it's an analytics/read operation, the description implicitly indicates no destructive behavior, but it doesn't explicitly state that. A more explicit note about being non-mutating would be better, but the current level is adequate.

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 two sentences, front-loaded with the core purpose and scope, and ends with a routing hint to the sibling. Every word earns its place; no fluff or repetition. It is concise and structured effectively for quick scanning.

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 that this is a simple analytics tool with one parameter and no output schema, the description is nearly complete. It tells the agent what data it returns (aggregate stats across multiple dimensions) and when to use the sibling for detail. Missing is the exact return format or whether it returns a JSON object or table, but the tool's complexity is low, so the description is sufficient for correct invocation and basic understanding.

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 description coverage is 100% for the only parameter (serial), which is described as 'Android device serial (from `device_list`)'. The description does not add more parameter detail beyond the schema, but the schema is already explicit. Given the single parameter and complete schema coverage, the description adds little but the schema handles it well. A baseline of 3 would apply; however, the description's mention of DropBoxManager as a data source provides a bit of context not in the schema, slightly elevating 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 tool's purpose: 'Crash / ANR / native-crash analytics from DropBoxManager', listing the dimensions of analysis (total, per-process, per-type, per-day timeline). It also specifies the data source (DropBoxManager), which distinguishes it from other crash-related tools like android_crash_detail. The verb 'analytics' is somewhat weak but the resource and scope are explicit, making it clear what the tool provides.

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 gives a direct pointer to the sibling tool: 'Use android_crash_detail for one entry.' This clearly tells the agent when to use this tool (aggregate analytics) vs when to use the alternative (single entry detail). However, it does not explicitly state when to use this tool over other analytics tools like ios_crash_analytics (but that's platform-specific) or when not to use it (e.g., for real-time crashes). The context is clear enough for typical use.

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

android_crash_detailAInspect

Full raw content of one crash/ANR/tombstone entry (by id from android_crash_analytics).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesCrash id from android_crash_analytics
serialYesAndroid device serial (from `device_list`)

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It states it returns 'full raw content,' implying a read operation, but does not explicitly say it is side-effect-free or describe any potential performance or payload size implications. It is not contradictory, but the absence of an explicit read-only declaration and any behavioral caveats keeps this at a mid-range score.

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?

A single, front-loaded sentence with no wasted words. It immediately states what the tool returns and how to obtain the required id, making it highly scannable for an agent.

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 retrieval tool, the description is sufficient: it explains the output ('full raw content') and the input source (id from android_crash_analytics). It does not describe pagination or size, but that is not critical for a detail fetch. The absence of an output schema is acceptable since the description clearly indicates the return type. It could explicitly mention it is a read-only operation, but that is implied by the nature of the 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?

The input schema already fully documents both parameters (id and serial) with descriptions that match the tool's purpose. The description reinforces that the id comes from android_crash_analytics, but adds no new semantic detail beyond the schema. With 100% schema coverage, the baseline 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 states a clear verb ('get') and specific resource ('full raw content of one crash/ANR/tombstone entry'), and identifies how to reference it ('by id from android_crash_analytics'). It differentiates itself from the sibling listing tool android_crash_analytics, making its purpose unambiguous.

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 explicitly tells the agent that the id comes from android_crash_analytics, implying a prerequisite workflow: first list crashes, then fetch detail. This provides clear guidance on when to use this tool versus the sibling listing tool, and the android-specific context differentiates it from the ios_crash_detail sibling.

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

android_devtools_capture_networkAInspect

Capture network requests made by a page running on the device over a time window via CDP. Enables the Network domain and collects request/response/loadingFinished/loadingFailed events. LIVE-WINDOW collector: only captures requests made AFTER it attaches — to capture a navigation/reload/fetch, pass triggerJs (fired inside the window) rather than triggering it from a separate tool call (which races the attach and returns 0 records). Returns { records, bodiesOmitted? } in summary format, or a HAR 1.2 document when format="har". Each record: { requestId, method, url, requestHeaders?, status?, statusText?, mimeType?, resourceType?, responseHeaders?, encodedDataLength?, state, errorText?, startTimestamp?, endTimestamp?, body?, bodyTruncated?, bodyError? }. Set includeBodies=true to fetch response bodies for completed text-like responses (json|text|xml|javascript|html|css|svg|x-www-form-urlencoded); per-body cap: 10 000 chars (bodyTruncated=true when hit); total cap: 200 000 chars (excess records counted in bodiesOmitted). Body fetch failures set bodyError on that record. Set throttle to emulate network conditions for the capture window only (cleared in a finally block): slow-3g (latency 2000ms, 400kbps down/up), fast-3g (latency 563ms, 1.6Mbps down / 750kbps up), offline. When throttle was active, a top-level throttle field appears in the output. Set blockUrls (URL patterns) to block matching requests, or extraHeaders to inject request headers (e.g. Authorization), for the capture window only — both cleared afterward. Returns at most limit records (default 100, most-recent first) so heavy pages stay within the token budget — filter with urlSubstring / onlyErrors; total/returned appear when records were dropped. Default window: 5 000 ms. Maximum: 30 000 ms. Omit pageId to auto-select the visible/active page.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID)
limitNoMax records to return, most-recent first (default 100). Heavy pages make hundreds of requests; the default keeps the response within the MCP token budget. total/returned are included when records were dropped.
formatNoOutput format: "summary" (default) returns { records, bodiesOmitted? }; "har" returns a HAR 1.2 document
pageIdNoTarget page id (auto-picked when omitted)
socketNoAbstract unix socket name (default: chrome_devtools_remote)
throttleNoEmulate network conditions for the capture window only (cleared in a finally block). slow-3g: latency 2000ms, 400kbps down/up. fast-3g: latency 563ms, 1.6Mbps down / 750kbps up. offline: no connectivity.
blockUrlsNoBlock requests whose URL matches any of these patterns (wildcards allowed, e.g. "*.doubleclick.net", "*/analytics*") for the capture window ONLY (cleared afterward). Blocked requests surface as failed. Use to capture without third-party/analytics noise.
triggerJsNoJavaScript run INSIDE the capture window (right after the collector attaches) so the requests it triggers are captured race-free — e.g. "location.reload()", "location.href='https://example.com'", or "fetch('/api/x')". Prefer this over navigating/reloading from a separate tool call, which races the collector attach and yields 0 records.
durationMsNoCollection window in milliseconds (default: 5000, max: 30000)
onlyErrorsNoOnly failed / 5xx records
extraHeadersNoExtra HTTP headers added to every request for the capture window ONLY (cleared afterward), e.g. { "Authorization": "Bearer …" } to capture authenticated requests. These are session-scoped, which is why they apply only during this capture.
urlSubstringNoOnly records whose URL contains this substring — target the requests you care about
includeBodiesNoFetch response body for completed text-like responses (default: true). Request bodies (postData) are always captured. Set false to skip response bodies for a lighter payload. Per-body cap: 10 000 chars. Total cap: 200 000 chars.

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations provided, the description carries the full behavioral burden and does so thoroughly. It discloses the live-window limitation, cleanup of throttle/blockUrls/extraHeaders in finally blocks, body truncation caps (10k/200k chars), bodyError handling, dropped-record reporting, and output shape — all details the agent needs to predict side effects and return behavior.

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 dense but every sentence carries operational value; there is no filler or repetition of structured facts. It front-loads the core purpose and return contract, then organizes modifiers (bodies, throttle, blocking, limits, defaults) in a logical flow suited to a 13-parameter tool with no output schema.

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 the absence of both annotations and an output schema, the description is remarkably complete: it defines the record shape, failure modes, caps, cleanup behavior, defaults, maximums, and page selection. An agent has nearly everything needed to invoke it correctly and interpret results.

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 the baseline is 3, but the description adds useful behavioral nuance beyond the schema: triggerJs must fire inside the window, blockUrls patterns can use wildcards, throttle is only active for the capture window, and limit/dropped-record behavior protects token budget. This lifts it above baseline.

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 opens with a specific verb+resource: "Capture network requests made by a page running on the device over a time window via CDP." It also clarifies scope distinctly from device-level or iOS traffic capture by emphasizing page-level CDP collection, which distinguishes it from siblings like android_traffic_start and ios_safari_capture_network.

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 gives extensive operational guidance: use triggerJs for race-free navigation/reload, set includeBodies=false for lighter payloads, filter via urlSubstring/onlyErrors, and omit pageId to auto-select the active page. It does not explicitly name alternative tools or state when to prefer a sibling, so it stops short of full alternative-based routing.

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

android_devtools_close_pageAInspect

Close a debuggable tab/page on the device by pageId (CDP /json/close). Use to clean up stale tabs that accumulate across sessions and clutter android_devtools_list_pages. Get the pageId from android_devtools_list_pages. Returns { closed, pageId } — closed:false if no such page.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID)
pageIdYesTarget page id (from android_devtools_list_pages) to close
socketNoAbstract unix socket name (default: chrome_devtools_remote)

TDQS

A4.4/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 burden, and it does disclose key behavioral traits: it states the return shape ({ closed, pageId }), what 'closed:false' means when no such page exists, and that it targets a device via CDP. It doesn't mention permission/auth needs or side effects, but for a simple close operation the disclosure is reasonably complete.

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?

Three sentences are dense and purposeful: action and mechanism, use-case rationale, and return semantics. It is front-loaded with the core capability and includes no filler or redundant material.

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 close operation with 100% schema coverage and no output schema, the description covers the return contract and the key nuance (closed:false). It doesn't enumerate edge cases or error scenarios, but the core information needed to invoke it correctly is present and complete enough for this tool's complexity.

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 already documents all three parameters (udid, pageId, socket) with meaning. The description adds that pageId comes from android_devtools_list_pages, which is helpful, and mentions the CDP mechanism, but doesn't add significant semantics beyond what the schema provides. Baseline 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 states a specific verb ('Close') and resource ('a debuggable tab/page on the device by pageId'), explicitly references the CDP /json/close mechanism, and distinguishes itself from siblings like android_devtools_list_pages. An agent can tell exactly what this tool does without guessing.

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 says to use it 'to clean up stale tabs that accumulate across sessions and clutter android_devtools_list_pages', and tells the agent to get pageId from android_devtools_list_pages. This provides clear context, a use case, and an explicit source for the required parameter.

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

android_devtools_console_logsAInspect

Collect console logs, exceptions, and log entries from a page running on the device for a time window. Enables Runtime and Log domains, then listens for Runtime.consoleAPICalled, Runtime.exceptionThrown, and Log.entryAdded events. Returns a normalized array of { level, text, url?, lineNumber? } entries. This is a LIVE-WINDOW collector: it only captures events fired AFTER it attaches, so triggering the logging from a SEPARATE tool call races the ~1-3s attach latency and is silently missed. To capture logs from an action, pass triggerJs (runs inside the window). Default window: 3 000 ms. Maximum: 15 000 ms. Omit pageId to auto-select the visible/active page.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID)
pageIdNoTarget page id (auto-picked when omitted)
socketNoAbstract unix socket name (default: chrome_devtools_remote)
triggerJsNoJavaScript run INSIDE the collection window (right after the listeners attach) so the logs it produces are captured race-free — e.g. "location.reload()", "document.querySelector('#go').click()", or "console.log('probe')". Prefer this over triggering from a separate call.
durationMsNoCollection window in milliseconds (default: 3000, max: 15000)

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 the full burden and delivers richly: it discloses that the tool enables Runtime and Log domains, listens for three specific events, returns a normalized array, is a live-window collector that only captures post-attach events, has a ~1-3s attach latency race condition, and supports pageId auto-selection. This is exemplary behavioral disclosure.

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 dense (~130 words) but every element is load-bearing: the live-window warning and triggerJs guidance are critical for correct use. It is front-loaded with the core purpose. Minor redundancy exists between the main race warning and the triggerJs parameter description, so it is not maximally tight, but it is well-structured.

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?

For a 5-parameter tool with 100% schema coverage and no output schema, the description is complete: it documents the return shape ({ level, text, url?, lineNumber? }), the live-window semantics, defaults, maximum, and page auto-selection. There is no output schema and no annotations, yet the description covers everything an agent needs to call it correctly.

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 value beyond the schema by explaining that triggerJs runs INSIDE the collection window and is race-free, gives concrete examples ('location.reload()', 'console.log('probe')'), and cross-references the default/max window values that the schema also encodes. This meaningfully enriches parameter understanding, warranting a 4.

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 states a specific verb and resource: 'Collect console logs, exceptions, and log entries from a page running on the device for a time window.' It further distinguishes itself by naming the exact CDP domains and events (Runtime.consoleAPICalled, Runtime.exceptionThrown, Log.entryAdded) and the normalized return shape, which clearly separates it from siblings like android_devtools_capture_network, session_console_logs, and web_console_messages.

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 gives explicit when-not guidance: triggering logging from a SEPARATE tool call 'races the ~1-3s attach latency and is silently missed,' and provides the corrective alternative: 'pass triggerJs (runs inside the window).' It also states the default (3000 ms), maximum (15000 ms), and page auto-selection behavior, leaving no ambiguity about how to invoke it correctly.

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

android_devtools_cookiesAInspect

Get cookies for a page on the device via CDP (Network.getCookies), including httpOnly / secure / sameSite / domain / path / expiry — useful for debugging auth/session state. Falls back to document.cookie (non-httpOnly only) if the CDP call is unavailable. Omit pageId to auto-select the visible/active page.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID)
pageIdNoTarget page id (auto-picked when omitted)
socketNoAbstract unix socket name (default: chrome_devtools_remote)

TDQS

A4.4/5.0
Behavior5/5

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

With no annotations to fall back on, the description carries the full burden and does it well. It discloses the CDP-based read path, the fallback to document.cookie with its httpOnly limitation, and the auto-selection behavior for pageId. These are non-obvious behavioral details that an agent needs before invoking the 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?

The description is three focused sentences with no filler. The core purpose and mechanism come first, followed by the fallback behavior and then the most important parameter guidance. Every sentence earns its place.

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 moderately complex DevTools utility with no output schema, the description covers the mechanism, the returned cookie attributes, the fallback limitation, and pageId selection. A small gap is that it does not point to how to obtain a pageId if auto-selection is not desired, but the schema's 'auto-picked' note partially mitigates this.

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 baseline is 3. The description adds little beyond the schema: it repeats the auto-pick behavior already in the pageId schema description and does not elaborate on udid or socket. No compensatory parameter detail is needed because the schema is already complete.

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 states a specific action ('Get cookies for a page on the device'), the mechanism (CDP Network.getCookies), and the precise data returned (httpOnly, secure, sameSite, domain, path, expiry). This clearly distinguishes it from related DevTools siblings like console logs, captured network traffic, DOM inspection, and the iOS Safari cookies counterpart.

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 clear usage context ('useful for debugging auth/session state') and practical guidance on omitting pageId to auto-select the visible page. It does not explicitly say when not to use it or name alternatives, so it falls short of a 5 but is clearly more than minimal.

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

android_devtools_elementsAInspect

Extract locator-friendly element data from a page on the device for building Playwright/Selenium locators. For each element (interactive/meaningful elements by default, or those matching selector) returns: tag, trimmed text, key attributes (id/name/type/role/aria-label/placeholder/href/value/data-testid + any data-*), classes, bounding box {x,y,w,h} and a visibility flag. USE suggested — the locator worth writing (id, then test-id, name, aria-label, placeholder), each verified unique before it is offered, with playwright giving the same target in getByRole/getByTestId form. css and xpath are diagnostic fallbacks, not recommendations: the CSS path is an nth-of-type chain over layout classes and does not belong in a page object. When suggested is null nothing stable exists — act via ref and treat the missing test-id as the real finding. Set includeStyles=true to also return a curated set of computed styles per element. Omit pageId to auto-select the visible/active page.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID)
limitNoMax elements to return (default 150)
pageIdNoTarget page id (auto-picked when omitted)
socketNoAbstract unix socket name (default: chrome_devtools_remote)
selectorNoCSS selector to scope extraction (default: interactive/meaningful elements)
includeStylesNoInclude a curated set of computed styles per element (default false)

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure, and it does so thoroughly. It explains filtering defaults (interactive/meaningful elements), the selector scoping, the uniqueness verification of suggested locators, the diagnostic nature of css/xpath, the null-suggested fallback behavior, the optional computed styles, and page auto-selection. This goes well beyond a simple one-liner and leaves an agent well-informed about the tool's behavior.

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 dense but every sentence earns its place. It front-loads the core purpose and return structure, then logically flows into locator recommendations, fallback behavior, and optional parameters. Despite its length, there is no redundancy or filler.

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?

There is no output schema, so the description must fully explain the return format, and it does: fields, locator recommendations, fallbacks, and null handling. It also covers parameter defaults and edge cases (suggested null, pageId omission). For a read-only extraction tool with no annotations, this is a complete picture for an agent to invoke it correctly.

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 description coverage is 100%, giving a baseline of 3. The description adds meaningful semantics for several parameters: selector scoping, includeStyles returning a curated style set, and pageId auto-selection when omitted. While udid, limit, and socket are not elaborated beyond the schema, the added context for key parameters raises the score above baseline.

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 opens with a specific verb+resource+scope: 'Extract locator-friendly element data from a page on the device for building Playwright/Selenium locators.' It also enumerates the exact return fields (tag, text, attributes, bounding box, visibility), which leaves no ambiguity about the tool's job. The focus on locator generation distinguishes it from siblings like android_devtools_get_dom or device_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 Guidelines4/5

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

The description provides strong contextual guidance on how to use the output (prefer `suggested`, treat `css`/`xpath` as diagnostic fallbacks, handle `suggested` null as a real finding). However, it does not explicitly name alternative tools or state when NOT to use this tool versus a sibling such as android_devtools_get_dom or device_locators_for. This is a minor gap given that the use case is clearly implied.

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

android_devtools_evaluateAInspect

Evaluate a JavaScript expression in the context of a page running on the device via CDP. Enables Runtime, then calls Runtime.evaluate. Returns the result value, any exception details, and pageId/pageUrl identifying the tab it actually ran on — check those if a result looks like it came from the wrong page. Omit pageId to auto-select the active tab (after a navigate, that is the tab the navigate landed on).

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID)
pageIdNoTarget page id from android_devtools_list_pages (auto-picked when omitted)
socketNoAbstract unix socket name (default: chrome_devtools_remote)
expressionYesJavaScript expression to evaluate
awaitPromiseNoWhether to await a returned Promise (default: true)
returnByValueNoReturn the result as a serializable value (default: true)

TDQS

A4.2/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 burden. It reveals behavioral traits: enables Runtime, auto-selects the active tab, and returns pageId/pageUrl for verification. It does not mention permissions or side effects, but for a CDP evaluation, these are reasonable to expect.

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

Conciseness5/5

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

The description is three sentences, each conveying essential information: what it does, how it works, and a caveat about page identity. No filler; front-loaded with the core action.

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's moderate complexity acceptably complete. It covers the main purpose, the key behavioral nuance (pageId), and the return fields. It doesn't document the output schema (none provided), but for an evaluation tool, specifying result value and exception details is sufficient.

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 parameters are well-documented. The description adds context for pageId (auto-picked when omitted) and the return fields, but does not elaborate on expression syntax or awaitPromise behavior beyond schema defaults.

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 evaluates a JavaScript expression in a page context via CDP, specifying the mechanism (enabling Runtime, calling Runtime.evaluate). It is distinct from siblings like android_devtools_get_dom or android_devtools_elements and identifies the tab context explicitly.

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 explains when to use it (after a navigate, auto-selects the active tab) and gives a hint on when to check results (if they seem from the wrong page). It doesn't explicitly name alternatives like web_evaluate or ios_safari_evaluate, but the context (android_devtools_ prefix) implies device-specific usage.

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

android_devtools_get_domAInspect

Get the outer HTML of the page (or a CSS-selector-matched element) running on the device via CDP. Output is capped at 100 000 characters; a truncation notice is appended when the limit is hit. Omit pageId to auto-select the visible/active page.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID)
pageIdNoTarget page id (auto-picked when omitted)
socketNoAbstract unix socket name (default: chrome_devtools_remote)
selectorNoOptional CSS selector — returns outerHTML of the first matching element, or null if not found

TDQS

A4.2/5.0
Behavior4/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 reveals the output cap of 100,000 characters and the appended truncation notice, and explains the auto-selection of pageId when omitted. This adds meaningful behavioral context beyond the schema, though it does not cover potential errors or prerequisites like CDP connectivity.

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 three concise sentences, with the main purpose stated first, followed by output limit and auto-selection guidance. No fluff or redundancy; every sentence contributes essential information.

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?

The tool is a straightforward read operation, and the description covers the primary purpose, output constraints, and a key parameter behavior. The schema fully documents all parameters. Missing details like error handling or explicit read-only status are minor given the tool's simplicity, but it could still benefit from noting that it returns the page's HTML without modifying anything.

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 description coverage is 100%, so the description need not repeat parameter details. It adds value by explicitly stating that omitting pageId auto-selects the visible/active page, reinforcing the schema's note. It also clarifies the selector's behavior via the schema, but the description's truncation notice is output-focused. Overall, the description complements the schema effectively.

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 retrieves the outer HTML of the page or a CSS-selector-matched element via CDP, which is specific and distinct from sibling tools like android_devtools_elements or webpage_get_dom by its explicit scope and CDP mechanism. It directly answers what the tool does.

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 gives guidance on omitting pageId to auto-select the active page, which is useful context for parameter usage. However, it does not explicitly state when to use this tool versus alternatives (e.g., when to use android_devtools_elements or other DOM-related tools), leaving the agent to infer usage from the name and description alone.

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

android_devtools_list_pagesAInspect

List debuggable pages/targets available on the device. Returns id, type, title, url, active and visible per target, newest-active FIRST. active: true marks the ONE page every other tool resolves to when you omit pageId — you do NOT need to list tabs and pass an id just to act on the current tab, only to act on a DIFFERENT one. visible is a WebView-only hint and is null for ordinary browser tabs on every browser tested; use active, not visible. Stale tabs accumulate across sessions; close unwanted ones with android_devtools_close_page.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID)
socketNoAbstract unix socket name (default: chrome_devtools_remote)

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations provided, the description carries the full disclosure burden and meets it thoroughly. It discloses the returned fields, newest-active-first ordering, the special meaning of 'active: true', the WebView-only nature of 'visible', and the caveat that stale tabs accumulate across sessions.

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?

Every sentence earns its place: each adds behavioral or usage guidance rather than repeating structured data. The main action is front-loaded, and the longer explanatory notes about 'active', 'visible', and stale tabs are placed after the core purpose, making the description dense but well-organized.

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?

For a list-only tool with no output schema and no annotations, this description is complete. It specifies returned fields, ordering, default-target semantics, and a cleanup path, while the two parameters are fully covered by the schema. An agent has everything needed to call this tool correctly.

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 baseline is 3. The description does not add extra meaning about 'udid' or 'socket' beyond the schema, but the schema already documents both parameters, so no critical semantic information is missing.

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 begins with a specific verb and object: 'List debuggable pages/targets available on the device.' It enumerates returned fields and clearly frames the tool as an enumeration action, distinguishing it from sibling DevTools commands like android_devtools_close_page. The purpose is unmistakable and immediately actionable.

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 explicitly tells agents when listing is unnecessary: 'you do NOT need to list tabs and pass an id just to act on the current tab, only to act on a DIFFERENT one.' It also names android_devtools_close_page as the tool for cleaning stale tabs, providing an actionable alternative and clear usage boundary.

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

android_devtools_mock_addAInspect

Add (or update in place, when id matches an existing route) a mock/abort rule for Chrome/WebView requests on this device. mode "mock" (default) serves the given status/headers/body without the request leaving the device; mode "abort" fails it so the page sees a network error. Routes apply immediately and survive navigation. WEB CONTENT ONLY: this intercepts requests made by browser/WebView pages. Requests made by native app code are NOT intercepted and never will be by this tool. Nothing device-wide is changed and no certificate is installed — the effect is scoped to the page. For requests made by native app code use android_traffic_mock_add instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoRoute id to update in place; omit to auto-generate a new one
bodyNoResponse body for mode "mock" (text, or base64 when bodyEncoding is "base64")
modeNo"mock" serves a canned response (default); "abort" fails the request
udidYesDevice id (Android serial or iOS UDID)
methodNoOptional HTTP method filter (e.g. "GET"/"POST"); matches any method when omitted
pageIdNoPin routing to a specific page id (from the *_list_pages tool). Omit to follow the active page automatically across navigations and new tabs — recommended.
socketNoAbstract unix socket name (default: chrome_devtools_remote)
statusNoHTTP status to serve for mode "mock" (default 200)
delayMsNoLatency injected before responding/failing, in ms (clamped to 60s)
enabledNoWhether the route is active (default true) — disabled routes are kept but ignored
headersNoResponse headers for mode "mock", as {headerName: value} — e.g. {"content-type": "application/json"}. On iOS a `charset` in content-type is NOT applied to the response: an HTML body with non-ASCII characters must declare it in the document (e.g. <meta charset="utf-8">) or it will be decoded with the default encoding and render as mojibake.
matchUrlYesURL pattern to match against the request's full URL
matchTypeNoHow matchUrl is interpreted against the request URL (default "contains")
bodyEncodingNoEncoding of `body` (default "text")

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 carries the full burden and does so thoroughly. It discloses mode effects (mock serves without leaving device, abort fails request), scope (web only, native untouched), that nothing device-wide changes and no certificate is installed, and that routes apply immediately and survive navigation. It also flags an iOS-specific charset caveat. This is exemplary 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?

The description is well-structured and front-loaded: it opens with the core action and mode semantics, then scoping, then alternatives. Every sentence adds necessary context (e.g., immediate application, persistence, iOS note). Despite its length, there is no fluff; it reads efficiently and covers the essential points without 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?

Given the tool's complexity (14 parameters, no output schema) and rich schema descriptions, the description covers all key aspects: purpose, modes, scope, persistence, and routing to alternatives. It also includes edge-case warnings (iOS charset) that are not in the schema. Nothing an agent needs to decide whether and how to call it is missing.

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 value beyond the schema by explaining the behavioral impact of the 'mode' parameter (e.g., 'without the request leaving the device') and the scoping implications of 'pageId'. It also clarifies the difference between mock and abort in practical terms, which aids parameter understanding. However, it doesn't elaborate on all parameters individually, so a 4 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 states a specific action ('Add (or update in place) a mock/abort rule') with a clear resource ('Chrome/WebView requests on this device'). It distinguishes itself from the sibling android_traffic_mock_add by explicitly limiting scope to web content. The purpose is unambiguous and separates it from similar tools.

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 use this tool (web content) and when not (native app code), and names the alternative (android_traffic_mock_add). It also clarifies that routes apply immediately and survive navigation, giving clear context on expected behavior. No ambiguity about selection criteria.

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

android_devtools_mock_clearAInspect

Remove ALL Chrome/WebView routes for this device and un-arm interception. Call this when finished — it restores completely normal networking for the browser on that device.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice id (Android serial or iOS UDID)

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and it does disclose the behavioral effect: it removes all routes, un-arms interception, and restores normal networking. It goes beyond the tool name by explaining the post-condition, though it omits details like idempotency or behavior when no mocks exist.

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 concise sentences with no wasted words. The first sentence states the primary action, the second provides usage guidance and the resulting network state. The structure is front-loaded and each sentence serves a distinct 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?

For a one-parameter tool with no output schema, the description sufficiently covers what the tool does and when to use it. It lacks only minor details like no-op behavior or error handling, which are not critical for this simple cleanup operation. Overall, an agent can invoke it confidently.

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 baseline is 3. The description does not add any information about the 'udid' parameter beyond what the schema already provides, so it earns exactly the baseline with no extra 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?

The description states a specific action ('Remove ALL Chrome/WebView routes') and a secondary behavior ('un-arm interception'), identifying the resource and scope clearly. It implicitly distinguishes from sibling tools like android_devtools_mock_remove by emphasizing 'ALL' and the teardown role, and from add/list/status by naming the cleanup operation.

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 temporal cue ('Call this when finished') and explains the outcome ('restores completely normal networking'), which tells an agent when to invoke it. However, it does not explicitly name alternatives (e.g., mock_remove for selective cleanup) or state when not to use it, so it falls short of a 5.

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

android_devtools_mock_listAInspect

List the Chrome/WebView mock/abort routes currently registered for this device, in match order (first match wins). WEB CONTENT ONLY: this intercepts requests made by browser/WebView pages. Requests made by native app code are NOT intercepted and never will be by this tool. Nothing device-wide is changed and no certificate is installed — the effect is scoped to the page.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice id (Android serial or iOS UDID)

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it states that nothing device-wide is changed, no certificate is installed, and effects are scoped to the page. It also discloses the first-match-wins ordering. It does not describe the output format, but that is a minor gap for a list 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?

Three concise, purposeful sentences. The primary action and ordering behavior are front-loaded, followed by essential scope caveats. There is no filler or redundant restating of the tool name.

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?

For a one-parameter, no-output-schema list tool, the description gives everything needed to invoke it correctly: what is listed, the ordering, the web-only scope, and the non-destructive behavior. It is complete enough for an agent to select and use it safely.

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% for the single required parameter, and the schema already describes udid clearly. The tool description adds no additional parameter-specific meaning, so the baseline score applies.

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 states a specific verb ('List'), a specific resource ('Chrome/WebView mock/abort routes'), and the current per-device scope. The 'WEB CONTENT ONLY' qualifier clearly separates this from native-traffic mock tools among the siblings.

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 explicitly excludes native app code, making it clear when this tool should not be used. It does not name the alternative native-traffic tool (e.g., android_traffic_mock_list), but the exclusion is unambiguous.

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

android_devtools_mock_removeAInspect

Remove one Chrome/WebView route by id. When the last route is removed the device is automatically un-armed, so no traffic is paused for nothing.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesRoute id to remove (from *_mock_list)
udidYesDevice id (Android serial or iOS UDID)

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral burden. It goes beyond the verb 'remove' by disclosing an important side effect: when the last route is removed, the device is automatically un-armed so traffic is no longer paused. It does not cover error behavior for nonexistent ids, but for a simple removal operation this is a minor gap.

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 short sentences with no filler. The first sentence front-loads the core operation, and the second sentence earns its place by disclosing a meaningful behavioral side effect.

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?

For a simple 2-parameter tool with no output schema, the definition is complete. It specifies what is removed, how the id is obtained, which device to target, and what happens on the last removal. Nothing essential is missing for correct invocation.

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 baseline applies. The description adds domain context by calling the id a 'Chrome/WebView route', but the schema already documents both parameters adequately. No additional parameter detail is needed.

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 states a specific action ('Remove'), a specific resource ('one Chrome/WebView route'), and the identification method ('by id'). The word 'one' helps distinguish it from the sibling mock_clear tool, making the tool's scope immediately clear.

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?

Usage is implied: an agent should obtain a route id from a mock-list tool and remove a single route. The id parameter description reinforces this by saying 'from *_mock_list'. However, there is no explicit guidance about when not to use this tool or that mock_clear is the alternative for removing all routes.

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

android_devtools_mock_statusAInspect

Report whether Chrome/WebView interception is currently armed on this device, which page target it is attached to, the active routes, and live hit counters (paused/mocked/aborted/passedThrough/errors). Check the counters to confirm a mock is actually firing — a route that never matches shows mocked: 0.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice id (Android serial or iOS UDID)

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it frames the tool as a read-only report ('Report whether...'), lists the exact data returned, and even explains a behavioral nuance—a route that never matches shows mocked: 0. It does not explicitly state 'no side effects', but the reporting language makes the non-mutating nature clear.

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 two dense sentences with no filler. The core status fields are front-loaded, and the counter-confirmation tip earns its place by teaching the user how to interpret the output.

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?

For a low-complexity status tool with a single parameter and no output schema, the description is complete: it explains what is reported, enumerates the counter categories, and provides concrete interpretation guidance. An agent has enough to invoke it correctly and interpret the result.

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?

The only parameter, udid, is already fully described in the input schema with 100% coverage. The description adds no additional parameter-level guidance, which is acceptable because the schema already provides the necessary meaning.

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 uses a specific verb ('Report') and names a concrete resource: Chrome/WebView interception state on the device, including page target, active routes, and hit counters. This clearly distinguishes it from mock management siblings like android_devtools_mock_add/mock_list/mock_remove, which configure rather than report status.

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 guidance to 'Check the counters to confirm a mock is actually firing' implies a clear diagnostic use case: verify that an armed mock is being hit. However, it does not explicitly state when to prefer this over android_devtools_mock_list or other status tools, nor does it name alternatives or exclusions.

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

android_devtools_navigateAInspect

Navigate a page running on the device to a URL via CDP (Page.navigate). If waitMs > 0, waits up to that many milliseconds for a Page.frameStoppedLoading event before returning. Returns { url (the requested URL), finalUrl (the ACTUAL post-redirect URL — non-null only when waitMs > 0, so redirects are visible), loaderId?, errorText?, frameStoppedLoading? }. Omit pageId to auto-select the visible/active page. On success the page it landed on becomes this device's current page, so you can call the other android_devtools_* tools straight afterwards WITHOUT pageId and stay on this tab — no list_pages round trip needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesURL to navigate to
udidYesDevice serial number (UDID)
pageIdNoTarget page id (auto-picked when omitted)
socketNoAbstract unix socket name (default: chrome_devtools_remote)
waitMsNoMilliseconds to wait for Page.frameStoppedLoading after navigating (default: 0 = do not wait)

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 behavioral burden and does so thoroughly. It discloses waiting semantics for Page.frameStoppedLoading, the exact return shape including finalUrl being non-null only when waiting, and the side effect of changing the device's current page.

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 front-loaded with the core action, then flows logically through wait behavior, return fields, and stateful usage. Despite its length, every sentence carries useful information and none are redundant with the schema.

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?

For a tool with no output schema, the description compensates by specifying the returned fields and their meaning, including nullability. It also covers the stateful page-selection behavior needed to correctly chain calls, making it complete for an agent to invoke correctly.

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 the description adds important meaning beyond field names: waitMs controls whether Page.frameStoppedLoading is awaited, pageId may be omitted for auto-selection, and finalUrl reveals redirects only when waiting. This exceeds the baseline expected from schema-only 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?

States a specific verb and resource: 'Navigate a page running on the device to a URL via CDP (Page.navigate)'. The android_devtools_* namespace and CDP framing clearly distinguish it from generic device or web navigation tools even without naming a sibling.

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 clear workflow context: how to omit pageId for auto-selection, and that after success the landing page becomes the current page so subsequent android_devtools_* calls need no pageId or list_pages round trip. It does not explicitly list exclusions or alternate tools to prefer instead, but the operational guidance is strong.

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

android_fpsBInspect

FPS / jank stats for a package via dumpsys gfxinfo (total/janky frames, jank %, frame-time percentiles, missed vsyncs).

ParametersJSON Schema
NameRequiredDescriptionDefault
pkgYesApp package name, e.g. com.android.settings
serialYesAndroid device serial (from `device_list`)

TDQS

B3.4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the behavioral burden. It discloses the underlying mechanism (`dumpsys gfxinfo`) and the exact metrics collected, which implies a read-only query and helps an agent understand what will happen. It does not mention prerequisites like app foreground state or whether any state is reset, but for a stat-retrieval tool the disclosed details are reasonably 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?

A single, front-loaded sentence that packs in the tool's purpose, implementation method, and metric list without any filler. Every phrase 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?

For a simple read-only tool with two straightforward parameters and no output schema, the description gives a complete enough picture: an agent knows the target package, the serial source is in the schema, and the expected output metrics are enumerated. It doesn't specify the exact return structure, but that is a minor omission for a stats 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 description coverage is 100%, so the parameters `serial` and `pkg` are already fully documented in the input schema. The description adds meaning only for `pkg` by showing the metric scope, which is useful but not necessary. The baseline of 3 applies because the schema does the heavy lifting.

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

Purpose4/5

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

The description clearly identifies the resource (a package) and the specific metrics (FPS/jank stats, total frames, jank %, percentiles, missed vsyncs), making the tool's function obvious. It doesn't use an explicit verb like 'retrieve' but is specific enough to distinguish from siblings like android_app_launch_time and ios_fps.

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 given on when to use this tool versus alternatives such as android_performance_snapshot, android_app_launch_time, or ios_fps. The description implies a performance measurement use case but provides no exclusions or sibling comparisons.

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

android_mjpeg_screenshotAInspect

PREFERRED fast screenshot of an Android device via the ALREADY-RUNNING shared video stream. Returns a single JPEG frame decoded from the live video stream — no fresh full-resolution screen grab is spawned. Use this for routine per-action screen checks; it is much faster than device_screenshot, so make it your default for iterating on a flow. Image is captured at the device physical resolution (the stream is never downscaled), so pixel positions match device_tap coords 1:1 — same invariant device_screenshot promises. Reserve device_screenshot for when you need the bundled labeled-elements list or a full-fidelity image. Image-only (no page-source bundling) to keep this call fast.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID)

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It reveals key traits: it decodes a frame from an already-running stream, spawns no fresh full-resolution grab, captures at physical resolution without downscaling, and matches device_tap coordinates 1:1. It also notes the image-only nature and speed trade-off, but it does not mention what happens if the shared stream isn't running, a minor gap.

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?

Every sentence in the description earns its place, covering purpose, performance, usage recommendation, resolution invariant, alternative guidance, and output format. The key facts are front-loaded ('PREFERRED fast screenshot'), and the section is dense with useful information but contains zero fluff or repetition.

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?

For a one-parameter tool with no annotations and no output schema, the description is remarkably complete. It states the return type ('single JPEG frame'), the resolution behavior, coordinate alignment with device_tap, and explicitly explains when to use the sibling tool instead. Nothing an agent would need to call it correctly is missing.

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?

The only parameter, 'udid', is fully described in the schema as 'Device serial number (UDID)' with 100% schema coverage. The description does not add any additional meaning to the parameter beyond the schema, so the baseline of 3 applies.

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 a specific verb+resource: 'PREFERRED fast screenshot of an Android device via the ALREADY-RUNNING shared video stream.' It also explicitly distinguishes itself from sibling device_screenshot and ios_mjpeg_screenshot by naming the alternative and the use case, making the purpose unambiguous.

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 gives explicit when-to-use guidance: 'Use this for routine per-action screen checks' and states it should be the 'default for iterating on a flow.' It also provides when-not-to-use guidance, directing the agent to 'Reserve device_screenshot for when you need the bundled labeled-elements list or a full-fidelity image,' which is a clear alternative and exclusion.

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

android_performance_record_startAInspect

Start recording per-process CPU/memory over time (like screen recording, for metrics). Stop with android_performance_record_stop.

ParametersJSON Schema
NameRequiredDescriptionDefault
pkgNoFocus processes containing this package; else top by CPU
serialYesAndroid device serial (from `device_list`)
intervalMsNoSample interval ms (default 1000)

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations provided, the description carries the behavioral burden. It discloses that recording is ongoing ('over time') and that it must be stopped, which is useful. However, it does not mention what happens on repeated starts, whether recording is exclusive per device, or how data is retrieved after stopping.

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 with no filler. The core action is front-loaded, and the stop instruction is a useful second sentence. The analogy 'like screen recording, for metrics' is brief and aids understanding without bloating the description.

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?

The description is adequate for a simple start tool but lacks some context an agent may need: there is no mention of how results are obtained (presumably from the stop tool), whether only one recording can be active, or any caveats about starting multiple recordings. With no annotations and no output schema, this is a notable gap.

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 parameters are already documented in the input schema. The description adds only high-level context ('per-process CPU/memory') that loosely maps to the pkg parameter, but provides no additional 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 states a specific verb ('Start') and resource ('recording per-process CPU/memory over time'), which makes the tool's function immediately understandable. It also explicitly names the companion stop tool, helping distinguish it from the lifecycle sibling.

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 clearly indicates the pairing with android_performance_record_stop, giving basic lifecycle guidance. However, it does not mention when to use this tool instead of android_performance_snapshot or other performance tools, so alternative selection is left to inference.

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

android_performance_record_stopAInspect

Stop a performance recording and return the full time-series + a per-process summary (avg/peak CPU, peak memory).

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIdYesSession id from android_performance_record_start

TDQS

A4/5.0
Behavior3/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 the return format (time-series + summary) and implies statefulness via sessionId. It does not mention side effects like whether the recording is deleted or if errors occur when no active session exists. With zero annotation coverage, this is a moderate disclosure.

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?

A single, well-structured sentence that front-loads the action and includes key return details. No wasted 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 what the tool returns, which is essential. For a one-parameter stop tool, this is largely complete. Minor omissions like prerequisites (an active recording) are implied by the sessionId reference.

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?

The schema provides 100% coverage for sessionId, explicitly stating it comes from android_performance_record_start. The description adds no additional meaning beyond the schema, so a baseline 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 states a specific verb ('Stop'), the resource ('performance recording'), and the return value (full time-series and per-process summary). This clearly differentiates it from siblings like android_performance_record_start (which starts) and android_performance_snapshot (which likely takes an instant snapshot).

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 implies it is the counterpart to android_performance_record_start, and the schema parameter sessionId references the start tool. However, it does not explicitly mention alternatives like android_performance_snapshot or state when not to use it. The pairing with start makes usage clear enough.

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

android_performance_snapshotBInspect

Snapshot per-process CPU %% and memory (MB) for an Android device via top. Top-N by CPU, or one app via pkg.

ParametersJSON Schema
NameRequiredDescriptionDefault
pkgNoFilter to processes whose name contains this package
topNNoTop-N by CPU (default 15)
serialYesAndroid device serial (from `device_list`)

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 the full burden of disclosing behavior. It mentions the mechanism ('via top') and the outputs (CPU %% and MB), but doesn't state whether the operation is read-only, how the results are structured, or whether any device state is affected. For a monitoring tool this is minimally informative, but it leaves important behavioral questions unanswered.

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 entire description is one efficient sentence that front-loads the core action and resource, then adds the two usage modes. There is no filler or redundancy; every word earns its place.

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 3-parameter snapshot tool with full schema coverage, the description covers the core function well. However, there is no output schema and no mention of the return format (e.g., a table or list), nor any edge cases like what happens when both topN and pkg are provided. It's adequate for an experienced agent but leaves some gaps.

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 already describes all three parameters at 100% coverage, giving a baseline of 3. The description adds meaningful interaction semantics: 'Top-N by CPU, or one app via pkg' clarifies that pkg overrides the top-N mode. This goes beyond the individual property descriptions and helps an agent reason about parameter combinations.

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 ('Snapshot') and resource ('per-process CPU and memory for an Android device via top'), making the core function immediately clear. It also names the two operating modes (Top-N by CPU or single app via pkg). It doesn't explicitly compare against siblings, but the word 'Snapshot' naturally distinguishes it from android_performance_record_start/stop.

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 gives no guidance on when to prefer this tool over alternatives like android_performance_record_start/stop or ios_performance_snapshot. It only explains the two in-tool modes (top-N vs pkg), not the selection criteria or contexts where this tool should be used or avoided. An agent must infer usage entirely from the tool name.

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

android_traffic_flowsAInspect

Snapshot recent DECRYPTED HTTPS flows (request/response) captured since android_traffic_start. Each flow: method, url, host, status, contentType, req/resp sizes, durationMs. Set includeBodies to also return headers + (truncated) request/response bodies. Filter by urlSubstring or onlyErrors. Returns the most recent limit flows.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax flows to return, most recent first-matched (default 100)
serialYesAndroid device serial (adb serial)
onlyErrorsNoOnly 5xx / connection-error flows
urlSubstringNoOnly flows whose URL contains this substring
includeBodiesNoInclude headers + bodies (each body capped at 32000 chars). Default false.

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries full burden and does substantial work: 'Snapshot' signals a read-only one-time view, 'DECRYPTED HTTPS' reveals coverage, 'captured since android_traffic_start' indicates a prerequisite session, and 'truncated' bodies are disclosed. It stops short of discussing failure modes or capture lifecycle, but the key non-obvious behaviors are stated.

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

Conciseness5/5

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

Four dense sentences with no filler; the core resource and dependency are front-loaded, and each sentence covers a distinct aspect (what it returns, body option, filters/limits).

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?

The description supplies return-field details (needed because no output schema exists), the prerequisite, and filtering options, while the required serial is documented in the schema. It is slightly brief about edge cases such as missing capture sessions, but is complete enough for normal use.

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; description adds some behavior around includeBodies ('also return headers + bodies') and describes filter effects, but largely restates schema details rather than adding substantially new parameter meaning.

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 names a specific verb, resource, and scope: 'Snapshot recent DECRYPTED HTTPS flows (request/response) captured since android_traffic_start.' It also lists the principal fields returned, and the explicit dependency on android_traffic_start differentiates it from traffic mock/start/status and iOS counterparts.

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?

Clearly implies the tool is for reading traffic after android_traffic_start, and explains parameter use: includeBodies for bodies, urlSubstring/onlyErrors for filtering, limit for recency. It does not explicitly name when-not-to-use alternatives, but the context is strong and no other Android tool provides this exact view.

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

android_traffic_mock_addAInspect

Add (or update in place, if id matches an existing route) a mock/abort rule that short-circuits future matching HTTPS requests on this device inside the TLS-inspecting proxy — the request never reaches the real server. mode "mock" (default) returns the given status/headers/body; mode "abort" kills the connection so the app sees a network failure. Requires TLS capture to already be running on this device (android_traffic_start) — routes are stored per-device and take effect live, no restart needed. Certificate-pinned apps cannot be intercepted at all (same limit as capture itself), so a route targeting pinned traffic will simply never match.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoRoute id to update in place (replaces the existing route); omit to auto-generate a new one
bodyNoResponse body to inject for mode "mock" (text, or base64 when bodyEncoding is "base64")
modeNo"mock" injects a canned response (default); "abort" kills the connection
methodNoOptional HTTP method filter (e.g. "GET"/"POST"); matches any method when omitted
serialYesAndroid device serial (adb serial)
statusNoHTTP status to inject for mode "mock" (default 200)
delayMsNoLatency to inject before responding/aborting, in ms (clamped to 60s server-side)
enabledNoWhether the route is active (default true) — disabled routes are kept but ignored
headersNoResponse headers to inject for mode "mock", as {headerName: value} — e.g. {"content-type": "application/json"}
matchUrlYesURL pattern to match against the request's full URL
matchTypeNoHow matchUrl is interpreted against the request URL (default "contains")
bodyEncodingNoEncoding of `body` (default "text")

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden and does it thoroughly: mutation happens in place, requests never reach the real server, abort causes a network failure, routes are per-device and take effect live, and certificate-pinned traffic will never match. These are exactly the side effects and limits an agent needs.

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?

Four dense sentences, each earning its place: definition/effect, modal behavior, prerequisite/live behavior, and a critical limitation. The most important fact (add/update a rule) 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?

Given 12 parameters, no output schema, and no annotations, this is complete: it covers prerequisites, live application, per-device storage, and the pinned-certificate boundary. Nothing critical to deciding whether or how to call the tool is missing.

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 the baseline is 3, but the description adds a useful behavioral layer on top: how `mode` changes behavior, how `id` enables updating in place, and how `serial` scopes routes per-device. It doesn't restate all 12 parameters, which is appropriate given the schema already documents them.

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 gives a specific verb and resource: add or update a mock/abort rule in the TLS-inspecting proxy. It also clarifies scope (device-level HTTPS traffic, not a browser context) and mentions `android_traffic_start`, so an agent can tell it apart from web/devtools mock tools.

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 a clear precondition (TLS capture must already be running) and a hard limitation (certificate-pinned apps won't match). It doesn't explicitly name alternatives like `android_traffic_mock_remove` for deletion or `android_devtools_mock_add` for browser-level mocking, so when-to-use-vs-siblings is mostly inferred from names.

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

android_traffic_mock_listAInspect

List the mock/abort routes currently configured for this device (see android_traffic_mock_add).

ParametersJSON Schema
NameRequiredDescriptionDefault
serialYesAndroid device serial (adb serial)

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of disclosing behavior. The verb 'List' and phrase 'currently configured' imply a read-only operation that reflects the present state without modifications. However, it does not explicitly state safety traits (e.g., 'does not modify routes') or address potential side effects, permissions, or error conditions. This is adequate but not rich.

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

Conciseness5/5

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

The description is a single, front-loaded sentence that begins with the verb 'List' and directly states the resource. It avoids redundancy and adds a useful cross-reference to android_traffic_mock_add for context. Every word earns its place.

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 list tool with one parameter and no output schema, the description provides enough context to call it correctly: it names the resource, the scope (this device), and clarifies terminology via cross-reference. It doesn't mention return format or error cases, but these are less critical for a straightforward read-only list operation.

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 'serial' parameter, and the schema already documents it as 'Android device serial (adb serial)'. The description adds no parameter-specific detail beyond the implicit 'for this device' mapping. Since the schema carries the full parameter meaning, a baseline 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 states a specific verb and resource: 'List the mock/abort routes currently configured for this device.' It clearly identifies the operation as a listing action within the android_traffic_mock family, distinguishing it from sibling tools like android_traffic_mock_add and android_traffic_mock_remove. The cross-reference to android_traffic_mock_add further clarifies what the routes are.

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 does not provide explicit guidance on when to use this tool versus alternatives. It only references android_traffic_mock_add for conceptual context, but does not state conditions like 'use this when you need to review current mocks' or contrast with add/remove tools. The absence of exclusions or alternative routing leaves the agent to infer usage from the name and sibling list.

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

android_traffic_mock_removeAInspect

Remove one mock/abort route by id, or every route on this device when all is true. Returns the resulting route list.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoRoute id to remove (from android_traffic_mock_add or android_traffic_mock_list)
allNoRemove every route configured for this device instead of a single one
serialYesAndroid device serial (adb serial)

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations provided, the description must carry the full burden of behavioral disclosure. It does state the mutating action and the return value ('Returns the resulting route list'), which is useful. However, it does not disclose side effects such as irreversibility, what happens if the id does not exist, or the behavior when both id and all are supplied. The description is adequate but not deeply 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?

One sentence conveys the action, both modes of operation, and the return value with no filler or repetition. The most important information ('Remove') is front-loaded, and every phrase contributes to the agent's understanding of how to use the tool.

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?

The description includes the return value, which is important given the lack of an output schema. However, it leaves open a critical edge case: the schema allows both id and all to be provided simultaneously, but the description doesn't state what happens in that case or what occurs when neither is provided. For a mutation tool with no annotations and no output schema, this gap prevents the description from being fully 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?

The schema already documents all three parameters with descriptions, so the baseline is 3. The description's references to 'by id' and 'when all is true' essentially mirror the schema's own descriptions without adding further semantics. It does not clarify the relationship between id and all (e.g., whether they are mutually exclusive), so there is no added meaning 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 opens with a specific action, 'Remove', and names the resource as a 'mock/abort route', immediately distinguishing this tool from the sibling android_traffic_mock_add and android_traffic_mock_list tools. It clearly covers both modes of operation (by id and by all), leaving no ambiguity about what the tool does.

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 clear context for when to use each parameter: 'by id' for a single route and 'when all is true' for every route on the device. It does not explicitly route the agent away from alternative tools such as android_devtools_mock_remove or ios_traffic_mock_remove, but the tool name and the phrase 'on this device' make the intended context evident. This earns a 4 rather than a 5 because alternatives are not explicitly named.

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

android_traffic_startAInspect

Start TLS inspection on an Android device: brings up a per-device TLS-inspecting proxy and points the device at it, so subsequent HTTPS traffic is DECRYPTED and captured (works for native apps too, unlike Chrome DevTools). If com.robotactions.dpc is Device Owner, the proxy AND CA are set SILENTLY (installMode "dpc", zero on-device interaction); otherwise it falls back to an adb global proxy (installMode "manual") and the app must already trust user certs. Then drive the app and read flows with android_traffic_flows. The app must trust user certificates (network_security_config, usually a debug build); certificate-pinned apps will not decrypt.

ParametersJSON Schema
NameRequiredDescriptionDefault
serialYesAndroid device serial (adb serial)

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations provided, the description carries the full behavioral burden, and it delivers: it discloses the proxy setup, silent DPC mode versus manual adb mode, CA/proxy installation behavior, fallback conditions, and the certificate-pinning limitation. This gives an agent an accurate model of side effects and failure modes.

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 dense but every sentence earns its place: what it does, how it behaves, what to do next, and when it will fail. The most important action is front-loaded, and technical mode details are packed efficiently without 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?

For a one-parameter, no-output-schema tool, this description is complete: it explains the outcome, the two operational modes, prerequisites, limitations, and the next recommended step. An agent has enough context to decide whether to invoke it and what to expect when it does.

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?

The schema already documents the single required parameter 'serial' at 100% coverage, so the description does not need to add much. It reinforces the per-device nature of the operation but does not add new parameter-level meaning beyond the schema baseline.

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 states a specific verb and resource ('Start TLS inspection on an Android device') and explains the concrete mechanism: a per-device TLS-inspecting proxy that decrypts and captures HTTPS traffic. It also distinguishes itself from Chrome DevTools by noting it works for native apps, making it easy to separate from related network-capture tools.

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 gives explicit when-to-use context: use this when you need decrypted HTTPS traffic from native apps, unlike Chrome DevTools. It also names the follow-up tool (android_traffic_flows), explains the two install modes, and states the prerequisite that apps must trust user certificates, with pinned apps called out as not decryptable.

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

android_traffic_statusAInspect

Report whether TLS inspection is running for an Android device, its proxy mode (dpc/manual), and how many flows are buffered.

ParametersJSON Schema
NameRequiredDescriptionDefault
serialYesAndroid device serial (adb serial)

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. The verb 'Report' implies a read-only operation with no side effects, but it does not explicitly state that it does not modify the device or disclose any prerequisites (e.g., whether traffic monitoring must be active).

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 sentence that front-loads the action and immediately enumerates the key output values. Every word is functional with no filler.

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 one-parameter status tool, the description fully conveys what the agent needs to know to invoke it and interpret the result conceptually. It could mention return value structure or prerequisites, but the lack of an output schema and the simplicity of the tool make the description 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 description coverage is 100% and the single parameter 'serial' is documented as 'Android device serial (adb serial)'. The tool description adds no additional meaning about the parameter, so the baseline of 3 applies.

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 uses the specific verb 'Report' with a clear resource: TLS inspection status for an Android device. It names the concrete data points returned (whether TLS inspection is running, proxy mode, buffered flow count), which clearly distinguishes it from sibling tools like android_traffic_start/stop and android_traffic_flows.

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 this is the status-check tool within the android_traffic_* family, but it does not explicitly state when to prefer it over alternatives or mention any exclusions. An agent must infer from context that this is the read-only status counterpart to the start/stop/mock tools.

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

android_traffic_stopAInspect

Stop TLS inspection for an Android device from THIS (AI) consumer only. If the workspace UI (or another agent) also has capture open on the same device, the TLS-inspecting proxy and device proxy (and DPC CA) are left running for them — the response includes stillRunning: true in that case. Only when every consumer has stopped are the proxy killed, the device proxy/CA cleared, and buffered flows discarded.

ParametersJSON Schema
NameRequiredDescriptionDefault
serialYesAndroid device serial (adb serial)

TDQS

A4.4/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure, and it does so well. It explains the scope ('THIS consumer only'), the conditional retention of the TLS-inspecting proxy, device proxy, and DPC CA when other consumers are active, the response's stillRunning field, and the final cleanup actions (killing the proxy, clearing device proxy/CA, discarding buffered flows). This is rich, honest behavioral context.

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

Conciseness5/5

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

The description is three sentences: the first delivers the primary action and scope, the second explains the conditional state with another consumer, and the third clarifies the final cleanup. Every sentence earns its place and the structure is front-loaded with the core purpose, followed by necessary edge-case detail with no fluff.

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 one-parameter tool with no output schema, the description covers the key behavior, side effects, and the important stillRunning response scenario. It does not explicitly describe error cases (e.g., if no capture is active), but given the simplicity of the parameter and the detailed behavioral coverage, it is nearly complete for correct invocation.

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?

The input schema already covers the single parameter 'serial' with 100% description coverage ('Android device serial (adb serial)'), so the schema does the heavy lifting. The tool description does not add any additional meaning about the parameter itself, which matches the baseline for full schema 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 names a specific verb ('Stop TLS inspection') and a specific resource ('Android device'), and immediately scopes it with 'from THIS (AI) consumer only,' which distinguishes it from any global stop or from sibling tools like android_traffic_start or android_traffic_status. The conditional behavior and response field are also stated, leaving no ambiguity about what the tool accomplishes.

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 clearly implies the tool is used to stop a previously started TLS inspection for this specific consumer, and it explains the multi-consumer nuance, guiding the agent on when the underlying proxy is actually torn down. However, it does not explicitly state when to prefer this over android_traffic_status or mention alternatives, though the name and context make the primary use case obvious.

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

android_video_streamAInspect

Get a LIVE video-stream link for an Android device that a human can open in a browser to watch the screen in real time (unlike device_screenshot, which is one frame). Returns a short-lived, single-device viewer URL — open it directly. The server transcodes the device's live video stream to MJPEG on the fly. Use this to let a person supervise what the agent is doing on the device.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID)

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries the transparency burden and does well: it discloses the short-lived nature, single-device constraint, direct openability in a browser, and on-the-fly MJPEG transcoding. It could additionally clarify URL expiration duration or any stream lifecycle/cleanup expectations, but the core behavior is clear.

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

Conciseness4/5

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

The description is well-structured and front-loads the primary purpose. The four sentences each provide distinct value, though the 'live/real time/on the fly' phrasing is slightly redundant.

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?

The description explains the return type (a short-lived viewer URL), the mechanism (MJPEG transcoding), and the intended use. With no output schema, it provides enough for an agent to select and invoke the tool, though exact URL expiration or auth requirements are not specified.

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?

There is only one parameter (udid), and the input schema already describes it as 'Device serial number (UDID)' with 100% coverage. The description does not add meaning beyond the schema, but none is really needed for such a simple parameter.

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 fetches a live video-stream link for an Android device, for real-time human viewing in a browser. It explicitly contrasts with device_screenshot (single frame), which disambiguates from the most similar sibling.

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 gives a clear use case: 'let a person supervise what the agent is doing on the device.' It also names device_screenshot as a non-live alternative. However, it does not explicitly mention when to prefer or avoid other related tools such as android_mjpeg_screenshot or ios_video_stream.

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

app_deleteAInspect

Delete an uploaded app file from the server. Use app_list to get the file ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
appIdYesFile ID from app_list

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It clearly discloses that the action is destructive and identifies what is destroyed ('uploaded app file' on 'the server'). However, it does not state whether deletion is permanent, whether there are side effects, or what a successful/unsuccessful call returns.

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 short sentences, both useful: the first states the operation and target, the second tells the agent how to obtain the required parameter. No filler or repetition.

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 one-parameter, no-output-schema delete operation, the description plus schema provide enough for an agent to call it correctly. It could mention irreversibility or success/error behavior, but the low complexity keeps the gap minor.

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%: the schema already says 'File ID from app_list'. The description's 'Use app_list to get the file ID' reinforces that source but adds no new semantic information 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 uses a specific verb ('Delete') with a clear resource ('uploaded app file') and location ('from the server'), and it points to app_list for IDs. This distinguishes it from sibling operations like app_upload, app_install, or device_uninstall_app.

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?

It provides one guideline: use app_list to obtain the file ID before calling. It does not explicitly state when to choose this over other app-related tools nor mention exclusions (e.g., this is not for uninstalling an installed app from a device). The context is implied rather than fully specified.

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

app_installAInspect

Install an uploaded app on a device. For Android: installs APK via the Android transport. For iOS: installs IPA . Use app_list to get the file ID first.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice UDID to install on
appIdYesFile ID from app_list

TDQS

A4/5.0
Behavior3/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 of behavioral disclosure. It discloses the transport mechanisms (APK via Android transport, IPA for iOS) and the prerequisite of an uploaded app. However, it does not mention potential side effects, required device states (e.g., unlocked, connected), or whether the installation overwrites existing apps. It gives some useful behavioral detail but falls short of full transparency for a mutating operation.

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 two sentences with no wasted words. The main action is front-loaded, followed by platform-specific details and a workflow hint. Every sentence earns its place, making it appropriately concise and well-structured.

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 two-parameter tool with no output schema and no annotations, the description covers the essential context: what the tool does, platform variations, and the prerequisite to fetch the file ID. It is complete enough for an agent to call the tool correctly. Minor gaps like return values or failure handling are not critical for this simple operation, making it slightly above the minimum viable 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%, so the schema already documents both parameters ('Device UDID to install on' and 'File ID from app_list'). The description adds minimal parameter-specific value—only reinforcing the appId prerequisite by referencing app_list. Since the schema carries the full semantic load, a baseline score of 3 is appropriate; the description does not go 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 states a specific verb and resource: 'Install an uploaded app on a device.' It further distinguishes itself by platform ('For Android: installs APK via the Android transport. For iOS: installs IPA.'), which separates it from siblings like app_upload (uploading) and device_launch_app (launching). The prerequisite 'Use app_list to get the file ID first' also reinforces its role in the app workflow.

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 clear context for when to use the tool: after uploading an app, and it names the prerequisite of obtaining the file ID via app_list. It doesn't explicitly mention alternatives or exclusions, but the platform-specific behavior implies the scope is generic installation across Android and iOS, distinguishing it from platform-specific install tools like ios_install_app. This qualifies as clear context without explicit exclusions.

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

app_listAInspect

List uploaded app files belonging to the current user.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior3/5

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

No annotations are present, so the description carries the burden. It correctly implies a read-only listing operation but does not mention whether results are paginated, sorted, or what fields are returned (e.g., file name, size, upload date). This is acceptable for a simple list tool but leaves some behavior implicit.

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?

A single, front-loaded sentence with no filler. It states the action, resource, and scope efficiently.

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?

For a zero-parameter list tool with no output schema, the description is complete. The agent knows exactly what will happen and does not need additional invocation guidance.

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 and the schema is empty, so there is no parameter burden. The description still adds a useful semantic detail—'belonging to the current user'—that helps the agent understand the implicit filtering.

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 uses a specific verb ('List') plus resource ('uploaded app files') and scope ('belonging to the current user'). It clearly distinguishes this from siblings like app_upload, app_delete, and device_list_apps (which lists installed on-device apps).

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 phrase 'uploaded app files belonging to the current user' gives a clear context of when to use this tool. It does not explicitly name alternatives or exclusion criteria, but the scoping makes the intended use obvious enough.

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

app_uploadAInspect

Upload an app build (.apk/.ipa) to your App Library. Send the file in chunks: base64-encode at most 50MB of the file per call as fileData, with chunkIndex (0-based) and totalChunks; the build is registered when the last chunk arrives. A file up to 50MB may be sent in one call without chunkIndex/totalChunks. .ipa files are re-signed for your devices on the way in unless skipResign is true. Returns the id that app_install and appium:app "ra-app://" use.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileDataYesBase64-encoded file data — at most 50MB decoded per call
fileNameYesFile name (e.g. "myapp.apk" or "myapp.ipa")
userEmailNoUser email for file ownership (defaults to the authenticated user)
chunkIndexNoChunk index (0-based) for chunked uploads
skipResignNoKeep an .ipa exactly as uploaded (it is already signed for the target devices)
totalChunksNoTotal number of chunks for chunked uploads

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 carries the full burden, and it delivers: it explains that the build is only registered when the last chunk arrives, that .ipa files are re-signed unless skipResign is true, and that the tool returns an id used downstream. These are non-obvious behavioral details beyond a simple 'upload' statement.

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?

Five sentences, each carrying essential information: purpose, chunking protocol, single-call shortcut, re-signing behavior, and return value. The most important information is front-loaded, and there is no filler or repetition.

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?

This is a moderately complex tool with 6 parameters and no output schema. The description covers the chunked upload mechanics, the boundary condition for single-call uploads, the .ipa transformation behavior, and the return value with its downstream consumers. The agent has enough to call it correctly.

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 the baseline is 3. The description adds real semantic value by explaining the chunkIndex/totalChunks protocol, the 50MB per-call limit, the single-call shortcut, and the skipResign behavior for .ipa files, which goes beyond the schema's field-level 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 opens with a specific verb and resource: 'Upload an app build (.apk/.ipa) to your App Library.' It clearly distinguishes this from related sibling tools like app_install by defining this as the upload step and noting that the returned id is consumed by app_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 provides clear contextual guidance: it explains the chunking workflow, when chunking can be skipped (files up to 50MB), and how the response id feeds into app_install/appium:app. It does not explicitly state when-not-to-use this tool or name alternatives, but the usage context is unambiguous.

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

automation_reportAInspect

Pre-aggregated automation statistics over a date range: pass/fail/active counts, pass rate, per-platform and per-device breakdowns, the most-failed commands and the slowest ones. USE THIS FOR ANY CHART OR TOTAL — the counts are computed server-side over the full period, so they are correct where tallying automation_sessions_list rows would silently only cover the recent window. The breakdowns map directly onto a pie or bar chart (ra-chart). Omit the dates for the default period.

ParametersJSON Schema
NameRequiredDescriptionDefault
endDateNoISO date (YYYY-MM-DD, zero-padded) — end of the window, inclusive.
platformNoRestrict to one platform, e.g. "android" or "ios".
startDateNoISO date (YYYY-MM-DD, zero-padded) — start of the window, inclusive.
testSuiteNoRestrict to one suite.

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral burden. It discloses that counts are computed server-side over the full period, making results authoritative where client-side tallying would be incomplete, and it reveals that breakdowns map directly to chart components. It does not discuss errors, permissions, or response shape, but the most important behavioral caveat is clearly surfaced.

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 dense but efficient: it enumerates outputs, states the primary use case, explains the correctness advantage over the sibling tool, maps results to chart components, and gives a default-behavior tip in three sentences. Every sentence contributes new information and the most important directive is front-loaded in caps.

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?

Even without an output schema, the description names the concrete aggregates and breakdowns the agent should expect, covers all four optional parameters through the schema, and adds usage and defaulting context. For a read-oriented reporting tool, this is sufficient for a correctly targeted call.

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 the baseline is 3, but the description adds value by explaining that omitting startDate and endDate selects the default period. It also frames platform and testSuite as optional restrictions in a way consistent with the schema. This goes slightly beyond the schema's field-level 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 identifies this as a pre-aggregated automation statistics tool, enumerates the exact data it returns (pass/fail counts, pass rate, per-platform/per-device breakdowns, slowest/most-failed commands), and explicitly frames it as the tool for charts and totals. It distinguishes itself from automation_sessions_list by calling out that manual tallying would only cover the recent window.

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?

It gives direct usage direction: 'USE THIS FOR ANY CHART OR TOTAL' and explains why it is the correct choice over automation_sessions_list for aggregate accuracy. It also names the alternative explicitly and provides the practical default-period hint, so an agent can decide when to select this tool without opening either schema.

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

automation_session_commandsAInspect

Read the step-by-step command history of a run — every action it performed, in order, with duration and pass/fail per step. THIS IS THE DEBUGGING TOOL: to explain why a run failed, fetch it with failuresOnly=true to land directly on the failing step, then read the steps immediately before it for context. When a failed run has NO failed command — an assertion failure, where every WebDriver call succeeded and the test reported the verdict itself — failuresOnly returns no steps and a whyNoFailedSteps block naming what the run reported and which step carried it, so an empty list is never mistaken for "nothing went wrong" and you do not need to re-fetch the whole history to find out. Each entry carries the error message when the step failed, and every element-scoped step (click, sendKeys, getText…) carries the locator that found its element plus the index of the find it came from — so a click at step 24 reads as the button it clicked, not an opaque id. On a run that is still going this returns the steps completed so far, so it is also how you answer "where has it got to?". For browser runs, follow up with session_console_logs / session_network_logs using the SAME session id to see whether a JS error or a failed request explains it. Output is summarised and capped, so ask for a filtered view rather than everything — when a step needs explaining, take its index to automation_session_step for the request/response bodies and the locator behind an element id.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax steps to return (default 200, which is also the ceiling). Returns the LAST n steps, not the first — a run that fell over did so at the end. On a long run that means the window can exclude the very failure `firstFailureIndex` points at, so use failuresOnly=true to land on it instead of raising this.
sessionIdYesThe run's session id.
failuresOnlyNoReturn only steps that failed. Use this FIRST when debugging — it is usually one or two rows out of hundreds.

TDQS

A4.7/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 and does so thoroughly: it discloses output cap/summarisation, failuresOnly returning empty plus a whyNoFailedSteps block, per-step error messages, element locators and find indices, behavior for still-running sessions, and the need to use the same session id for follow-up logs. This goes well beyond what the schema exposes.

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 long, but appropriately so for a debugging tool with subtle behaviors. It is front-loaded with the core purpose and then covers edge cases and follow-up actions in a logical order. Every sentence adds operational value; there is no filler or redundancy that would justify a lower score.

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 there is no output schema and no annotations, the description compensates exceptionally well: it explains output shape highlights, edge cases, progress behavior, and downstream tooling. An agent has enough context to call this correctly, interpret empty results, and know when to escalate to automation_session_step or browser log tools.

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 baseline is 3. The schema already documents sessionId, limit, and failuresOnly, including the 'last n steps' behavior and the ceiling. The description reinforces failuresOnly=true and the idea of requesting filtered views, but adds no genuinely new parameter-level semantics beyond what the schema provides.

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 opens with a specific verb and resource ('Read the step-by-step command history of a run') and immediately frames the tool as the debugging tool, distinguishing it from sibling tools like automation_session_step and session_console_logs. It clearly communicates both what the tool does and how it stands apart.

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 gives explicit when-to-use guidance: debugging failed runs, using failuresOnly=true first, checking assertion-failure cases, tracking in-progress runs, and following up with session_console_logs / session_network_logs. It also names the alternative for detailed step inspection (automation_session_step), leaving no ambiguity about workflow.

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

automation_session_getAInspect

Read one finished automation run: its verdict, the test it belonged to, the device/browser it ran on, its full desired capabilities, how long it took, and whether a video or failure snapshot exists. START HERE when the user pastes a session id or an /automation?session_id=... link and asks what happened, why it failed, or how it went. Returns verdict together with confidence: "reported" means the test itself declared the outcome and is authoritative; "inferred" means the run reported nothing and the platform guessed from how it ended — accurate most of the time but NOT a fact, so say so rather than stating it flatly. stillRunning: true means the run has not finished yet — report it as in progress, never as "no result". Only your own runs are readable; another user's session is indistinguishable from one that does not exist.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIdYesThe run's session id — the `session_id` value from an /automation?session_id=... link, or the id shown on the run.

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden and delivers rich behavioral detail: the meaning of 'reported' versus 'inferred' verdicts, the warning not to state inferred results as fact, the 'stillRunning: true' in-progress interpretation, and the privacy caveat that other users' sessions appear nonexistent. This goes well beyond the minimal safety profile.

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 somewhat long but every sentence earns its place: field list, triggering scenario, verdict confidence semantics, in-progress handling, and access restriction. It is front-loaded with the core purpose and practical entry condition, with no filler or repetition.

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?

For a one-parameter read tool with no output schema, the description is unusually complete. It covers what return values mean, how to interpret ambiguous outcomes, how to handle unfinished runs, and an access caveat. An agent has everything needed to call it correctly and interpret the result accurately.

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% and the single required parameter sessionId is already described accurately in the schema. The description adds minor context about where the id comes from (the link or the run display) and how it relates to the tool's purpose, but this is not a significant semantic addition 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 opens with a specific verb and resource: 'Read one finished automation run' and enumerates the exact fields returned (verdict, test, device/browser, capabilities, duration, video/snapshot existence). It clearly distinguishes this get-by-id tool from sibling tools like automation_sessions_list by tying it to a pasted session id or /automation?session_id=... link.

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 explicitly tells the agent when to start here: when the user pastes a session id and asks what happened, why it failed, or how it went. It also gives important context about only reading one's own runs. However, it does not name alternative tools or explicitly state when not to use this tool, so it falls just short of full sibling routing.

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

automation_sessions_listAInspect

Find and list your automation runs — use for "how did my tests go", "what failed recently", "show me the runs for suite X", or to locate a run when the user describes it instead of giving an id. Every filter is applied by the SERVER across your whole history, so a suite or a session id from weeks ago is found just as reliably as one from today. total is the true number of matching runs; runs is one page of them, so page with offset rather than assuming the first page is everything. Pass search to hunt for a session id — the short 8-character form shown in the UI and the full id both work. For pass rates and aggregate breakdowns use automation_report instead of tallying these rows.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax runs per page (default 50, which is also the ceiling).
offsetNoSkip this many matching runs — page through with `total` to know when to stop.
searchNoFree text matched against session id, test name and suite. Use this for a pasted session id; the truncated form shown in the UI matches too.
endDateNoISO date (YYYY-MM-DD, zero-padded) — latest run to include.
platformNoOnly runs on this platform, e.g. "android", "ios", "linux".
startDateNoISO date (YYYY-MM-DD, zero-padded) — earliest run to include.
testSuiteNoOnly runs from this suite (exact match).
deviceUdidNoOnly runs on this device (exact udid match).
failedOnlyNoOnly runs that failed — reported failures AND inferred ones, matching the verdict this tool reports.

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 fully carries the behavioral burden. It discloses that filters are applied server-side across the entire history, explains the pagination contract (`total` vs `runs`), and reveals that both short and full session IDs are accepted. These are non-obvious behaviors that materially affect how an agent should use the 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?

The description is compact but dense—every sentence carries distinct information: purpose, example intents, server-side behavior, pagination semantics, search syntax, and an explicit alternative. It is well-structured with the core purpose front-loaded and no repetition of schema details.

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 having no output schema, the description covers the key return semantics (`total` and `runs`, with `offset` pagination), which is the most critical information for correct invocation. It also addresses the main use cases and provides the alternative for aggregate data. It doesn't enumerate every possible nuance of each parameter, but the schema already covers those, and no missing piece would prevent an agent from calling the tool correctly.

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 the baseline is 3, but the description adds value by explaining the `search` parameter's acceptance of the short 8-character UI form and clarifying the `offset` parameter's relationship to `total` for pagination. This goes beyond the schema's basic documentation without duplicating 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 opens with a specific verb and resource ('Find and list your automation runs') and immediately connects to concrete user intents ('how did my tests go', 'what failed recently'). It also distinguishes itself from the sibling automation_report, which covers pass rates, making the tool's scope clear.

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 explicitly states when to use this tool (locating runs by description, filtering by suite/status) and names the alternative for aggregate reports. It also explains the search parameter's role for finding sessions by ID, guiding correct selection among similar tools.

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

automation_session_stepAInspect

Open ONE step of a run in full: its request body, its response body, status, timing, and — for element-scoped steps — the locator that actually found the element. Use automation_session_commands first to get the step index, then come here for the step that matters. THIS IS HOW YOU ANSWER "which element?": a click/sendKeys/getText step addresses its element by an opaque id in the URL and arrives with an empty body, so the step alone never names what it touched; this resolves that id back to the findElement that produced it and returns the using/value locator. networkDuring lists the page requests that overlapped the step, so a click that failed while an XHR was in flight is visible as such — browser runs only, and it says so explicitly when the run captured no network traffic rather than returning an empty list that reads as "nothing happened".

ParametersJSON Schema
NameRequiredDescriptionDefault
indexYesWhich step, as the `index` reported by automation_session_commands. Indexes are positions in the FULL history, so they stay valid regardless of any window that tool applied.
sessionIdYesThe run's session id.
includeNetworkNoCorrelate page network traffic to this step (default true). Set false to skip the extra lookup.

TDQS

A4.6/5.0
Behavior5/5

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

Given no annotations, the description fully discloses behavior: it resolves opaque element IDs to locators, handles empty bodies for click/sendKeys steps, and clarifies that networkDuring may be absent or explicitly say no traffic was captured. It also explains the empty-vs-explict handling to avoid misinterpretation.

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 several sentences long, but every sentence adds value. The primary purpose is front-loaded, then the 'which element' use case, then network behavior. Slightly verbose but justified by the need for clarity on non-obvious behavior.

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?

With 3 parameters, full schema coverage, but no output schema and no annotations, the description compensates by explaining what to expect (request/response, status, timing, locator) and nuances like empty network representation. No critical missing information.

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 all parameters with descriptions, but the description adds context for index (positions in full history) and includeNetwork (default true, skip extra lookup). This adds a bit of value beyond schema, but the schema already covers the basics, so baseline 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 opens one step of a run in detail, listing specific data (request/response body, status, timing, locator). It distinguishes itself from the sibling automation_session_commands by explicitly stating that it should be used after that tool to get the index.

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 instructs to use automation_session_commands first to get the step index, then use this tool. Also clearly identifies the primary use case (answering 'which element?') and when network data is available (browser runs only), implicitly guiding when not to use it.

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

azdo_create_work_itemAInspect

Create a new AzDO work item. Returns the new id + browse URL. ALWAYS confirm with the user before calling — this is a mutating operation. Defaults workItemType to 'Task'. The 'project' arg is the AzDO project name (often the same as the URL segment after the org). description is plain text and gets wrapped in basic tags for AzDO's HTML field.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNoOptional tags. AzDO stores as semicolon-separated string internally.
titleYesShort work item title. Keep under 255 chars.
projectYesAzDO project name (e.g. 'MyApp', 'Digital Platform'). Case-sensitive. Use the same value visible in the AzDO URL after the org segment.
descriptionNoWork item body. Plain text — newlines become paragraph breaks in AzDO.
workItemTypeNoWork item type (e.g. "Bug", "Task", "User Story", "Epic"). Defaults to "Task". Must match a type available in the target project (depends on the AzDO process template).

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses the mutating nature, the need for confirmation, the default workItemType, and the formatting of description into <p> tags. It does not cover error handling or permissions, but the disclosed behaviors are substantial and accurate.

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 three sentences with no redundancy. It front-loads the primary action and return value, then includes the confirmation warning, defaults, and parameter clarifications in a logical order. Every sentence earns its place.

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 the return (id + browse URL). It covers defaults, project meaning, and description formatting. For a 5-parameter creation tool with 2 required, it is reasonably complete, though it could mention error scenarios or tag behavior, which are already in the 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?

Schema coverage is 100%, providing a baseline of 3. The description adds value beyond the schema by explaining the project arg (URL segment), description formatting, and the default workItemType, enhancing agent understanding of parameter usage.

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 clear verb and resource: 'Create a new AzDO work item.' It also mentions the return of id and browse URL. While it doesn't explicitly differentiate from sibling tools (azdo_get_work_item, azdo_search_work_items), the verb 'Create' makes the purpose unambiguous among the three AzDO tools.

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 clear context: it is a mutating operation requiring user confirmation, and it explains the default workItemType and the meaning of the project argument. However, it does not explicitly state when to use this tool versus the read-oriented siblings, though the create verb implies this distinction.

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

azdo_get_work_itemAInspect

Fetch a single Azure DevOps work item by integer ID. Returns id, browse URL, title, description (HTML stripped to plain text), work item type, state, priority, assignee, creator, tags, area path, iteration path, and timestamps. Uses the calling user's stored AzDO credential — does not accept inline credentials. Returns an actionable error if AzDO is not configured.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesAzDO work item ID (e.g. 12345). Positive integer.

TDQS

A3.6/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 that it uses the calling user's stored credential, rejects inline credentials, returns an actionable error if AzDO is unconfigured, and returns HTML-stripped description text. Missing explicit read-only statement and not-found behavior, but generally 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?

Four dense sentences, each with a distinct purpose: action, return fields, auth model, and error behavior. No filler or repetition; the most important identifying info is front-loaded.

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 usefully enumerates the returned fields and covers auth and error behavior. It does not mention what happens when the ID does not exist (e.g., null vs error), which is a minor gap for a simple get-by-ID 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%, and the schema already fully documents the id parameter as a positive integer. The description merely repeats 'integer ID' without adding new semantic meaning, so baseline 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?

Description states a specific verb and resource ('Fetch a single Azure DevOps work item by integer ID') and clearly distinguishes from sibling search/create by emphasizing 'single' and 'by integer ID'. It does not explicitly name the sibling alternatives, so it falls short of the top score.

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

Usage Guidelines2/5

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

The description gives no explicit guidance about when to choose this tool over azdo_search_work_items or azdo_create_work_item. There is no mention of alternatives, prerequisites, or scenarios; usage context is only implied by the fetch-by-ID semantics.

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

azdo_search_work_itemsAInspect

Search AzDO work items with WIQL (Work Item Query Language — AzDO's equivalent of Jira's JQL). Returns up to 50 matching work items with the same projection as azdo_get_work_item. WIQL examples: SELECT [System.Id] FROM WorkItems WHERE [System.State] = 'Active' AND [System.AssignedTo] = @Me, SELECT [System.Id] FROM WorkItems WHERE [System.WorkItemType] = 'Bug' AND [System.CreatedDate] >= @Today - 7. The SELECT clause is required but only the IDs are honored — the tool batch-fetches full fields.

ParametersJSON Schema
NameRequiredDescriptionDefault
wiqlYesWIQL query string. See https://learn.microsoft.com/azure/devops/boards/queries/wiql-syntax
maxResultsNoMax work items to return (default 20, hard cap 50). Narrow WIQL for wider sweeps.

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full behavioral disclosure burden. It adds meaningful non-obvious traits: only the SELECTed IDs are honored, the tool batch-fetches full fields, and it returns up to 50 items. It does not discuss authentication or errors, but the read-only search nature and return behavior are well covered.

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

Conciseness5/5

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

The description is compact and front-loaded with the core purpose. Every sentence adds value: the search intent, the projection alignment with azdo_get_work_item, the WIQL examples, and the behavioral caveat about SELECT clauses are all useful with no filler.

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?

The description is sufficient for correct invocation: it explains the query language, the required SELECT clause, the return projection, and the result cap. It does not detail error handling or authentication, but for a moderate-complexity read/search tool with no output schema, it covers the key operational facts well.

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 the baseline is 3, but the description goes beyond the schema by providing concrete WIQL examples and the guidance to 'Narrow WIQL for wider sweeps.' This adds practical parameter-construction value beyond the schema's own field 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 states a specific verb and resource: 'Search AzDO work items with WIQL.' It also differentiates itself from related tools by referencing azdo_get_work_item's projection and by clarifying AzDO context versus Jira, so an agent can distinguish it from azdo_get_work_item, azdo_create_work_item, and jira_search.

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 clearly implies when to use the tool: when searching work items by query rather than fetching a single item. It gives WIQL examples and notes the same projection as azdo_get_work_item, which provides useful context, but it does not explicitly state an exclusion such as 'for a single item by ID, use azdo_get_work_item instead.'

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

device_app_apk_pathsAInspect

List APK file paths for an installed app via pm path. Returns base APK plus any split APKs (config splits, dynamic feature modules). Each entry includes path and sizeBytes — use device_file_pull on individual paths to fetch the bytes (default 5MB cap, raise via maxSizeBytes up to 20MB). Returns { ok, packageName, apks: [{ path, sizeBytes, role: 'base'|'split' }] }.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID)
packageNameYesAndroid package name (e.g. com.android.chrome)

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the transparency burden and does well: it discloses the implementation (`pm path`), the output composition (base plus split APKs), per-entry fields (path, sizeBytes, role), and the exact return envelope (`{ ok, packageName, apks }`). It omits failure-mode details for missing packages, but the `ok` field implies error handling.

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 front-loaded with the primary action and uses compact, information-dense sentences. The cross-reference to device_file_pull and the inline output shape replace a missing output schema without bloat.

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?

For a simple two-parameter list tool with 100% schema coverage and no output schema, the description provides everything an agent needs: required inputs come from the schema, output shape is stated, and the follow-up pull workflow is explained. No critical information is missing.

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 parameter semantics beyond the schema, since all it says about packageName is implied by 'installed app' and udid is already defined in 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 opens with a specific verb and resource: 'List APK file paths for an installed app' via `pm path`. It clearly distinguishes this from generic file tools like device_file_list and from pulling tools like device_file_pull by naming the exact artifact type and split APK categories.

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 establishes the correct workflow by explicitly instructing the agent to use device_file_pull on each path to fetch bytes, including size caps. It does not explicitly state when not to use this tool, but the use case is narrowly defined enough that this is a minor omission.

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

device_batteryAInspect

Get battery status of an Android device (level, charging state, temperature).

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID)

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. 'Get' implies a read-only operation, and the listed outputs (level, charging state, temperature) hint at behavior, but the description does not disclose edge cases such as device availability, units of temperature, or whether the device must be powered on. It does not contradict anything, but it is minimal.

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 filler. It names the action, target, platform, and core output fields in one compact statement.

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 one-parameter read-only device query, the description is mostly complete: it identifies the target, platform, parameter, and return information. It would be more complete if it specified units or exact output shape, but the lack of an output schema makes its current level 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%, and the single parameter udid already has a clear description ('Device serial number (UDID)'). The tool description adds no extra parameter-level meaning, so it does not exceed the schema baseline.

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 states a specific verb ('Get'), a specific resource ('battery status'), and a platform scope ('Android device'), then enumerates the returned data: level, charging state, temperature. It clearly distinguishes this from iOS sibling tools like ios_battery by naming the Android platform.

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 makes clear this tool is for Android devices, which effectively routes the agent away from ios_battery and other non-device tools. It does not explicitly name an alternative or state when not to use it, but the platform constraint is clear and sufficient for basic selection.

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

device_clear_app_dataAInspect

Clear all data and cache for an app on an Android device. Equivalent to "Clear Storage" in Settings.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID)
packageNameYesPackage name to clear (e.g. com.example.app)

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It clearly states that all data and cache are cleared and uses the 'Clear Storage' analogy, making the irreversible, reset-like behavior evident. It does not mention side effects like logging the user out, but the core destructive action 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.

Conciseness5/5

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

Two concise sentences with no filler. The core action is stated upfront, and the Settings equivalence provides useful context without bloating the description.

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 destructive tool with no output schema and two well-described parameters, the description covers the essential behavior: it specifies the Android platform and that data/cache are cleared. Minor gaps like explicit irreversibility are not critical given the clear wording.

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?

The input schema already describes both parameters (udid, packageName) at 100% coverage, so the description does not need to add parameter detail. It adds no parameter-specific semantic value beyond the schema, which is acceptable at the baseline.

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 the action (clear all data and cache), the resource (an app on an Android device), and provides a real-world equivalent ('Clear Storage'). This unambiguously identifies the tool's purpose and sets it apart from sibling tools like app_delete or device_clear_app_locale.

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 gives no guidance on when to use this tool versus alternatives such as app_delete, device_uninstall_app, or device_clear_app_locale. No conditions, exclusions, or preferential use cases are mentioned, leaving the agent to infer usage from the name alone.

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

device_clear_app_localeAInspect

Drop the per-app locale override on an Android app so it falls back to the device system language. Counterpart to device_launch_app_in_language. Requires Android 13+.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID)
packageNameYesApp package name

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the burden of behavioral disclosure. It states the effect (drops override, falls back to system language) and the platform requirement (Android 13+). It doesn't cover edge cases like missing override or app uninstalled, but for a simple operation this is adequate.

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 action, then the counterpart and requirement. Every word earns its place; no fluff or 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 two-parameter tool with no output schema, the description covers purpose, effect, counterpart, and a key prerequisite. It doesn't mention what happens if the override isn't set, but that's a minor edge case. Overall, an agent has enough to call it correctly.

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?

The input schema already provides 100% coverage for both parameters (udid and packageName) with clear descriptions. The tool description adds no extra parameter details, so the baseline of 3 applies as the schema does the heavy lifting.

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 uses a specific verb ('drop') and identifies the exact resource ('per-app locale override on an Android app') plus the resulting behavior (falls back to device system language). It also names the direct counterpart (device_launch_app_in_language), making it distinct from siblings.

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

Usage Guidelines4/5

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

It explicitly mentions the counterpart tool and a hard prerequisite (Android 13+), which implies when to use it (to revert an override set by the counterpart). It stops short of spelling out 'use this when you want to undo a locale override' or excluding other alternatives, but the guidance is clear enough.

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

device_clear_locationAInspect

Stop mock GPS on an Android device. Counterpart to device_set_location — the helper service stops pushing mocked fixes and apps fall back to the real GPS / network provider.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID)

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the behavioral disclosure burden. It goes beyond the name by explaining that the helper service stops pushing mocked fixes and that apps fall back to the real GPS/network provider. It does not cover edge cases like no-op behavior when mocking is already off, but this is meaningful transparency for a simple stop operation.

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 two sentences with no filler. The first sentence delivers the core definition, and the second adds useful pairing and behavioral context. It is front-loaded and every clause contributes.

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 one-required-parameter tool with no output schema, the description gives enough to invoke it correctly: what it does, on which platform, and what effect it has. It omits only minor details like idempotence or what happens if no mock is active, which are not critical for this tool's 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?

The input schema already documents the only parameter, udid, as 'Device serial number (UDID)', giving 100% schema description coverage. The description adds no parameter-specific detail, but the high coverage means this is acceptable under the baseline.

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 names a specific verb ('Stop'), a specific resource ('mock GPS'), and the platform ('Android device'), so an agent immediately knows what the tool does. It also explicitly identifies itself as the counterpart to device_set_location, distinguishing it from the setter and from sibling tools like ios_clear_location.

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 gives clear context: use this tool when you want to stop mocked GPS and return to real GPS/network provider, and it explicitly frames the tool as the counterpart to device_set_location. It does not enumerate exclusions such as iOS or edge cases when no mock is active, but the Android qualifier and counterpart framing provide sufficient guidance.

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

device_clear_textAInspect

Clear the focused text field on Android by removing its characters: reads the current text length from the UI and sends exactly that many DELETE (backspace) keycodes, after moving the cursor to the end. Tap the field to focus it first. To clear and re-type in one call, use device_type with clearFirst:true instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID)

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral burden and does so well: it discloses that the tool reads the current text length, moves the cursor to the end, and sends exactly that many DELETE keycodes. It does not state what happens if no text field is focused, but the prerequisite mitigates this.

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?

Three sentences, each earning its place: the mechanics, the prerequisite, and the alternative tool. Information is front-loaded and there is no filler or repetition of schema content.

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

Completeness5/5

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

For a one-parameter tool with no output schema, the description is complete: it explains the behavior, the required precondition, and the relevant alternative. Nothing an agent needs to invoke it correctly is missing.

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

Parameters3/5

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

The only parameter, udid, is already fully described in the schema ('Device serial number (UDID)') with 100% coverage. The description adds no new parameter-level detail, so the baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly specifies a verb ('Clear'), a resource ('focused text field on Android'), and the exact mechanism. It distinguishes itself from device_type and implicitly from ios_clear_text by stating 'on Android'.

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?

It explicitly states the prerequisite: 'Tap the field to focus it first.' It also names the alternative tool and condition: 'use device_type with clearFirst:true instead' when the agent needs to clear and re-type in one call. This is concrete routing guidance.

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

device_clipboard_getAInspect

Read the current clipboard content from an Android device. Reliable on Android 12 and earlier. On Android 13+, both this path and the legacy cmd clipboard get path are blocked by the OS (the device-side control process runs as shell, which lacks foreground/READ_CLIPBOARD_IN_BACKGROUND), so this returns an empty-clipboard sentinel rather than the cleartext "No shell command implementation." error. To round-trip text on 13+, set the clipboard via device_clipboard_set and paste it directly — do not rely on reading it back.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID)

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations to carry the safety/behavior burden, the description discloses important behavioral traits: OS-version-dependent reliability, the OS block reason, and the fact that it returns an empty-clipboard sentinel instead of a raw error. This is far beyond a generic 'read clipboard' statement.

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 main action is front-loaded, and every subsequent sentence earns its place by explaining platform constraints, failure behavior, and the recommended workaround. It is detailed without being padded.

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?

The description is very complete for a one-parameter tool with no annotations or output schema: it covers behavior, failure modes, and workflow. It falls just short of full completeness by not spelling out the exact successful return format or the precise sentinel value an agent should detect.

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% and the single parameter udid is already described as 'Device serial number (UDID)'. The description adds no additional parameter-level detail, so the baseline score of 3 is appropriate.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Read the current clipboard content from an Android device.' It also distinguishes itself from the sibling device_clipboard_set by positioning this as the read counterpart and even references the set tool for an alternative workflow.

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 gives explicit when-to-use guidance ('Reliable on Android 12 and earlier'), when-not-to-use guidance for Android 13+, and names the exact alternative path via device_clipboard_set. No inference is required.

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

device_clipboard_setAInspect

Set the Android device clipboard via the device control channel. Pass paste: true to have the device inject KEYCODE_PASTE immediately after (built into the device control protocol — no separate Ctrl+V needed). Empty string clears the clipboard.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID)
pasteNoIf true, the device injects KEYCODE_PASTE right after setting the clipboard
contentYesText to write to the clipboard (empty string clears it)

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral burden. It discloses that the tool writes to the clipboard, that paste:true triggers KEYCODE_PASTE, and that an empty string clears the clipboard. This exceeds basic operation description and gives the agent actionable behavioral expectations.

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?

Three sentences with no filler: the purpose is stated first, then the key option is explained, then the edge case is covered. Every sentence contributes essential information without 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 three-parameter tool with no output schema and no annotations, the description covers the main behaviors: setting, pasting, and clearing. It could slightly improve by mentioning the default of paste when omitted, but the schema already documents that. Overall, it is sufficiently complete for correct invocation.

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 the baseline is 3. The description goes beyond the schema by explaining the practical effect of paste:true, confirming the empty-string clearing behavior for content, and clarifying that no separate Ctrl+V is needed. This adds genuine semantic 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?

The description uses a specific verb ('Set') with a clear resource ('Android device clipboard') and distinguishes it from sibling tools like device_clipboard_get by the write operation and the Android platform. It also adds the unique protocol detail about paste injection, making the tool's purpose unambiguous.

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 clearly implies when to use this tool—when setting the Android clipboard—and adds useful context about not needing a separate Ctrl+V. However, it does not explicitly name alternatives such as device_clipboard_get or the iOS clipboard tools, nor does it state when this tool should not be used.

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

device_current_appAInspect

Get the currently active (foreground) app on an Android device. Returns package name and activity.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID)

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It states the read-only nature ('Get') and the return fields, which is useful, but it does not disclose potential caveats such as permission requirements, behavior on unknown launchers, or how 'foreground' is defined. This is adequate but not rich.

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

Conciseness5/5

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

The description is a single, clear sentence that front-loads the core action and result. Every word earns its place with no fluff or repetition.

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 one-parameter query with no output schema, the description adequately covers what is returned (package name and activity). It is complete enough for an agent to invoke it correctly, though it could optionally mention where to get the UDID (e.g., device_list).

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%, and the single parameter (udid) is already fully documented in the schema. The description adds no extra meaning about the parameter, so the baseline of 3 applies.

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 uses a specific verb ('Get') and names the exact resource ('currently active (foreground) app on an Android device'), plus the return content ('package name and activity'). It clearly distinguishes from iOS and other app-related tools.

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 phrase 'on an Android device' tells the agent when to use this tool (Android foreground query) and implicitly that it is not for iOS. However, it does not explicitly list alternative tools or exclusions, so a small gap remains.

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

device_dismiss_recent_appAInspect

Open the Recents screen and dismiss an app card. Optionally tap "Close all". Useful for clearing background apps or verifying an app was killed. Sends keycode 187 (APP_SWITCH) shell (policy-gated), waits for the UI to settle, then locates and swipes away the target card. Returns { success, action, ... }.

ParametersJSON Schema
NameRequiredDescriptionDefault
allNoTap "Close all" / "Clear all" button instead of swiping a single card
udidYesDevice serial number (UDID)
packageNameNoPackage name of the app card to dismiss (e.g. com.android.chrome). If omitted, dismisses the first/frontmost card.

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full behavior disclosure burden. It discloses the mechanism (APP_SWITCH keycode, shell, policy-gated), the wait for UI settle, and the swipe action. It also mentions the return shape. It does not detail failure cases or the exact effect of the 'all' flag on navigation, but the core behavior 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.

Conciseness5/5

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

Three crisp, information-dense sentences with no filler. The primary action is stated first, followed by use cases, implementation details, and return value. Each sentence adds value and nothing is redundant.

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 tool with no output schema and no annotations, the description is quite complete: it covers what happens, how, and what is returned. It doesn't address edge cases (e.g., package not in Recents, screen lock), but for the given complexity, it is sufficient. A slightly more detailed return contract or error behavior would improve it.

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?

The schema already covers all parameters with descriptions (100% coverage), so the baseline is 3. The description adds little beyond the schema: it mentions 'Close all' and 'first/frontmost card' behavior, but these are also in the schema. It does not clarify interactions like what happens if 'all' is true and 'packageName' is set, so it does not exceed the baseline.

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: opening the Recents screen and dismissing an app card, with an optional 'Close all' action. It distinguishes this from generic swipe/terminate tools by specifying the exact UI context and action ('dismiss an app card on Recents'). The mechanism (keycode 187) further clarifies its scope.

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

Usage Guidelines4/5

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

The description gives a clear use case: 'Useful for clearing background apps or verifying an app was killed.' This provides context for when to invoke it. However, it does not explicitly name alternatives (e.g., device_terminate_app for force-stop, device_swipe for generic swipes) or state when not to use it, leaving some room for inference.

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

device_drag_dropAInspect

Drag-and-drop on an Android device: hold at (x1,y1) for holdMs to grab, then move to (x2,y2) over durationMs. Distinct from device_swipe (no hold — scroll-style) and device_long_press (no motion — context menus). Use for app-icon reorder, drag-into-folder, slide gestures that need a deliberate grab. Coordinates are PHYSICAL pixels (from page_source bounds).Pass input="hid" to require the virtual touchscreen: the gesture then reaches the app as real kernel input and fails loudly instead of silently falling back to injected input. That strict path used to be device_uhid_drag_drop, which stays callable under its old name.

ParametersJSON Schema
NameRequiredDescriptionDefault
x1YesStart X in physical pixels
x2YesEnd X in physical pixels
y1YesStart Y in physical pixels
y2YesEnd Y in physical pixels
udidYesDevice serial number (UDID)
inputNoInput path. 'auto' (default) prefers the virtual touchscreen and falls back to injected input. 'hid' requires the virtual touchscreen and fails if the device does not provide one — use it when the gesture must be real kernel input or must fail loudly.
holdMsNoHold-in-place duration before motion in ms (default: 500)
durationMsNoMotion duration from start to end in ms (default: 400)

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses the gesture sequence, coordinate system (physical pixels from page_source bounds), and the fallback vs. strict input behavior. It explains that 'auto' falls back silently while 'hid' fails loudly. It does not mention return values or error handling beyond that, but for a gesture tool it is sufficiently 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?

The description is well-structured and front-loaded with the core action. Each sentence adds value: action, distinctions, use cases, coordinate note, and input behavior. It avoids redundancy and is appropriately sized for the complexity of the tool.

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?

The description covers the gesture mechanics, usage scenarios, coordinate origin, and the special input mode. It does not describe return values (no output schema) or detailed failure modes beyond the input choice, but for a drag-and-drop gesture tool this is adequate. It also mentions the legacy name device_uhid_drag_drop, which is helpful for migration.

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 already documents all 8 parameters (100% coverage), but the description adds meaning beyond that: it clarifies that coordinates are physical pixels sourced from page_source bounds, and explains the timing semantics of holdMs and durationMs. It also elaborates on the input parameter's enum values and their consequences, which is valuable context.

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: 'Drag-and-drop on an Android device: hold at (x1,y1) for holdMs to grab, then move to (x2,y2) over durationMs.' It names specific resources and actions, and explicitly differentiates from device_swipe and device_long_press, making it unambiguous which tool to select.

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 usage guidance: 'Use for app-icon reorder, drag-into-folder, slide gestures that need a deliberate grab.' It also contrasts with swipe and long press, and explains when to use input='hid' versus the default auto mode, covering both when-to-use 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.

device_elements_in_regionAInspect

List addressable UI elements (resource-id, text, or content-desc present) whose bounding box intersects the given physical-pixel rectangle. Returns each element with its attributes, bounds, center coords, and ranked locator strategies. Sorted smallest-first so the most specific element comes back first. Use to enumerate the contents of a region (bottom nav, dialog, list section) without parsing the full XML.

ParametersJSON Schema
NameRequiredDescriptionDefault
x1YesLeft edge of region (physical pixels)
x2YesRight edge of region (physical pixels)
y1YesTop edge of region (physical pixels)
y2YesBottom edge of region (physical pixels)
udidYesDevice serial number (UDID)
limitNoCap on number of returned elements (default 50)

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations, the description fully discloses key behaviors: it only returns elements whose bounding box intersects the rectangle, it returns attributes, bounds, center coords, and ranked locator strategies, and it sorts smallest-first so the most specific element appears first. This goes well beyond the schema and provides realistic expectations for output ordering and content.

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?

Three sentences deliver all essential information without padding: the operation, output contents, ordering behavior, and a concrete use case. Every sentence earns its place, and the most actionable information appears first.

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 lacking an output schema and annotations, the description explains what is returned, how results are sorted, what qualifies as addressable, and when to use the tool. The optional limit parameter's default is documented in the schema, so nothing critical is missing for an agent to invoke this correctly.

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 baseline is 3. The description reinforces that the rectangle is in physical pixels and that elements are selected by bounding-box intersection, but it does not add new per-parameter detail beyond the schema's clear field 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?

Description uses a specific verb 'List' and a clearly defined resource: addressable UI elements in a given physical-pixel rectangle. It defines 'addressable' precisely (has resource-id, text, or content-desc) and states the intersection criterion, so an agent knows exactly what the tool returns and can distinguish it from page-source or find-element tools.

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 final sentence gives an explicit use case: 'Use to enumerate the contents of a region (bottom nav, dialog, list section) without parsing the full XML.' This tells an agent when to invoke it, though it does not explicitly name alternatives like device_page_source or ios_elements_in_region.

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

device_file_copyAInspect

Copy a file or directory on the device (recursive). Counterpart of ios_file_copy. Copies WITHIN the device — to move bytes to or from the host use device_file_pull / device_file_push.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesAbsolute destination path
udidYesDevice serial number (UDID)
remotePathYesAbsolute path of the source file or directory

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It discloses key behaviors: recursive copying and the within-device constraint. It does not mention overwrite semantics, permissions, or error conditions, but for a straightforward copy operation these are secondary and the most important behavioral traits are covered.

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 three sentences with zero wasted words. It front-loads the core action, then clarifies the scope (within device) and directs to the correct alternatives for host transfers. Highly efficient and structured.

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 3-parameter tool with no output schema, the description covers the essential context: what it does, where it operates, and how to differentiate it from related tools. It omits details like overwrite behavior, but that is not critical for correct invocation. The description is sufficiently complete for an agent to use it appropriately.

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% (each parameter has a clear description: 'Absolute destination path', 'Device serial number (UDID)', 'Absolute path of the source file or directory'). The description adds the recursive behavior but does not clarify parameter meanings beyond the schema. Baseline 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 states a specific verb and resource ('Copy a file or directory on the device'), clarifies recursive behavior, and distinguishes it from the iOS counterpart (ios_file_copy) and from host-transfer tools (device_file_pull/push). An agent can immediately understand what this tool does and how it differs from its siblings.

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 explicitly directs users to device_file_pull/push for host transfers, and names ios_file_copy as the counterpart, which clarifies when to use this tool. However, it does not mention other device file operations like move or delete as alternatives, so the guidance is strong but not exhaustive.

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

device_file_deleteAInspect

Delete a file or directory on the device (recursive). Counterpart of ios_file_delete. NOT REVERSIBLE — there is no trash on Android. Refuses the storage roots (/, /sdcard, /storage/emulated/0, /data, /system): an agent asking to delete one of those has almost always built the path wrong, e.g. an empty variable in /sdcard/${dir}. Deleting a path that does not exist is reported as an error rather than a silent success, so a wrong path surfaces instead of reading as done.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID)
remotePathYesAbsolute path of the file or directory to delete

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does so excellently. It discloses recursive behavior, irreversibility with no trash, refusal of storage roots, and error-on-missing-path semantics. This is exactly the safety-critical context an agent needs.

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?

Three well-structured sentences, each earning its place: operation and counterpart, irreversibility, and safety/error behavior. There is no filler, and the most important information is front-loaded.

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

Completeness5/5

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

For an unannotated, destructive tool with no output schema, the description covers operation scope, irreversibility, protected paths, and failure behavior. It is complete enough for an agent to invoke the tool correctly and avoid common mistakes.

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 useful context around path safety (root refusal, empty-variable mistakes) but does not add direct parameter-level meaning beyond what the schema already provides for udid and remotePath.

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?

States a specific verb and resource: 'Delete a file or directory on the device (recursive).' It also identifies itself as the counterpart of ios_file_delete, which clearly distinguishes it from the iOS sibling. The operation and scope are unambiguous.

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?

Names the sibling counterpart (ios_file_delete), making the platform-based alternative clear. It also provides strong when-not guidance by explaining that storage roots are refused and why. However, it does not explicitly phrase 'use this when deleting on Android' as a direct selection rule, so it stops short of a 5.

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

device_file_findAInspect

Search a directory subtree for files whose NAME matches. Counterpart of ios_file_find. Matches on the name only, not on contents. query is a case-insensitive substring, or a glob if it contains * ? or [. Returns { ok, remotePath, query, count, truncated, matches }. truncated true means the limit was hit and there are more — raise limit or narrow the subtree rather than assuming the list is complete. Permission-denied subtrees are skipped silently by the device shell, so a result of zero is not proof of absence outside /sdcard.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID)
limitNoMaximum matches (default 200)
queryYesName substring, or a glob if it contains * ? or [
maxDepthNoMaximum depth to descend
remotePathYesAbsolute path of the subtree to search, e.g. /sdcard/Download

TDQS

A4.2/5.0
Behavior5/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 that matching is case-insensitive substring or glob, that results can be truncated with a flag, that permission-denied subtrees are silently skipped, and that a zero result is not proof of absence. This is rich, actionable behavior 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 compact and front-loaded. The first sentence gives the core purpose, followed by crisp notes on matching and return structure, and concludes with two important caveats. Every sentence earns its place with no repetition or fluff.

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?

The tool has moderate complexity, and the description covers nearly all critical context: the return object fields, the meaning of truncated, and the silent permission-denied behavior. The only minor gap is that the exact shape of each element in 'matches' is not specified, but the tool generally returns paths, so this is inferable.

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 baseline is 3. The description adds a brief explanation of query matching (case-insensitive substring/glob) that is already in the schema, and mentions raising limit when truncated, but does not elaborate on maxDepth or other parameters 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 states a specific verb ('Search'), a resource ('directory subtree'), and a clear criterion ('files whose NAME matches'). It also distinguishes itself by noting it matches on name only, not contents, and identifies its counterpart ios_file_find, making its purpose unambiguous.

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 gives context that this is the Android counterpart to ios_file_find, which helps a cross-platform agent, but it does not explicitly state when to choose this over other sibling tools like device_file_list. The guidance about handling truncated results and permission-denied subtrees is more about interpreting outcomes than selecting the tool.

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

device_file_listAInspect

List files and directories at a path on the device. Uses the device file-sync protocol (no shell roundtrip). Returns { ok, remotePath, count, entries: [{ name, isDir, size, modTime }] }. Common roots: /sdcard/ (user storage), /sdcard/Download, /sdcard/DCIM. Symlinks are resolved one level.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID)
remotePathYesAbsolute path on the device, e.g. /sdcard/Download

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral burden and does well: it specifies the exact return shape, the protocol used, and the symlink resolution behavior. These details meaningfully prepare the agent for what to expect. It could also mention error behavior for missing paths, but this is a minor gap for a read-only listing 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?

The description is compact and every sentence earns its place: purpose, protocol advantage, return shape, common roots, and symlink behavior. Important details are front-loaded, and there is no filler or repetition of schema text.

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?

Since no output schema exists, the description compensates by fully documenting the return value structure. It also provides practical path guidance and a notable behavioral edge case. It is sufficiently complete for an agent to invoke the tool correctly, though very minor details like non-existent-path behavior are absent.

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?

Both parameters are already fully described in the schema (100% coverage), so the baseline is 3. The description adds value by giving concrete example values for remotePath and clarifying that paths are absolute, which goes beyond the schema's generic example.

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 lists files and directories at a path, with a specific verb and resource. It also provides common root examples that make the scope concrete. However, it does not explicitly differentiate itself from sibling tools like device_file_find or device_file_stat.

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 browsing device storage and includes common roots like /sdcard/Download, which helps an agent pick appropriate paths. It also notes the file-sync protocol avoids a shell roundtrip, hinting at an advantage over shell-based alternatives. But it never states explicit when-to-use or when-not-to-use guidance versus sibling file tools.

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

device_file_mkdirAInspect

Create a directory on the device, including any missing parents (mkdir -p). Counterpart of ios_file_mkdir. Succeeds silently if the directory already exists. Fails with the shell error if the parent is read-only — most of the filesystem is, outside /sdcard and /data/local/tmp.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID)
remotePathYesAbsolute path of the directory to create

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations to lean on, the description carries the full burden and delivers: discloses idempotency ('succeeds silently if the directory already exists'), failure mode ('fails with the shell error if the parent is read-only'), and filesystem write constraints. Only minor gap is no explicit statement of the success return value, though 'succeeds silently' partially implies it.

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?

Three sentences, each earning its place: core action first, sibling differentiation second, behavioral nuances last. No filler, no restating of the schema's parameter doc.

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?

For a low-complexity tool (2 simple string params, fully schema-documented, no output schema), the description covers everything an agent needs: what it does, where it can write, that it is idempotent, and how it fails. Nothing essential is missing.

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 description coverage is 100%, setting the baseline at 3, but the description adds meaning beyond it: the mkdir -p behavior clarifies that remotePath may be a nested path with nonexistent parents, and the writable-locations note helps the agent generate or validate valid remotePath 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?

States a specific verb and resource ('Create a directory on the device') with an explicit behavioral qualifier ('including any missing parents (mkdir -p)'). Names the iOS counterpart (ios_file_mkdir), which immediately disambiguates it from the large device_file_*/ios_file_* sibling families.

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?

Names the direct alternative ('Counterpart of ios_file_mkdir'), implying platform selection between device and iOS variants, and adds practical deployment guidance by flagging that most of the filesystem is read-only outside /sdcard and /data/local/tmp. Stops short of an explicit when-to-use/when-not-to-use directive, so it misses the top score.

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

device_file_moveAInspect

Move or rename a file or directory on the device. Counterpart of ios_file_move. Both paths must be on the SAME filesystem — moving between /sdcard and /data fails, because Android mounts them separately; copy then delete instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesAbsolute destination path
udidYesDevice serial number (UDID)
remotePathYesAbsolute path of the file or directory to move

TDQS

A4.6/5.0
Behavior4/5

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

No annotations are provided, so the description must carry the full burden. It discloses a critical behavioral trait: the same-filesystem constraint and the failure mode, plus the recommended workaround. However, it does not mention overwrite behavior, error handling, or return values, which are relevant for a mutation tool. The description is transparent about its main limitation but leaves some behavior unspecified.

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 two sentences, front-loaded with the core purpose, followed by the critical constraint and workaround. Every word earns its place; no redundancy or fluff.

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's simplicity, the description is largely complete. It explains the operation, the key constraint, and the fallback. However, it omits details about what happens if the destination path already exists (e.g., overwrite vs. error) and does not specify the return value or any error format. With no output schema and no annotations, these gaps are minor but prevent a perfect score.

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 the schema already describes all three parameters (udid, remotePath, to). The description adds value by clarifying that remotePath and to must be on the same filesystem, and by implying remotePath is the source and to is the destination. This goes beyond the schema's basic descriptions, though it does not introduce new parameter details.

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 states a specific verb ('Move or rename') and resource ('file or directory') with a clear scope ('on the device'). It explicitly names its counterpart (ios_file_move) and differentiates it from other device_file_* siblings, making the tool's purpose unambiguous.

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 explicitly states when to use this tool versus alternatives: it warns that both paths must be on the same filesystem, and if moving across filesystems (e.g., /sdcard to /data), it will fail, recommending 'copy then delete instead'. This directly guides the agent to alternative tools (device_file_copy and device_file_delete) for the cross-filesystem case.

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

device_file_pullAInspect

Pull a file from the device. Returns base64-encoded content. Default size cap 5242880 bytes (5MB); pass maxSizeBytes to override up to 20971520 bytes (20MB). Refuses directories and oversized files before transferring. Returns { ok, remotePath, sizeBytes, content (base64) }.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID)
remotePathYesAbsolute path of the file to pull
maxSizeBytesNoOverride the default 5MB cap; max 20MB.

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral disclosure burden. It covers the return format, default and maximum size caps, the override parameter, and refusal behavior before transfer. This is solid transparency for a read-style pull operation, though it does not discuss error cases or permission requirements.

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?

Three focused sentences with no filler. The core action and return type are front-loaded, followed by the size cap details and refusal behavior. Every sentence contributes essential operational 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?

The description is complete for a tool of this complexity. It covers the return value shape, parameter behavior, limits, and edge cases such as directories and oversized files. Without an output schema, it appropriately documents the response structure inline.

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 description coverage is 100%, so the baseline is 3. The description adds meaningful parameter semantics beyond the schema by explaining the default 5MB cap, the maxSizeBytes override up to 20MB, and that oversized files are refused before transfer. This elevates it above baseline.

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 specific operation ('Pull a file from the device'), the resource (a remote file), and the output format (base64 content). This naturally distinguishes it from related siblings like device_file_push, device_file_list, and device_file_stat.

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 clear context for when to use the tool: to retrieve a file's content from a device. It also communicates size limits and refusal behavior for directories and oversized files, giving an agent enough to decide appropriate usage. It does not explicitly name alternative tools or exclusion scenarios, but the context is strong.

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

device_file_pushAInspect

Push a base64-encoded file to the device. Allowed destinations: /sdcard/ (user storage) or /data/local/tmp/ (writable scratch dir — frida-server, tcpdump, etc.). Decoded size hard cap 20971520 bytes (20MB). remotePath must contain no shell metacharacters. For APKs, prefer app_install instead. Returns { ok, remotePath, sizeBytes }.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID)
contentYesFile content as a base64 string
remotePathYesAbsolute target path on the device; must start with /sdcard/ or /data/local/tmp/

TDQS

A4.6/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 burden. It discloses the required input encoding (base64), the decoded size hard cap of 20MB, allowed destination roots, the restriction on shell metacharacters, and the return payload shape. It does not state side effects like overwriting existing files at remotePath or permission requirements. This is a meaningful gap but the description is far above the 2-point floor for unannotated mutation tools.

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 compact and front-loaded. Every sentence carries information: what to push, where allowed, size limit, shell metacharacter constraint, sibling preference, return shape. No filler or repetition of schema text.

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 three-parameter tool with 100% schema coverage and no output schema, the description covers the operational constraints (destinations, size, encoding, safety) and return shape. It does not mention overwrite behavior or file permission implications, which would be valuable for an agent, but given the schema carries parameter definitions, the description is close to complete.

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 description coverage is 100%, so the baseline is 3. The description adds value over the schema by specifying that content is base64 strings, that remotePath must be absolute and start with allowed roots, and that the decoded size cap applies. That justifies a 4 rather than a 3, since it clarifies format and constraints not present in 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 uses a specific verb and resource: 'Push a base64-encoded file to the device.' It clearly states the allowed destinations and the return shape. It distinguishes from siblings like device_file_pull, device_file_copy, and app_install. Sibling differentiation is explicit with 'For APKs, prefer app_install instead.'

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 gives explicit when-to-use context and an explicit alternative: 'For APKs, prefer app_install instead.' It also states constraints (destinations, size cap, no shell metacharacters) that tell an agent when this tool is appropriate. This exceeds the baseline by naming the sibling condition.

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

device_file_statAInspect

Get metadata for one file or directory on the device — type, size and modification time. Counterpart of ios_file_stat. Returns { ok, remotePath, exists, isDir, size, modTime }. A missing path is NOT an error: it comes back with exists=false, so this is the cheap way to check for a file before pulling it.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID)
remotePathYesAbsolute path on the device, e.g. /sdcard/Download/report.pdf

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations, the description carries full behavioral disclosure. It clearly states the return payload shape, explains the handling of missing paths (exists=false rather than an error), and asserts that the call is 'cheap' — a performance characteristic. This goes well beyond a typical 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?

Two sentences, zero filler. The action is front-loaded, followed by the return contract and the key edge case. Every clause earns its place; 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?

For a two-parameter, no-output-schema tool, the description is fully adequate. It covers the return fields, the non-error missing-path behavior, and the practical use case. Nothing an agent needs to successfully call this tool 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 description coverage is 100% (udid and remotePath both have detailed descriptions). The tool description adds no parameter-specific meaning beyond what the schema already provides (e.g., absolute path example already in schema). Thus, baseline 3 applies.

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 states a specific verb ('Get'), resource ('metadata for one file or directory'), and the exact fields returned (type, size, modification time). It also names the sibling counterpart (ios_file_stat), distinguishing the platform target. This is unambiguous and easily differentiable from the many device_file_* tools.

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 an explicit use case: 'this is the cheap way to check for a file before pulling it', guiding agents on when to invoke this tool. It also references ios_file_stat as a counterpart, implying platform-specific selection. Lacks a clear 'do not use when' exclusion, but the guidance is concrete enough for correct routing.

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

device_find_elementAInspect

Find a UI element on an Android device by visible text or content description. Returns element center coordinates in PHYSICAL pixels — use directly with device_tap (no scaling needed).

ParametersJSON Schema
NameRequiredDescriptionDefault
textNoVisible text of the element
udidYesDevice serial number (UDID)
resourceIdNoResource ID of the element (e.g. com.android.chrome:id/url_bar)
contentDescNoContent description (accessibility label) of the element

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description must carry the full burden. It discloses that coordinates are in physical pixels and can be used directly with device_tap, which is valuable. However, it does not cover failure modes (e.g., element not found, multiple matches) or any side effects, which are important for a tool with no annotation coverage.

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 purpose, then the output format and usage note. No redundant information or fluff; every word earns its place.

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 find operation with no output schema or annotations, the description covers the core purpose, output format, and a direct use case. Missing details like behavior when multiple elements match or error handling are minor gaps but not critical for basic invocation.

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 each parameter is already documented. The description adds clarity about text and contentDesc as primary search criteria, but does not mention resourceId, which could cause confusion. Since the schema handles most semantics, the description provides marginal extra 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?

The description clearly states the action (find a UI element), the resource (Android device), and the criteria (visible text or content description). It also specifies the return value (center coordinates) and how to use it, distinguishing it from sibling tools like device_tap_by_text or device_wait_for_element.

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 a usage pattern by suggesting use with device_tap, but it does not explicitly mention when to choose this over alternatives like device_tap_by_text or device_wait_for_element. The guidance is helpful but not comprehensive, leaving the agent to infer the boundaries.

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

device_focus_eventsAInspect

Read recent Android focus-change events from logcat. Useful AFTER a tap on an input field and BEFORE device_type to verify focus actually landed on the expected element — diagnoses the "type went into the wrong field" race that bites parallel tap+type sequences. Filters to ViewRootImpl (window focus), WindowManager (focus transitions), and InputMethodManager (IME show/hide) events. Returns a short summary line followed by the matching logcat lines (newest last). Empty result = no focus events in the recent window, which usually means the tap did NOT change focus (tap missed, or you tapped a non-focusable element).

ParametersJSON Schema
NameRequiredDescriptionDefault
maxNoMax focus events to return (default: 30, capped at 500). Newest last.
udidYesDevice serial number (UDID)

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 carries the full behavioral burden and does so well. It discloses the logcat source, the event categories filtered, the return shape (summary line plus matching lines, newest last), and the semantic interpretation of an empty result. This goes well beyond the structured schema.

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 front-loaded with purpose, then gives usage context, then explains behavior and output semantics. It is longer than average, but every sentence adds distinct value and the structure is logical and scannable.

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 having no output schema, the description fully specifies what the caller gets back and how to interpret it. Parameter schemas cover the inputs, and the usage context covers when and why to call the tool, making the definition complete for an 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 100%, so the schema already documents both parameters (udid and max). The description adds practical context about max default/cap and ordering, but this is modest extra value; the schema does the heavy lifting.

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 starts with a specific verb and resource: 'Read recent Android focus-change events from logcat.' It clearly differentiates the tool's diagnostic purpose from sibling interaction tools by tying it to tap/type verification and naming a concrete sibling sequence (BEFORE device_type).

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 explicitly states when to use it: AFTER a tap on an input field and BEFORE device_type, to verify focus landed correctly. It also explains the empty-result meaning and common failure causes, giving the agent actionable routing guidance beyond the schema.

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

device_gamepad_disconnectAInspect

Detach the virtual game controller from an Android device, as if unplugging it. Releases everything first, so nothing is left held down. Safe to call when no controller is attached.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID)

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It discloses the key behavior: 'Releases everything first, so nothing is left held down,' which tells the agent about internal cleanup. It also notes safety when no controller is attached, implying no error in that case. It does not mention return values or failure modes, but for a simple disconnect action, this is adequate.

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 three sentences, each serving a purpose: defining the action, explaining the internal behavior, and noting safety. There is no fluff, and the most important information (the action) 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?

For a tool with one parameter, no output schema, and a straightforward action, the description covers the essential aspects: what it does, how it behaves, and when it's safe to call. No critical information is missing for an agent to invoke it correctly.

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?

The schema has 100% coverage for the single parameter 'udid' with a clear description ('Device serial number (UDID)'). The tool description adds no additional meaning or constraints beyond the schema, so the baseline of 3 applies.

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 ('Detach the virtual game controller'), the resource ('Android device'), and the metaphor ('as if unplugging it'), making it unambiguous. It distinguishes from sibling tools like device_gamepad_state and device_gamepad_status which are query operations, while this is an action.

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 gives a clear usage condition: 'Safe to call when no controller is attached' implies idempotency and safety, which is useful. However, it does not explicitly mention when to use this tool over alternatives like device_gamepad_disconnect (iOS counterpart) or other gamepad tools, but the action is distinct enough that the purpose itself serves as guidance.

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

device_gamepad_stateAInspect

Present a connected game controller to an Android device and set its state. The device sees a REAL controller — a kernel-level input device that native games and apps receive exactly as they would a pad plugged into the phone.

HOW TO FIRE INPUT PROPERLY: • One call = ONE frame = one instant in time. A button stays pressed until you send a frame WITHOUT it, so every press needs a matching release frame — keydown then keyup. Press after press just holds them all down. • For anything that should look played rather than stepped — mashing, combos, a stick sweep — pass frames instead of calling repeatedly. The sequence plays out device-side at intervalMs (default 33 ms ≈ 30 fps). A round trip per frame cannot reach that cadence, so a rapid sequence built from single calls always reads as held buttons. • Alternate press and release inside frames: [{buttons:[1]}, {}, {buttons:[1,1]}, {}] is tap A, release, tap A+B, release. • Axes are [leftX, leftY, rightX, rightY], -1..1. Sweep them across frames to roll a stick; omitted axes read as centred. • Confirm with device_gamepad_status.

Buttons and axes use W3C standard order, identical to the iOS gamepad tools — the mapping onto whatever the chosen controller reports is done for you. Pick profile to match the hardware you want the device to believe is attached; it changes both the reported identity and the button layout, so a game showing on-screen prompts shows the right ones. This is the tool to reach for. device_uhid_gamepad_state is the raw twin — it takes the fixed-format report directly (one profile, rotated bit order) instead of translating from W3C arrays; use it only to send an exact report byte-for-byte.

ParametersJSON Schema
NameRequiredDescriptionDefault
axesNoAxis values -1..1: [leftX, leftY, rightX, rightY]. Omitted axes read as centred.
udidYesDevice serial number (UDID)
framesNoPlay a SEQUENCE of frames at intervalMs instead of setting one state. This is how you produce real gameplay input: include the release frames (an entry with no buttons releases everything). Capped at 300 frames. Overrides buttons/axes when present.
buttonsNoButton values 0..1 in W3C standard order (0-3 face, 4/5 shoulders, 6/7 analog triggers, 8 select, 9 start, 10/11 stick clicks, 12-15 d-pad, 16 home, 17 touchpad). >= 0.12 counts as pressed. Omitted releases everything.
profileNoWhich controller the device should believe is attached (default dualshock4). Changing it between calls unplugs and re-attaches the pad.
intervalMsNoGap between frames in ms (default 33). Lower = faster mashing; 33 ms matches a 30 fps controller poll.
browserTouchpadNoAlso expose the touchpad click (index 17) to a web page open on the device. Off by default. The pad is a REAL input device here, and Chromium's Android mapper fills indices 0-16 only, so index 17 reaches the kernel and native apps but can never reach a browser gamepad tester on its own — not even from a physically-plugged DualShock. This overlays it onto the page. Indices 0-16 still come from the real pad; only 17 is synthesized. Needs an inspectable page open; ignored if there is none. After a navigation the page only exposes a pad once it sees activity, and the touchpad alone cannot provide it — lead with a stick sweep, e.g. frames [{axes:[1,0,0,0]},{axes:[0,0,0,0]},{buttons:[...17]}], which wakes it without adding a button to a tester's history.

TDQS

A5/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 and delivers: kernel-level emulation, frame semantics, default intervalMs, profile-switch behavior (unplugs/re-attaches), and detailed browserTouchpad caveats. Nothing is hidden or omitted.

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?

Structured with a short summary, bulleted rules, and an alternatives paragraph. Though lengthy, every sentence earns its place and is front-loaded with the most critical usage constraint (one frame = one instant). No wasted words.

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?

Complete for a complex input tool: covers state model, frame sequencing, button/axis formats, defaults, profile selection, sibling routing, confirmation step, and an edge-case workaround (browser touchpad wake-up). Nothing an agent needs to call correctly is missing.

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?

Although schema coverage is 100%, the description adds substantial value beyond it: W3C button order, press threshold (0.12), axe order and centering, frame override behavior, intervalMs cadence rationale, and touchpad synthesis details. Richly enhances schema-only 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 opens with a specific verb+resource: 'Present a connected game controller to an Android device and set its state.' It explicitly names the sibling tool (device_uhid_gamepad_state) and clarifies which one to reach for, making differentiation immediate.

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

Usage Guidelines5/5

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

Includes a dedicated 'HOW TO FIRE INPUT PROPERLY' section with explicit when-to-use frames vs. single calls, release-frame requirements, and a direct comparison to the raw twin tool with the condition 'use it only to send an exact report byte-for-byte.' No inference needed.

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

device_gamepad_statusAInspect

Report whether a virtual game controller is currently attached to an Android device, what it is presenting as, and the last state that was sent to it. Use to confirm device_gamepad_state took effect. The attachment is read from the device itself; the held state is the last frame this server sent, since a controller reports state to apps rather than back to us.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID)

TDQS

A4.5/5.0
Behavior4/5

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

Even though annotations are absent, the description adds meaningful behavioral context: it clearly explains that the 'held state' is not read from the device but is the last frame the server sent, a non-obvious behavior. It also distinguishes the attachment read from the state read. This is valuable transparency beyond the name and schema. It doesn't cover every detail (e.g., outcome if no controller attached), but overall it provides strong behavioral context.

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

Conciseness5/5

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

The description is two sentences with no filler. The primary purpose is front-loaded: 'Report whether...' and the first sentence covers the main function. The second sentence adds usage guidance and clarifies a behavioral nuance. 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?

The tool is simple (one parameter), the schema covers that parameter fully, and there is no output schema to worry about. The description tells the agent what it does, when to use it, and clarifies an important data-origin nuance. That is complete for an agent to correctly invoke and interpret the 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% for the only parameter (udid), so the schema already documents it as 'Device serial number (UDID)'. The description doesn't add additional semantics for udid beyond what's in the schema. Baseline 3 is appropriate because the schema handles the parameter documentation.

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: 'Report whether a virtual game controller is currently attached...', 'what it is presenting as, and the last state that was sent to it.' It specifies the resource (virtual game controller on an Android device) and the verb (report). It also implies a distinction from sibling tools like device_gamepad_state and device_uhid_gamepad_state by focusing on status rather than setting state.

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 'Use to confirm device_gamepad_state took effect' explicitly states when to use this tool, and by implication that it should not be used for setting states. It also clarifies the source of data: 'The attachment is read from the device itself; the held state is the last frame this server sent.' This explains why it's appropriate for confirmation and not for live state.

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

device_gesture_pathAInspect

Replay a freeform stroke as ONE continuous touch — the polyline lands exactly as given, so use it for curves, arcs, signatures, unlock patterns, or any gesture a straight device_swipe cannot express. points is an ordered list of {x, y}; the first is touch-down, the last is lift. Minimum 2 points. Waypoints are sent AS GIVEN and not densified — the polyline you pass IS the gesture, so pass enough points to describe the curve. Prefers the HID touchscreen and falls back to injected MotionEvents. Coordinates are PHYSICAL pixels — same as device_page_source bounds. The iOS counterpart is ios_gesture_path.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID)
pointsYesOrdered waypoints of the stroke (first = touch-down, last = lift)
durationMsNoTotal stroke time in ms, split evenly across segments (default 400)

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 carries the full behavioral burden and does so thoroughly: it discloses continuous-touch semantics, first/last point roles, no densification, HID preference with MotionEvent fallback, and physical-pixel coordinate space. This goes well beyond what the schema alone reveals.

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 densely informative with no filler. Front-loaded purpose is followed by parameter semantics, behavioral delivery details, coordinate space, and cross-platform pointer, with every sentence earning 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?

For a gesture-input tool with no output schema, the description plus schema fully equips an agent to call it correctly: purpose, usage boundaries, input semantics, delivery mechanism, coordinate system, and cross-platform alternative are all present. Nothing critical is missing.

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 the baseline is 3. The description adds meaningful semantics beyond the schema for `points` — ordered waypoints, touch-down/lift roles, and 'as given' fidelity — and clarifies physical-pixel coordinate meaning. It does not elaborate on `durationMs`, but the schema already documents its default and range.

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 states a specific verb and resource: 'Replay a freeform stroke as ONE continuous touch'. It explicitly contrasts with a sibling by mentioning 'any gesture a straight device_swipe cannot express', so an agent can distinguish it without opening the schema.

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?

It names concrete use cases (curves, arcs, signatures, unlock patterns) and points to the alternative device_swipe for straight gestures, while also naming the iOS counterpart. It further advises the agent to pass enough points because waypoints are not densified, which is practical usage guidance.

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

device_get_browser_urlAInspect

Get the current URL loaded in Chrome on an Android device. Returns the URL string without needing to parse page source.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID)

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the full responsibility for behavioral context. It clearly states the return value and that no page-source parsing is required, but it does not disclose edge cases like what happens if Chrome is not open, whether multiple tabs are supported, or error behavior. For a simple read-only tool this is adequate but not rich.

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

Conciseness5/5

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

Two concise sentences with no filler. The core action and output are stated first, and the value-add over page-source parsing is included without unnecessary 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?

For a single-parameter, read-only utility, the description covers the action, scope, and return value. It lacks error-condition detail and does not explicitly address browser state, but the tool is simple enough that this is a minor gap.

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?

There is only one parameter, udid, and its schema description ('Device serial number (UDID)') fully covers its meaning. Since schema coverage is 100%, the description does not need to add much, and the baseline 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 uses a specific verb ('Get'), identifies the exact resource ('current URL loaded in Chrome on an Android device'), and states the output ('Returns the URL string'). It also draws a clear contrast with page-source parsing, which helps distinguish it from tools like device_page_source and ios_get_browser_url.

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 phrase 'without needing to parse page source' provides useful context that this tool is the direct way to obtain the URL rather than extracting it from device_page_source. However, it does not explicitly name alternatives or state when not to use it, such as when a different browser or session URL is needed.

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

device_get_locationAInspect

Read the Android device's current GPS location. Counterpart of ios_get_location. Returns { latitude, longitude, source }. source is the part worth reading: "mock" = the value device_set_location is currently simulating (authoritative); "device" = a real fix parsed from dumpsys location, which is BEST-EFFORT — the format varies by OEM and Android version, so a device with a valid fix can still come back as "none"; "none" = nothing could be determined, with latitude and longitude null. Treat "none" as "unknown", never as "the device has no location".

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID)

TDQS

A4.5/5.0
Behavior5/5

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

No annotations are provided, so the description fully carries behavioral disclosure. It explains the return shape, the meaning of each source value, and the unreliable nature of 'device' fixes, including the edge case where a valid fix can still return 'none'. This is unusually 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?

The description is front-loaded with the tool's purpose, then provides a compact but complete breakdown of the response source field. Every sentence adds meaningful information, and the formatting with quoted values and punctuation aids parsing.

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?

With no output schema and no annotations, the description must explain return values and edge behavior, and it does so thoroughly. The single parameter is fully covered by the schema. Nothing necessary for correct invocation or interpretation is missing.

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 single parameter 'udid' is already documented in the schema. The description adds no parameter-level detail, which is acceptable given the high schema coverage and simple parameter set.

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 opens with a specific verb and resource: 'Read the Android device's current GPS location.' It also names the iOS counterpart, distinguishing it from ios_get_location. The boundary against device_set_location is implicit through the mock-source explanation.

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 clearly indicates this tool is for reading GPS location on Android, and its counterpart relationship with ios_get_location provides routing context. It doesn't explicitly state 'use this instead of X when Y' or list exclusions, but the mock/device/none semantics guide the agent on interpreting results after reading.

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

device_infoBInspect

Get detailed info about a device including physical screen size. device_tap/device_swipe use PHYSICAL pixel coordinates — same as page_source bounds. No scaling needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID)

TDQS

B3.3/5.0
Behavior3/5

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

No annotations are present, so the description carries the behavioral disclosure burden. It usefully reveals the non-obvious relationship between device_info output and tap/swipe coordinate semantics, including that no scaling is needed. However, it does not explicitly state read-only behavior, response format, or whether screen-size information is always available.

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 two sentences and each earns its place: the first states the tool's purpose, and the second delivers a high-value coordinate-system caveat. There is no filler, repetition of schema data, or unnecessary background.

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 one-parameter read-only info tool, the schema covers the invocation requirement, and the coordinate note anticipates the main downstream use case. However, there is no output schema and 'detailed info' leaves the returned fields vague, so the agent cannot know precisely what information to expect.

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?

The sole parameter, udid, is fully documented in the schema with 100% coverage, so the description does not need to repeat field-level semantics. It adds no extra parameter meaning beyond what the schema already provides, matching the baseline for high schema coverage.

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?

Opens with a clear verb and object: 'Get detailed info about a device.' The phrase 'including physical screen size' gives concrete scope. It does not explicitly distinguish itself from sibling tools like device_list, device_screen, or ios_device_info, so it stops short of full sibling differentiation.

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

Usage Guidelines2/5

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

The coordinate-system note tells agents that device_tap and device_swipe use physical pixels, but it never states when to prefer device_info over alternatives or when it should not be used. No exclusions or sibling routing are provided, leaving the agent to infer relevance.

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

device_keyAInspect

Send a keycode to a device. Accepts numeric keycode OR named key (HOME, BACK, ENTER, VOLUME_UP, VOLUME_DOWN, POWER, APP_SWITCH, ESCAPE, DELETE, TAB, SEARCH, MENU). System-policy keys (APP_SWITCH/187, MENU/82, POWER/26) are always sent via shell — they require policy-level handling that the control channel cannot reach. Other keys try the control channel first and fall back to shell on error/timeout. Every route here is injected — this tool has no kernel input path. Use device_uhid_key_press instead when the target app filters or ignores injected key events and the press has to land as real kernel input.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID)
keycodeYesAndroid keycode number OR name (HOME, BACK, ENTER, VOLUME_UP, VOLUME_DOWN, POWER, APP_SWITCH, ESCAPE, DELETE, TAB, SEARCH, MENU)

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 carries full behavioral disclosure. It clearly states that system-policy keys (APP_SWITCH, MENU, POWER) are always sent via shell due to policy-level handling, that other keys try the control channel first and fall back to shell, and that every route is injected with no kernel input path. This is rich, transparent behavior documentation.

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 compact—three sentences that start with the core action, then provide necessary routing and fallback details, then conclude with an alternative. Every sentence earns its place with no filler or repetition.

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?

For a simple two-parameter tool with subtle routing behavior, the description covers everything an agent needs: valid inputs, routing logic, the injection limitation, and an explicit alternative. No output schema exists, but the description appropriately omits return-value details because they are not crucial for selecting and invoking this tool correctly.

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 already covers both parameters with clear descriptions (udid and keycode). The description adds value beyond the schema by explicitly noting numeric codes for system-policy keys (APP_SWITCH/187, MENU/82, POWER/26) and explaining routing implications. This goes beyond a simple restatement of schema fields, though it could have added more detail on error/idempotency behavior.

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 opens with a clear, specific verb and resource: 'Send a keycode to a device.' It distinguishes itself from siblings by listing accepted key types (numeric and named) and explicitly referencing the alternative device_uhid_key_press. This leaves no ambiguity about what the tool does.

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 guidance on when to use this tool versus the alternative: 'Use device_uhid_key_press instead when the target app filters or ignores injected key events...' It also explains the routing strategy (control channel first, shell fallback) and identifies system-policy keys that always use shell. This is exemplary usage guidance.

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

device_launch_appBInspect

Launch an Android app. Accepts a package name (e.g. com.android.chrome) OR a display name (e.g. "Chrome"). Display-name lookup is case-insensitive substring match against installed apps.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID)
packageNameYesPackage name (com.x.y) OR display name (case-insensitive substring)

TDQS

B3.2/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It does add a specific behavioral detail: the display-name lookup is case-insensitive substring match against installed apps, which goes beyond the schema. However, it does not disclose what happens if the app is not found, whether the call is blocking, or if it causes side effects like bringing the app to foreground. This is a gap for a tool that modifies device state, but the disclosed matching behavior gives some 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?

The description is two sentences, concise and front-loaded with the core action. It efficiently conveys the main purpose and the key behavioral nuance of display-name matching. No wasted words; every sentence adds value. It is appropriately sized for a simple tool.

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 that there are many sibling tools including device_launch_app_in_language, the description omits crucial context about when to choose this tool over that one. It also does not mention any return format or failure behavior, which might matter for an agent that needs to verify success. For a tool that modifies device state, this is an incomplete picture even though the parameter set is small.

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%, with both parameters documented. The description adds no new meaning beyond what the schema already provides—the schema already mentions 'Package name (com.x.y) OR display name (case-insensitive substring)' for packageName. The description repeats this in prose without adding extra detail like format constraints or examples beyond the one given. Since the schema is complete, the baseline 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 it launches an Android app, with a specific verb and resource. It also explains the two input modes (package name or display name), which is helpful. However, it does not explicitly differentiate from siblings like device_launch_app_in_language, which is a similar launch tool with an additional parameter. Since the description names the platform (Android), it distinguishes from iOS counterparts, but the ambiguity with the language variant remains.

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. It explains how the tool works (accepting package or display name) but does not give context such as 'use this for simple launches' or mention that device_launch_app_in_language is for localized launches. There are no exclusions or comparisons, leaving the agent to infer when this tool is appropriate.

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

device_launch_app_in_languageAInspect

Launch an Android app forced into a specific language / locale without changing the device's system settings. Requires Android 13+ (API 33). Uses the per-app LocaleManager API via cmd locale set-app-locales. The tool force-stops the app first so cold launch picks up the new locale. Override persists until cleared (or until the app is uninstalled).

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID)
localeYesBCP-47 locale tag, e.g. "fr-FR", "es-US", "ja-JP"
packageNameYesApp package name, e.g. com.example.app

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure, and it does so thoroughly. It reveals that the tool force-stops the app first (so the new locale takes effect on cold launch), that the override persists until cleared or uninstall, and that it requires Android 13+. This is exactly the kind of side-effect and condition information an agent needs.

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?

Three sentences, each earning its place: the purpose is front-loaded, then the platform requirement and underlying API, then the crucial behavioral side effects (force-stop and persistence). There is no fluff or repetition of schema information. Excellent economy.

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?

For a tool with three straightforward parametersable and no output schema, the description covers everything an agent needs to decide to call it and predict its effects: what it does, the prerequisite (Android 13+), how it achieves it, the side effect (force-stop), and the lifecycle of the override. Nothing material is missing.

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?

The input schema already provides 100% description coverage, with examples for all three parameters (udid, locale, packageName). The description adds no additional parameter semantics beyond what the schema states, so the baseline of 3 is appropriate. No gap to compensate for.

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 states a specific verb ('Launch'), a resource ('an Android app'), and the distinguishing constraint ('forced into a specific language / locale without changing the device's system settings'). It also names the platform and API level, which separates it from generic device_launch_app and system-language tools. This is unambiguous and immediately actionable.

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 clearly implies when to use this tool: when you need per-app language override without altering system settings, on Android 13+. It also implies the alternative (changing system settings) by explicitly stating what it does not do. However, it does not expressly name sibling alternatives like device_set_device_language or device_clear_app_locale, leaving some routing inference to the agent.

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

device_listAInspect

List available devices (Android and iOS) across every connected device host. A device on another host carries a host field; every device tool accepts its udid the same way. Shows only free devices and devices currently used by you. An Apple TV is listed with os "iOS" plus deviceClass "AppleTV" and osLabel "tvOS": read/app tools (ios_screenshot, ios_page_source, ios_active_app, ios_list_apps, ios_launch_app) work as usual, but it has NO touchscreen — ios_tap/ios_swipe/ios_send_keys refuse on it. Drive it with the TV tools instead: tvos_select(x,y) / tvos_focus(label) to pick an element, ios_tv_button for remote keys, ios_tv_text to type, ios_tv_volume for volume. An Android TV (Chromecast with Google TV) is listed with os "Android" plus deviceClass "AndroidTV" and osLabel "Android TV": every device_* tool works on it as on a phone, and the remote is device_key (DPAD_UP/DOWN/LEFT/RIGHT = 19-22, DPAD_CENTER = 23, BACK, HOME, MEDIA_PLAY_PAUSE = 85).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior5/5

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

With zero annotations, the description carries the full transparency burden. It discloses the visibility filter (free + your own devices), the host field for non-local hosts, and the concrete behavior of both TV classes, including that touch tools are refused on Apple TV. This is far beyond a bare 'list' and lets an agent predict side effects and constraints.

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 longer than most, but it is front-loaded with the core purpose in the first sentence, then flows into host/filter behavior, and finally packs in two dense TV-specific caveats. Every sentence earns its place, though the TV section could arguably be split into a separate reference without losing key information.

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 and no annotations, the description is the sole source of context. It covers the fields agents will see (os, deviceClass, osLabel, host, udid), the filtering rule, and the automation capabilities per device class. It stops short of giving an exact response shape or pagination note, but for a list-enumeration tool that is sufficient.

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 no parameters, so the baseline is 4. The description adds useful output semantics (which devices appear, host field presence, deviceClass/osLabel conventions) that an agent would need to interpret the results, even though it says nothing about input params – as expected for a zero-param 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 opens with 'List available devices (Android and iOS) across every connected device host' – a specific verb and resource. It further scopes the result set with 'Shows only free devices and devices currently used by you,' making it unmistakably distinct from broader enumeration or device-info tools.

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 doesn't waste words on an obvious when-to-use, but it gives explicit conditional routing: Apple TV devices must not be controlled with ios_tap/ios_swipe/ios_send_keys and instead require TV tools, while Android TV works with every device_* tool plus device_key. This is actionable guidance for choosing the correct sibling tools based on device class.

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

device_list_appsAInspect

List the APPS installed on an Android device — things with a launcher icon, user and system alike, so Settings and Chrome are included. Installed packages that are not apps (providers, accessibility services, Bluetooth stacks) are excluded: a Pixel reports 275 installed packages of which 23 are apps. Set userOnly to drop preinstalled apps, or includeNonLaunchable for the raw package list.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID)
userOnlyNoOnly user-installed apps, excluding preinstalled ones (default: false)
includeNonLaunchableNoInclude installed packages with no launcher activity — providers, services, OEM stubs. Default false.

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 carries the full behavioral disclosure burden. It goes beyond the name/schema by explaining inclusion criteria, exclusion of providers/accessibility services/Bluetooth stacks, and gives a concrete Pixel example (275 packages, 23 apps), which meaningfully sets expectations for the returned list.

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 definition is compact and well-structured: definition first, then a clarifying example, then parameter guidance. Every sentence earns its place and the text is front-loaded with the most important 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 the tool's low complexity, clear schema, and the absence of an output schema, this is complete. It tells the agent what the tool lists, what is excluded, and how the optional flags alter behavior, so an agent can invoke it correctly without further inference.

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 input schema already documents all three parameters at 100% coverage, providing the baseline of 3. The description adds value beyond the schema by translating userOnly and includeNonLaunchable into practical behavioral terms (drop preinstalled apps, raw package list) and explaining the app-vs-package distinction that gives the parameters meaning.

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 opens with a specific verb and resource: "List the APPS installed on an Android device." It then clarifies the exact definition (launcher-icon apps, user and system alike) and explicitly contrasts with installed packages, making it distinct from generic app listing tools.

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 provides clear functional context and parameter-level usage guidance: "Set userOnly to drop preinstalled apps, or includeNonLaunchable for the raw package list." It does not explicitly name sibling alternatives or state when not to use this tool, so it misses the top tier for exclusion guidance.

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

device_locators_forAInspect

Generate ranked locator strategies for a UI element on Android. Pass either coordinates (x, y — picks the smallest containing element) OR a text/contentDesc/resourceId to look up. Returns the same priority-ordered list the UI inspector shows: id, text, content-desc, accessibility selector, XPath. Use these to fill page-object selectors when generating test scripts so you do not have to re-derive them.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoPhysical x coordinate of the element (use with y)
yNoPhysical y coordinate of the element (use with x)
textNoLookup by visible text (matches text or content-desc)
udidYesDevice serial number (UDID)
resourceIdNoLookup by resource-id
contentDescNoLookup by content-desc / accessibility label

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It discloses the output list and the coordinate behavior (picks smallest containing element), but it does not explicitly state read-only status, device connection requirements, or error handling. For a generation tool the safety profile is implied but not stated.

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?

Three sentences with no waste. Purpose is front-loaded, followed by input options, output format, and use case. Every sentence earns its place.

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?

The description covers the output format, use case, and input guidance. It omits explicit read-only status and error scenarios, but these are not critical for a locator-generation tool. Overall it provides enough for an agent to call it correctly.

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

Parameters4/5

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

The schema fully documents each parameter, but the description adds meaningful semantics: x/y must be used together, and text/contentDesc/resourceId are alternative lookup modes. It also explains that coordinates select the smallest containing element, which goes 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 generates ranked locator strategies for Android UI elements, with a specific verb and resource. It distinguishes itself from siblings like device_find_element and ios_locators_for by platform and output purpose.

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 explicitly describes the use case (filling page-object selectors) and clarifies the input modes (coordinates vs text/contentDesc/resourceId). It does not explicitly name alternatives or when not to use it, but the purpose is distinct enough to guide selection.

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

device_long_pressAInspect

Long press at (x,y) on an Android device screen. Triggers context menus, drag handles, and other long-press actions. Coordinates are PHYSICAL pixels (from page_source bounds).Pass input="hid" to require the virtual touchscreen: the gesture then reaches the app as real kernel input and fails loudly instead of silently falling back to injected input. That strict path used to be device_uhid_long_press, which stays callable under its old name.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesX coordinate in physical pixels (from page_source bounds)
yYesY coordinate in physical pixels (from page_source bounds)
udidYesDevice serial number (UDID)
inputNoInput path. 'auto' (default) prefers the virtual touchscreen and falls back to injected input. 'hid' requires the virtual touchscreen and fails if the device does not provide one — use it when the gesture must be real kernel input or must fail loudly.
durationNoHold duration in ms (default: 800)

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral burden. It discloses the coordinate system, the difference between auto and hid input paths, and the failure mode of the hid path ('fails loudly instead of silently falling back'). It also mentions the migration note about the old name. It does not disclose permissions or return value, but for a gesture tool this is adequate.

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 two sentences but the second is a run-on that packs several ideas. It front-loads the core action and then explains the input parameter. It is informative but could be tightened. It avoids verbosity and stays focused on key behavior.

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's simplicity and the rich schema (100% coverage), the description covers the essential behavioral aspects: coordinate system, input modes, and failure behavior. It lacks an explicit statement about return values, but no output schema exists and the tool likely returns nothing significant. The migration note adds context. Overall, adequate for an agent to call it correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so the description adds little beyond what the schema already provides. It reiterates the coordinate system (already in schema) and explains the input parameter (also in schema). The only unique addition is the note about the old name, which is not parameter-specific. Baseline 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 verb 'Long press', the resource 'Android device screen', and the specific coordinates. It also explains the purpose (triggers context menus, drag handles) and distinguishes from other gesture tools by describing the action's nature. The mention of the old name device_uhid_long_press further clarifies its identity.

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 provides guidance on when to use the 'hid' input path ('when the gesture must be real kernel input or must fail loudly') and notes the old name as an alternative. However, it does not explicitly state when to use this tool versus other gesture tools like device_tap or device_swipe, leaving selection largely to the agent's inference.

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

device_navigate_urlAInspect

Open a URL in a browser on an Android device. Much simpler than manually tapping the address bar. Uses the browser already in the foreground when there is one, so it drives the browser you are looking at rather than a different one in the background; otherwise it falls back to Chrome. Returns { opened, url, browser, pageId } — when pageId is non-null the tab it opened becomes this device's current page, so you can call the android_devtools_* / webpage_* tools straight afterwards WITHOUT pageId and stay on this tab.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesURL to open (include https://)
udidYesDevice serial number (UDID)

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries the full burden of behavioral disclosure, and it does so well. It explains the browser selection logic (foreground first, Chrome fallback), the return object, and the important side-effect that a non-null pageId makes the opened tab the current page for subsequent devtools calls. It doesn't mention error conditions or permissions, but the core behavioral traits are clearly communicated.

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 three sentences long, with the primary purpose stated first. The second sentence adds the browser-selection nuance, and the third explains the return value and follow-up usage. Each sentence carries useful information, though the third sentence is slightly dense and could be split for easier parsing. Overall, it's efficient and well-organized.

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 tool with no output schema and no annotations, the description covers the essential details: what it does, browser fallback behavior, return values, and the pageId side-effect that affects subsequent tool calls. It doesn't explicitly address failure scenarios (e.g., invalid URL, no browser available) or permissions, but these are not critical for an agent to invoke the tool correctly in most cases.

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

Parameters3/5

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

The input schema already covers both parameters (url and udid) with clear descriptions at 100% coverage. The tool description doesn't add new parameter-level semantics; it focuses on behavior and return values. Per the calibration rule, a baseline of 3 is appropriate when the schema handles parameter documentation fully.

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 opens with a clear, specific verb and resource: 'Open a URL in a browser on an Android device.' It further distinguishes itself from sibling tools by describing its foreground-browser behavior and Chrome fallback, making its role unambiguous even among many related navigation tools.

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 practical context by explaining when this tool is the right choice: it's 'much simpler than manually tapping the address bar' and it drives the foreground browser, with a fallback to Chrome. It also explains how to continue working with android_devtools_* and webpage_* tools using the returned pageId. However, it doesn't explicitly name alternative tools or state when NOT to use it, leaving some inference to the agent.

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

device_network_infoBInspect

Get network info from an Android device: WiFi SSID, IP address, and signal strength.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID)

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries the behavioral burden. 'Get' implies a read-only operation and the description discloses what data will be retrieved. However, it does not address failure modes, prerequisites such as an active WiFi connection, or whether the device must be reachable.

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?

A single sentence that is front-loaded with the action and resource, followed by the key output fields. There is no redundant information or filler.

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 low-complexity, one-parameter read tool with no output schema, the description is mostly sufficient: it names the source, the required identifier context, and the expected return contents. It could be more complete by noting error conditions or assumptions about device connectivity, but these are minor gaps.

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?

The schema already documents udid as 'Device serial number (UDID)' with 100% coverage, so the baseline applies. The description adds no further parameter-level detail beyond tying the tool to Android devices.

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 clear verb ('Get') and resource ('network info from an Android device') and enumerates the returned fields (WiFi SSID, IP address, signal strength). It is unambiguous, though it does not explicitly contrast itself with sibling network-related tools such as android_devtools_capture_network or android_traffic_flows.

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?

There is no guidance on when to use this tool versus alternatives, no prerequisites, and no mention of when it should not be used. The description implies a straightforward read operation but leaves selection criteria entirely to inference.

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

device_notificationsAInspect

Read current notifications on an Android device. Returns structured list of active notifications (app, title, text).

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID)

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. The first word 'Read' clearly signals a read-only operation, and the mention of returning a structured list discloses the expected output. It does not cover edge behaviors like notification permissions or empty states, but for a simple status tool the core behavior 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.

Conciseness5/5

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

The description is a single sentence, front-loaded with the action ('Read'), and contains no filler. Every word contributes: platform (Android), scope (current notifications), and return format (app, title, text).

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 one-parameter tool with no output schema, the description adequately explains what it returns. It could mention caveats like notification permission requirements or that 'active' excludes history, but the current text provides enough context for an agent to invoke it correctly.

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% – the udid parameter is already documented as 'Device serial number (UDID)'. The tool description adds no additional parameter-level meaning, so the baseline of 3 applies: the schema does the heavy lifting.

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 states a specific verb ('Read') and resource ('current notifications on an Android device'), and defines the return shape ('structured list of active notifications (app, title, text)'). This clearly distinguishes it from the iOS counterpart (ios_notifications_capture) and other device_* tools without needing to open schemas.

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 gives clear context for when to use the tool: when reading current Android notifications is needed. However, it does not explicitly mention alternatives or exclusions (e.g., 'for iOS use ios_notifications_capture'), so the guidance remains implied rather than explicit.

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

device_orientationAInspect

Set the screen orientation of an Android device. PORTRAIT and LANDSCAPE mirror ios_orientation; PORTRAIT_REVERSE and LANDSCAPE_REVERSE are the 180°-turned variants and have no iOS counterpart. Turns AUTO-ROTATE OFF as a side effect, and leaves it off — otherwise the accelerometer overrides the setting the moment the device is moved and the call looks like it silently did nothing. Returns once the stream has reported the new frame size, so the next device_tap is mapped against the new shape rather than the old one.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID)
orientationYesTarget orientation

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 carries the full behavior burden and does so thoroughly: it discloses that AUTO-ROTATE is permanently turned off, explains why the accelerometer would otherwise override the setting, and describes the blocking behavior of waiting for the stream to report the new frame size. This lets the agent predict side effects and coordinate subsequent taps.

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?

Four tightly packed sentences: purpose, value semantics, side effect with rationale, and return/coordination behavior. Every sentence adds operational value, and the most important side effect is given prominent placement.

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?

For a two-parameter tool with no output schema and no annotations, the description covers the essential operational context: side effect, persistence, reverse-orientation semantics, and when control returns. Nothing an agent needs to invoke it correctly is missing.

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

Parameters4/5

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

Schema coverage is 100% and the schema already documents udid and orientation, so the baseline is 3. The description adds meaningful semantics to the orientation parameter by explaining the relationship to ios_orientation and the meaning of the reverse variants, so it earns a 4.

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 opening sentence gives a specific verb and resource: 'Set the screen orientation of an Android device.' It also distinguishes orientation values from ios_orientation and names the reverse variants, which helps separate this tool from the iOS sibling in the tool list.

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 orients the agent by mapping PORTRAIT/LANDSCAPE to ios_orientation and noting that reverse variants have no iOS counterpart, implying cross-platform routing. It does not explicitly state when not to use the tool or name other alternatives such as device_rotate, so it falls just short of fully explicit usage guidance.

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

device_page_sourceAInspect

Get UI hierarchy XML of a device . Bounds are in physical pixel coordinates — use them directly with device_tap/device_swipe (no scaling needed). Supports element filtering by text/class and compact description format. Pass search to grep the dump case-insensitively across text/content-desc/class/resource-id — the fast way to check if a target is present. If it is NOT in the dump it may be scrolled off-screen (Android only dumps rendered nodes): use device_scroll_to_element to bring it in, device_find_element/device_locators_for to resolve a stable locator, or device_wait_for_element to wait out animations.

ParametersJSON Schema
NameRequiredDescriptionDefault
textNoFilter: only return elements where text or content-desc matches this string
udidYesDevice serial number (UDID)
formatNoOutput format: xml (default) or description (compact readable list)
searchNoCase-insensitive substring grepped across the whole node (text, content-desc, class, resource-id). Looser than `text` (which is an exact text=/content-desc= match) — use it to locate an element without knowing its exact label.
classNameNoFilter: only return elements matching this class name (e.g. android.widget.Button)

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations provided, the description carries the full disclosure burden and shoulders it well: it reveals that Android only dumps rendered nodes (scrolled-off elements are missing), that bounds are raw physical pixels usable directly with device_tap/device_swipe, and that `search` is a case-insensitive substring vs the exact `text` match. These are non-obvious behaviors an agent must know to avoid false-negative conclusions.

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?

Five front-loaded sentences with zero filler: core purpose first, then the highest-risk facts (coordinate semantics, rendered-nodes limitation), then filter options, and finally fallback routing. Every clause carries actionable information an agent needs before invoking.

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?

With no output schema, the description compensates by explaining what the dump contains (physical-pixel bounds) and its key limitation (only rendered nodes), plus what to do when an element is missing. Combined with 100% schema parameter coverage, nothing an agent needs to call it correctly and react to results is missing.

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 the baseline is 3. The description adds incremental value by framing parameters as a task strategy: filtering by text/class, the compact description output format, and using `search` as the fast, deliberately looser presence check. It doesn't add new syntax beyond the schema, but it helps the agent choose which parameter fits the goal.

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?

States a specific verb and resource: 'Get UI hierarchy XML of a device.' It goes beyond a terse purpose by anchoring the tool to Android (only rendered nodes are dumped) and by referencing the device_* sibling family, so an agent can distinguish it from ios_page_source or the session/web page-source tools without opening their schemas.

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 when-to-use guidance: `search` is described as 'the fast way to check if a target is present,' and the description directly instructs the agent to switch to device_scroll_to_element, device_find_element/device_locators_for, or device_wait_for_element when the target is absent from the dump. It gives both positive usage conditions and explicit fallback routing to named alternatives.

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

device_panelAInspect

Pull down the notification panel, the Quick Settings panel, or collapse open panels. action="notifications": pull down the first panel (notifications). action="settings": pull down Quick Settings (some OEMs require notifications first). action="collapse": close any open panel. Tries control channel first; falls back to cmd statusbar shell on error. Returns { ok, action, transport }.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID)
actionYesWhich panel operation to perform

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 carries full responsibility and does well: it discloses the control-channel-first strategy, the fallback to `cmd statusbar` shell, and the exact return tuple {ok, action, transport}. It also warns about OEM variation, which is exactly the kind of non-obvious behavior an agent needs.

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?

Three tight sentences cover the operation, per-action behavior, fallback mechanism, and return shape. Every clause earns its place and the most important usage distinction 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?

For a two-parameter tool with no output schema, this is complete: action semantics, OEM caveat, fallback path, and return structure are all specified. There are no mysterious failure modes left for the agent to guess.

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?

Although the schema already lists the action enum and UDID, the description adds real semantics for every action value: what 'notifications' means, what 'settings' may require, and what 'collapse' does. This goes well beyond the schema's generic 'Which panel operation to perform'.

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?

Opens with a precise verb and object ('Pull down the notification panel, the Quick Settings panel, or collapse open panels') and then enumerates each action value with concrete semantics. This is clearly distinguishable from nearby siblings like device_notifications because the action enum maps to distinct UI operations.

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 gives action-specific operational guidance, including the OEM caveat that Quick Settings may require opening notifications first. It doesn't explicitly state when not to use this tool versus a swipe/gesture alternative, but no obvious sibling offers the same behavior, so the guidance is sufficient.

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

device_pinchAInspect

Two-finger pinch-to-zoom centred at (x,y) on an Android device. scale > 1 zooms IN (fingers spread), scale < 1 zooms OUT (fingers converge); ~2 doubles, ~0.5 halves. Both fingers ride a VERTICAL axis through the centre, so the centre governs where they land: put it on the content you want to zoom, ideally the middle third of the screen. A centre near the top or bottom leaves no room — the span is squeezed to fit the content area and the zoom comes out weak or does nothing. Fingers are kept clear of the status and navigation bars; a finger in the status bar pulls down the notification shade instead of touching the app. Bottom sheets, dialogs and cards are app UI and cannot be detected here: if one covers the lower half, centre the pinch above it or the sheet swallows the gesture. The reply reports the finger endpoints and span actually used — if the screen did not change, check those before retrying. Coordinates are PHYSICAL pixels — same as the bounds in device_page_source.Pass input="hid" to require the virtual touchscreen: the gesture then reaches the app as real kernel input and fails loudly instead of silently falling back to injected input. That strict path used to be device_uhid_pinch, which stays callable under its old name.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesPinch centre X
yYesPinch centre Y
udidYesDevice serial number (UDID)
inputNoInput path. 'auto' (default) prefers the virtual touchscreen and falls back to injected input. 'hid' requires the virtual touchscreen and fails if the device does not provide one — use it when the gesture must be real kernel input or must fail loudly.
scaleYesEnd/start finger-separation ratio: >1 zoom in, <1 zoom out (0.2-5)
durationNoGesture duration in ms (default: 300)

TDQS

A4.7/5.0
Behavior5/5

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

No annotations provided, so the description carries full disclosure. It details scale direction and magnitude, the vertical-axis finger constraint, interaction with system bars, undetectable bottom sheets, the reply contents (finger endpoints and span), physical-pixel coordinates, and the hid vs auto input path with loud-failure behavior. Nothing is left hidden.

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 dense but every sentence earns its place. It front-loads the core action and scale rule, then systematically covers placement constraints, UI pitfalls, reply verification, coordinate system, and the strict input mode. No fluff or repetition.

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?

With no output schema, it discloses the reply fields (endpoints and span) and how to interpret them. It covers all six parameters through explanation or reference to schema. It addresses common failure modes (weak zoom near edges, notification shade, bottom sheets) and the hid vs auto distinction, making it complete for an agent to invoke correctly.

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 meaning beyond the schema: it explains scale semantics (zoom in/out, approximate doubling/halving), the role of x/y as the pinch centre, and the physical-pixel interpretation tied to device_page_source. It does not detail duration, but that is already self-explanatory in 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?

States a specific verb and resource: 'Two-finger pinch-to-zoom centred at (x,y) on an Android device.' It distinguishes itself by naming the scale semantics and the old alias device_uhid_pinch, clearly differentiating from other gesture tools like device_gesture_path and device_swipe.

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 clear contextual guidance on where to place the centre (middle third), warns about status/nav bars and bottom sheets, and explains when to use input='hid'. It does not explicitly list alternative tools to compare against, but the placement advice and failure-mode discussion effectively steer correct usage.

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

device_rebootAInspect

Reboot an Android device. DISRUPTIVE and NOT REVERSIBLE: the device is unreachable for roughly 40 seconds, the stream drops, the MCP session is torn down, and anything in progress on the device is lost. Requires confirm=true — there is no default. Do NOT reach for this to recover from a flaky tool call; try device_release first, which resets the session without touching the device. Reboot only when the device itself is wedged and a human has asked for it. The iOS counterpart is ios_reboot.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID)
confirmYesMust be exactly true. Acknowledges the device will restart and the session will be lost.

TDQS

A4.7/5.0
Behavior5/5

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

Despite having no annotations, the description fully discloses the disruptive and irreversible nature: 40-second unreachability, stream drop, MCP session teardown, data loss, and the mandatory confirm flag. This goes far beyond what the schema or annotations would tell an agent, making the risk profile crystal clear.

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?

Every sentence earns its place: the core action is first, then the critical consequences, then the safe alternative, then the precise condition for useto. The length is justified for a high-stakes irreversible operation, and the structure front-loads the most important 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 that this is a destructive reboot with no output schema, the description covers all essential context: consequences, prerequisites (confirm=true), alternatives, and the exact scenario in which it is appropriate. An agent has everything needed to decide whether and how to call this tool safely.

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% and both parameters are well-documented in the schema. The description adds the emphasis that confirm is required and has no default, but this is already implied by the required array and const:true. No significant new parameter meaning is added 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?

States a specific verb ('Reboot') and resource ('Android device'), and explicitly distinguishes itself from the sibling tools device_release and ios_reboot. An agent can immediately tell what this tool does and how it differs from close alternatives.

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 guidance ('only when the device itself is wedged and a human has asked for it'), when-not-to-use guidance ('Do NOT reach for this to recover from a flaky tool call'), and names the alternative (device_release) that should be tried first. No ambiguity remains.

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

device_record_startAInspect

Start a screen recording on an Android device. Recording subscribes to the per-device shared device control session (same session that powers live UI streaming and MCP control — never a duplicate device control process). H.264/H.265 video frames are remuxed server-side into an mp4 on the server host. No on-device storage, no FLAG_SECURE limits, no 180 s on-device recorder cap. The recording auto-stops after maxDurationSec (default 300, max 600) so a forgotten stop call cannot fill disk indefinitely. Returns a recordingId to pass to device_record_stop. Only one recording per device at a time.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID)
maxDurationSecNoAuto-stop cap in seconds (default 300, max 600)

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure and does so thoroughly. It explains side effects: subscription to the existing device control session, server-side remuxing, auto-stop behavior, lack of on-device storage or FLAG_SECURE limitations, and the single-recording-per-device rule.

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 detailed yet compact, with the core operation front-loaded. Each additional sentence earns its place by explaining critical behavioral constraints, output, or pairing with `device_record_stop`, with no redundant filler.

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?

For a two-parameter tool with no output schema, the description is complete: it specifies the return contract (`recordingId` for `device_record_stop`), auto-stop limits, concurrency restrictions, and the underlying session behavior. An agent has enough information to select and invoke this tool correctly.

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 already documents `udid` and `maxDurationSec` effectively. The description reinforces the default/max behavior of `maxDurationSec` but does not add meaning beyond what the schema already states, so the baseline score of 3 is appropriate.

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

Purpose5/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: 'Start a screen recording on an Android device.' It further distinguishes this from related flows by describing server-side remuxing, the shared device control session, and the `device_record_stop` pairing, so an agent can separate it from streaming or performance-recording tools.

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 gives clear context for when this tool is appropriate: when a screen recording should be saved server-side as an mp4, with no on-device storage and no built-in recorder limits. It contrasts with on-device recording behavior ('no 180 s on-device recorder cap') and notes the one-recording-per-device constraint, though it does not explicitly name sibling alternatives such as `android_video_stream` or `android_performance_record_start`.

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

device_record_stopAInspect

Stop a screen recording started by device_record_start. Closes the remux pipeline cleanly so the mp4 has a valid moov atom. Returns hostPath (already on the server host), sizeBytes, durationMs, and the negotiated codec/resolution.

ParametersJSON Schema
NameRequiredDescriptionDefault
recordingIdYesrecordingId returned by device_record_start

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral disclosure burden. It explains the clean shutdown behavior, the valid moov atom guarantee, and the exact return fields. It does not mention failure modes or idempotency, but the core runtime behavior is well disclosed.

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

Conciseness5/5

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

The description is two concise sentences with no wasted words. The action and key outcome are front-loaded, and the return values are listed compactly.

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 one-parameter tool with no output schema, the description is largely complete: it covers the operation, the expected input, and the return payload. It could mention edge cases like calling stop without an active recording, but the current information is sufficient for correct invocation in the normal flow.

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% and the single parameter already has a clear description: 'recordingId returned by device_record_start.' The tool description reinforces this pairing but does not add additional parameter-level detail. Baseline 3 is appropriate since the schema handles the semantics.

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 uses a specific verb and resource: 'Stop a screen recording started by device_record_start.' It also distinguishes itself by naming its paired start tool and detailing the clean remux pipeline closure. This leaves no ambiguity about what the tool does.

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 clearly indicates this tool is the counterpart to device_record_start, so an agent knows when to invoke it. It does not explicitly list alternatives to avoid, but the pairing and the device-specific naming make the intended usage obvious.

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

device_reflex_probeAInspect

SPIKE: arm a local reflex on an Android device — watch the video stream for a brightness jump and fire gamepad button 0 immediately, without a round trip. Measures how fast the loop can close. Returns fire count, decoded frame count, frame intervals, and the detect-to-write time measured server-side. The authoritative end-to-end number must come from the device clock (a page that flips a marker and watches for the button).

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID)
holdMsNoHow long to hold the button before releasing and re-arming (default 120)
durationMsNoHow long to keep the reflex armed (default 8000)
thresholdDeltaNoMean-luminance jump that counts as a stimulus, 0-255 (default 25)

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It explains that the tool operates without a round trip, watches a video stream, fires gamepad button 0, and returns specific metrics. It even warns that the detect-to-write time measured server-side is not authoritative and that the real end-to-end number must come from the device clock. It does not mention side effects of firing the gamepad button or whether a video stream must be running first, but the disclosed internals and limitation go well beyond a minimal statement.

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 dense and front-loaded, beginning with the core action and then moving to return values and a caveat. Every clause adds information, but the multiple dashes and the 'SPIKE' prefix make it slightly harder to parse at a glance. Still, nothing feels wasted.

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?

The description lists the key return values (fire count, decoded frame count, frame intervals, detect-to-write time) and the critical device-clock caveat, which is useful since there is no output schema. However, it does not specify return formats, does not mention a prerequisite like starting the video stream first, and omits any caution about the gamepad button firing as a side effect. Given the tool's complexity and lack of annotations, this is adequate but not complete.

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

Parameters3/5

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

The schema has 100% description coverage for all four parameters, including udid, holdMs, durationMs, and thresholdDelta. The description does not add meaningful parameter-level detail beyond 'brightness jump', which loosely maps to thresholdDelta. Since the schema already documents the parameters thoroughly, the baseline 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 starts with a specific verb and resource: 'arm a local reflex on an Android device' and immediately details the exact mechanism: watch the video stream for a brightness jump and fire gamepad button 0. It clearly states what it measures ('how fast the loop can close') and is distinct from any sibling tool by describing a unique local-reflex probe rather than a generic screenshot, stream, or performance capture tool.

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 the tool is for measuring local reflex latency and provides a critical caveat about the authoritative end-to-end number needing to come from the device clock. However, it never states when to prefer this tool over other performance-related siblings like android_fps, android_performance_record_start, or device_record_start, nor does it name explicit alternatives or exclusions.

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

device_releaseAInspect

Release your hold on a device so it stops counting against your parallel-device limit. Also tears down your control session for it, so the device stops streaming for you immediately instead of idling out. Call this when finished with a device. Holds also expire automatically after an idle period.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID) to release

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses that it stops the device from counting against the limit and immediately stops streaming, and notes automatic expiry. It does not mention any side effects beyond these, but they are the primary behaviors an agent would need to know. Lacks detail on permissions or reversibility, but for a simple release action this is sufficient.

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 three sentences, front-loading the core purpose and then adding important behavioral details. No wasted words. It is efficiently structured and easy to parse.

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?

The tool has a single parameter, no output schema, and the description covers the purpose, the effects, and the trigger for use. It is complete for an agent to understand when and how to invoke it correctly.

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?

The schema has 100% coverage for the single parameter 'udid' with a clear description. The tool description does not add extra meaning to the parameter, but since the schema fully documents it, the baseline of 3 is appropriate. No additional guidance is needed.

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: releasing a hold on a device, and explains the consequences (stopping the count against parallel-device limit and tearing down the control session). It names the resource (device) and the action (release), and is unambiguous. It stands apart from the many device_* tools because it focuses on releasing a hold.

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?

Explicitly says 'Call this when finished with a device,' which is a clear trigger for use. It also mentions that holds expire automatically after an idle period, giving context. However, it does not explicitly state when NOT to use it or mention any alternatives, though no obvious sibling exists for this function.

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

device_rotateAInspect

Two-finger rotation (twist) about (x,y) on an Android device — the gesture maps, photo editors and canvas apps listen for. Positive degrees turns clockwise on screen. The fingers follow the ARC of a circle rather than a straight line, which is what a rotation detector needs. Coordinates are PHYSICAL pixels.Pass input="hid" to require the virtual touchscreen: the gesture then reaches the app as real kernel input and fails loudly instead of silently falling back to injected input. That strict path used to be device_uhid_rotate, which stays callable under its old name.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesRotation centre X
yYesRotation centre Y
udidYesDevice serial number (UDID)
inputNoInput path. 'auto' (default) prefers the virtual touchscreen and falls back to injected input. 'hid' requires the virtual touchscreen and fails if the device does not provide one — use it when the gesture must be real kernel input or must fail loudly.
degreesYesTurn in degrees; positive is clockwise on screen
durationNoGesture duration in ms (default: 400)

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It does well by explaining the physical-pixel coordinate system, the arc-following gesture behavior, the fallback semantics of 'auto', and the loud-failure behavior of 'hid'. It doesn't mention side effects or return values, but for a gesture tool the key behavioral traits are well covered.

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

Conciseness4/5

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

The description is dense but well-organized, front-loading the core gesture semantics before diving into the HID path and legacy alias. Every sentence adds value, though the legacy alias mention could be seen as slightly tangential. It's appropriately sized for a tool with this many behavioral nuances.

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 gesture tool with no output schema and no annotations, the description covers the essential behavioral context: coordinate system, gesture shape, rotation direction, input path options, and legacy naming. It doesn't describe return values or error conditions beyond the 'fails loudly' note, but the core calling context is complete enough for an agent to use it correctly.

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 already documents all six parameters. The description adds context about physical pixels and the arc gesture, which enriches the meaning of x/y and degrees, but it doesn't add significant new parameter-level semantics beyond what the schema already provides. Baseline 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 performs a two-finger rotation gesture on an Android device, specifies the coordinate system (physical pixels), and explains the gesture semantics (arc of a circle, positive degrees clockwise). It distinguishes itself from related gesture tools by naming the legacy alias device_uhid_rotate and the strict HID path.

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 explicitly explains when to use input='hid' versus the default 'auto' path, including the behavioral difference (fails loudly vs. silent fallback). It also mentions the legacy name device_uhid_rotate, which helps agents recognize the tool's relationship to its predecessor. This is clear usage guidance beyond what the schema provides.

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

device_screenAInspect

Control device screen power state and rotation. action="on": wake the screen if asleep (idempotent — checks current wakefulness first). action="off": put the screen to sleep (idempotent). action="rotate": set orientation to portrait/landscape/portrait-reverse/landscape-reverse; auto-rotation gets disabled so the new orientation sticks. Returns { ok, action, screenState, orientation? }.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID)
actionYeson/off toggles screen power; rotate sets orientation
orientationNoRequired when action="rotate"; ignored otherwise

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries full behavioral disclosure. It clearly discloses idempotence for on/off, the wakefulness check, that auto-rotation is disabled for rotate, and the return shape. This goes well beyond the minimal requirement, though it doesn't address permissions or device-level side effects beyond auto-rotation.

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 and efficiently structured: a short purpose sentence, action-by-action breakdown, and return signature. Every sentence earns its place, and the most important behavioral details (idempotence, auto-rotation) are 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?

For a 3-parameter tool with no annotations and no output schema, the description is complete. It covers all actions, parameter relationships, behavioral quirks, and the return object shape, leaving nothing essential for an agent to infer.

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 the baseline is 3. The description adds extra meaning by explaining the behavioral consequences of each action value and clarifying that orientation is required only for rotate and ignored otherwise. This adds value beyond the raw enum definitions.

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 a specific verb and resource scope: controlling device screen power state and rotation, with explicit action values and their effects. However, it doesn't explicitly distinguish itself from sibling tools like device_rotate or device_orientation, which could cause an agent to wonder which tool to pick for orientation changes.

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 gives clear context for each action ('on' wakes, 'off' sleeps, 'rotate' sets orientation) but provides no when-to-use guidance relative to alternatives. It doesn't mention that device_rotate or device_orientation might be more appropriate for pure rotation needs, nor does it state when this tool should be preferred.

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

device_screenshotAInspect

Take a screenshot of a device (one frame). Returns the JPEG image PLUS, by default, a compact list of labeled UI elements with their bounds (in device-tap coord space — use directly with device_tap, no scaling). The bundled element list eliminates the second roundtrip to device_page_source and removes visual-estimation guesswork for tap targets that appear in the accessibility tree. Prefer device_tap_by_text for elements with a visible label; use these bounds only as a fallback. For continuous observation or debugging a stuck flow, use android_video_stream (live MJPEG) instead of polling screenshots. Set includeElements=false to skip the page-source fetch and return only the image. For routine per-action screen checks, android_mjpeg_screenshot is much faster — it reads the already-running video stream instead of taking a fresh capture, and bundles no element list; reserve this tool for when you need the labeled elements or a full-fidelity frame.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID)
includeElementsNoInclude the compact labeled-element list alongside the image (default: true). Set false to save tokens on screens you only need to look at, not interact with.

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It explains the return format (JPEG plus element list), the coordinate space for bounds, the optional includeElements flag to skip page-source fetch, and performance trade-offs versus mjpeg. It doesn't detail potential side effects or error cases, but these are minimal for a screenshot tool. The description adds substantial behavior context beyond the schema.

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 longer than typical but every sentence contributes useful information. It is front-loaded with the core purpose and then expands on specifics and alternatives. The structure is logical and avoids fluff, though it could be slightly tighter without losing meaning.

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 there is no output schema, the description fully explains what the tool returns (JPEG image and labeled element list with bounds) and the coordinate space. It also covers the includeElements option and alternatives, providing a complete picture for an agent to use the tool correctly without missing critical context.

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% (both udid and includeElements have descriptions). The description adds value by explaining the trade-off of includeElements (skip page-source fetch, save tokens) and clarifies when to set it false. This goes beyond the schema's simple description, 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 takes a screenshot of a device (one frame) and distinguishes it from siblings like android_mjpeg_screenshot and android_video_stream by highlighting the bundled element list feature. The verb 'take' and resource 'screenshot' are specific, and the additional element list sets it apart from other screenshot tools.

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 explicitly provides usage guidance: prefer device_tap_by_text for visible labels, use bounds as fallback; for continuous observation or stuck flows, use android_video_stream; for routine screen checks, use android_mjpeg_screenshot. It clearly states when to use this tool vs alternatives, leaving no ambiguity.

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

device_scrollAInspect

Scroll the screen in a direction on an Android device. Uses video coordinate space automatically. No coordinate math needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID)
amountNoFraction of screen to scroll (0.0-1.0, default: 0.5)
directionYesScroll direction

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full behavioral burden. It discloses a meaningful behavior: automatic video-coordinate-space handling, which removes math from the caller. However, it does not mention side effects, gesture semantics (fling vs. smooth scroll), or completion behavior—reasonable for a simple action but not comprehensive.

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 short sentences with no filler. The primary action is front-loaded, and the coordinate-space differentiator is stated efficiently. Every sentence contributes to selecting and invoking the tool.

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 three-parameter, no-output-schema tool, the definition is nearly complete. Required parameters are clear, the default behavior is sensible, and the coordinate-space hint removes a common ambiguity. It only lacks explicit routing against sibling gesture tools, which is handled under usage guidelines.

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?

The input schema has 100% description coverage for all three parameters, so the baseline applies. The description does not add parameter-level detail beyond the schema, though the coordinate-space note helps agents understand why they should not compute coordinates manually.

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 action and resource: 'Scroll the screen in a direction on an Android device.' It clearly identifies the behavior and platform. It does not explicitly differentiate from sibling gesture tools like device_swipe or device_scroll_to_element, but the direction-based scroll intent is clear.

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 phrase 'Uses video coordinate space automatically. No coordinate math needed.' provides practical context for when to choose this tool over coordinate-based gesture tools. It stops short of naming alternatives or explicit when-not-to-use conditions, but the guidance is directionally useful.

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

device_scroll_to_elementAInspect

Scroll the screen until an element matching ANY of the provided locators (text, contentDesc, resourceId) appears, then return its coordinates in PHYSICAL pixels. Scrolls up to maxScrolls times.

ParametersJSON Schema
NameRequiredDescriptionDefault
textNoVisible text of the element (matches text or content-desc)
udidYesDevice serial number (UDID)
directionNoScroll direction (default: down)
maxScrollsNoMax scroll attempts (default: 5)
resourceIdNoResource ID (e.g. com.android.settings:id/switch_widget)
contentDescNoContent description / accessibility label

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It discloses that the tool scrolls up to maxScrolls times, matches ANY provided locator, and returns coordinates in physical pixels. However, it does not state what happens if the element is not found after maxScrolls, whether the scroll direction is respected for both up/down, or if there are side effects like screen state changes. This is useful but incomplete behavioral disclosure.

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 with no wasted words. The first sentence front-loads the core action and return value, while the second specifies the scroll limit. Key details like 'PHYSICAL pixels' and 'ANY of the provided locators' are included efficiently.

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 tool with no output schema, the description adequately covers the main behavior, return type (coordinates), and locator logic. It mentions scroll direction is configurable via the parameter, and maxScrolls is a limit. Missing is failure behavior (e.g., error if not found) and whether coordinates are relative to the screen or viewport, but these are common assumptions. Given the tool's moderate complexity, the description is mostly complete.

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 the baseline is 3. The description adds valuable semantics by explaining that the locators are combined with OR logic ('matching ANY of the provided locators'), which is not obvious from the individual optional parameters. It also clarifies that maxScrolls caps the number of scroll attempts and reinforces the output as physical-pixel coordinates. This goes beyond the raw schema information.

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 states a specific verb and resource: 'Scroll the screen until an element... appears, then return its coordinates in PHYSICAL pixels.' It clearly identifies the locator types (text, contentDesc, resourceId) and the unique behavior of scrolling to an element, which differentiates it from sibling tools like device_find_element (no scrolling), device_wait_for_element (no scrolling), and ios_scroll_to_element (platform-specific). The mention of PHYSICAL pixels adds a critical distinguishing detail.

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: use when an element is not currently on screen and you need its coordinates after scrolling. However, it provides no explicit guidance on when to prefer this tool over siblings like device_find_element, device_wait_for_element, or device_scroll. There are no alternatives named or exclusions stated, leaving the routing decision to the agent's inference.

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

device_set_device_languageAInspect

Change the Android device's system language and locale (persistent, affects every app, survives reboot). Uses a bundled locale-change helper with reflection into ActivityManagerNative.updateConfiguration. For per-app testing without changing the whole device, prefer device_launch_app_in_language. Caveats: Samsung One UI / MIUI may re-apply their own locale after a few seconds; Android 14+ requires hidden_api_policy=1 (set automatically); MDM-managed devices may refuse the CHANGE_CONFIGURATION grant.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID)
scriptNoOptional ISO 15924 script tag (e.g. "Hans" / "Hant" for Chinese variants)
countryYesISO 3166-1 alpha-2 country code, e.g. "FR", "US", "JP"
languageYesISO 639-1 language code, e.g. "fr", "es", "en", "ja"

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden. It discloses the persistence and reboot survival, the implementation via reflection into ActivityManagerNative.updateConfiguration, and all known platform-specific failure modes. This is exemplary transparency 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?

Three well-organized sentences: purpose first, then alternative, then caveats. No filler, every sentence adds actionable information, and the most critical scope 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?

For a system-level mutation tool with no annotations or output schema, this description covers all necessary context: persistence, scope, alternatives, and all known caveats. An agent has everything needed to decide when and how to invoke it, and what to expect.

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 description need not repeat parameter details. It does not add extra meaning beyond the schema, but the baseline of 3 is appropriate since the schema already fully documents all four parameters. The description does not hurt or enhance 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?

Description explicitly states the verb 'Change', the resource 'Android device's system language and locale', and adds key attributes: persistent, affects every app, survives reboot. It also distinguishes itself from the sibling device_launch_app_in_language, making its scope unambiguous.

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 guidance: 'For per-app testing without changing the whole device, prefer device_launch_app_in_language'. Also lists caveats (Samsung/MIUI re-applying locale, Android 14 hidden_api_policy, MDM refusal) that inform when this tool may fail, giving an agent decision criteria.

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

device_set_locationAInspect

Mock GPS coordinates on an Android device for testing location-aware apps. Uses a bundled mock-location helper service (Apache-2.0, auto-installed on first call). API 26+. Scope: every app that reads LocationManager / FusedLocationProviderClient sees the mock fix; apps that check Location.isFromMockProvider (banks, ride-share, Pokémon GO) will detect it and refuse — that's an OS-level signal we can't hide.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID)
accuracyNoOptional accuracy in meters (default 5)
latitudeYesLatitude in decimal degrees, e.g. 37.7749
longitudeYesLongitude in decimal degrees, e.g. -122.4194

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral disclosure burden, and it does so well: it reveals that a bundled mock-location helper service is auto-installed on first call, that the mock fix is visible to every app using LocationManager/FusedLocationProviderClient, and that the isFromMockProvider flag cannot be hidden. This is meaningful beyond the schema. It doesn't mention whether previous location settings are restored or whether a subsequent clear call is needed, so it stops short of a 5.

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 front-loaded with the core purpose and packs useful behavioral caveats into three sentences. The licensing detail (Apache-2.0) is marginally extraneous but not distracting, and the overall length is justified by the need to explain the mock-provider limitation.

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 tool with no output schema and no annotations, the description covers the key operational context: supported API level, install-on-first-call behavior, scope of visibility, and an important app-level detection caveat. It could be strengthened by noting how to verify the mock location or how it interacts with device_clear_location, but it is sufficiently complete for safe invocation.

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 input schema already documents all four parameters (udid, latitude, longitude, accuracy). The description adds no extra parameter-level meaning beyond what the schema provides, which is acceptable per the baseline for full schema 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 states a specific verb and resource: "Mock GPS coordinates on an Android device for testing location-aware apps." This clearly distinguishes it from related siblings like device_get_location, device_clear_location, and ios_set_location by platform and operation, so an agent can route correctly without opening the schema.

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 clear usage context: it is for testing location-aware apps and requires API 26+. It also warns about apps that check Location.isFromMockProvider, which is relevant for deciding whether this tool is appropriate for a test scenario. However, it does not explicitly mention alternatives like device_clear_location or ios_set_location, nor state when not to use it.

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

device_shellBInspect

Execute a shell command on an Android device and return output

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID)
commandYesShell command to execute on the device

TDQS

B3.3/5.0
Behavior2/5

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

Since no annotations are provided, the description carries the full burden of disclosing behavioral traits. It states that it executes a command and returns output, but it does not explain potential side effects (e.g., the command could perform destructive actions on the device), permission requirements, or error handling. For a command execution tool that can have arbitrary side effects, this is a significant gap. The description does not contradict any annotations (as none exist), but it is under-informed.

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 accurately and completely describes the tool's function. There is no unnecessary filler, and the key elements (execute, shell command, Android device, return output) are all present. This is an example of appropriate 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?

The tool is relatively simple with only two parametersamenities, and the schema provides complete coverage of those parameters. However, because the tool executes arbitrary shell commands, the description does not warn about the potential for destructive actions or require root privileges. Given the lack of annotations and output schema, the description could provide more context about the security implications and expected output format. It is adequate for a simple command executor but not fully complete for safe and correct usage.

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 describes both parameters adequately ('Device serial number (UDID)' and 'Shell command to execute on the device'). However, the description does not add additional meaning beyond the schema, such as the format of the command (e.g., if it should include shell escaping) or whether the command runs in a specific context (e.g., as root). The baseline 3 is appropriate as the schema does the heavy lifting and no extra semantics are needed.

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 'Execute a shell command on an Android device and return output', which clearly specifies the verb (execute), resource (shell command on an Android device), and the result (return output). While there is an 'ios_shell' sibling, the description does not explicitly differentiate from it, but the Android mention does so implicitly. The purpose is clear and specific.

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 its usage context (for Android devices) but does not provide explicit guidance on when to use this tool versus alternatives like 'ios_shell' or other device-specific commands. It does not mention any preconditions, such as the device being connected or the shell being available. The guidance is not misleading but is minimal beyond the obvious.

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

device_swipeAInspect

Swipe from (x1,y1) to (x2,y2) on a device screen. Coordinates are PHYSICAL pixels — same as the bounds in device_page_source (no scaling needed).Pass input="hid" to require the virtual touchscreen: the gesture then reaches the app as real kernel input and fails loudly instead of silently falling back to injected input. That strict path used to be device_uhid_swipe, which stays callable under its old name.

ParametersJSON Schema
NameRequiredDescriptionDefault
x1YesStart X coordinate
x2YesEnd X coordinate
y1YesStart Y coordinate
y2YesEnd Y coordinate
udidYesDevice serial number (UDID)
inputNoInput path. 'auto' (default) prefers the virtual touchscreen and falls back to injected input. 'hid' requires the virtual touchscreen and fails if the device does not provide one — use it when the gesture must be real kernel input or must fail loudly.
durationNoSwipe duration in ms (default: 500)

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations provided, the description carries the full behavioral burden and does so well. It discloses that coordinates are physical pixels needing no scaling, that 'auto' silently falls back to injected input, and that 'hid' requires real kernel input and fails loudly. These are meaningful behavioral traits beyond the schema.

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 three sentences with no fluff, front-loading the core action and then adding coordinate and input-mode details in a logical order. Every sentence contributes unique information.

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 fully described schema and the behavioral context about coordinate scaling and input modes, the description is largely complete for an action tool. It does not explain return values, but no output schema exists and this appears to be a fire-and-forget gesture operation, so the gap is minor.

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 the baseline is 3, but the description adds real semantic value: it explains the coordinate unit system and elaborates the behavior of the input enum beyond the schema text. This extra context helps the agent use parameters correctly.

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: swipe between coordinate points on a device screen. It clearly identifies coordinate semantics and even references the old device_uhid_swipe name, but it does not explicitly differentiate from sibling gesture tools like device_scroll or device_two_finger_swipe.

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 provides clear parameter-level guidance, explaining when to pass input="hid" and that the strict path used to be device_uhid_swipe. However, it does not state when to choose device_swipe over other gesture or scrolling tools, leaving tool-selection context implied rather than explicit.

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

device_tapAInspect

Tap at (x,y) coordinates on a device screen. Coordinates are in DEVICE TAP-COORD SPACE (the "Tap-coord space" dims printed in the device_screenshot footer; same space as device_page_source bounds). First call starts a device control session (~3s).

COORDINATE SOURCES — in priority order:

  1. PRIMARY: device_page_source bounds [L,T][R,B] (or the "Labeled elements" block bundled with device_screenshot) → tap center = ((L+R)/2, (T+B)/2). NO scaling. Pixel-exact.

  2. FALLBACK ONLY (element not in page_source — image-only widget / custom Canvas): visual estimate from the screenshot pixels, scaled with the formula below.

VISUAL → TAP COORDINATE FORMULA (Android): scale = device_width / rendered_chat_width tap_x = visual_x × scale tap_y = visual_y × scale where device_width is the "Tap-coord space" width from the device_screenshot footer and rendered_chat_width is the "Image" width from the same footer. Both axes share one scale (aspect preserved). The footer prints concrete values per device — never assume any constant.

Skipping the scale on a visual estimate is the #1 cause of taps landing in the wrong place — the agent sees a downscaled image but device_tap expects full-resolution tap-space coords.

Pass input="hid" to require the virtual touchscreen: the gesture then reaches the app as real kernel input and fails loudly instead of silently falling back to injected input. That strict path used to be device_uhid_tap, which stays callable under its old name.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesX coordinate in device tap-coord space (NOT visual screenshot pixels — apply scale = device_width / rendered_chat_width if you started from a visual estimate)
yYesY coordinate in device tap-coord space (NOT visual screenshot pixels — apply scale = device_width / rendered_chat_width if you started from a visual estimate)
udidYesDevice serial number (UDID)
inputNoInput path. 'auto' (default) prefers the virtual touchscreen and falls back to injected input. 'hid' requires the virtual touchscreen and fails if the device does not provide one — use it when the gesture must be real kernel input or must fail loudly.
holdMsNoHow long the contact stays down, in ms. Only applies with input="hid" (default 60ms).

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral disclosure burden. It covers first-call session startup (~3s), the coordinate-space scaling requirement, failure-mode differences between 'auto' and 'hid', and the legacy behavior. Minor deduction because it doesn't describe what happens on invalid coordinates or when session setup fails, but the critical operational behaviors are disclosed.

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

Conciseness4/5

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

The description is long but well-organized with clear headers, a priority list, and a concrete formula. Every section contributes actionable information, and the most failure-prone warning (skipping the scale) is emphasized. Slightly verbose in places, but the structure supports quick scanning.

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 having no output schema and no annotations, the description fully equips an agent to call this tool correctly. It explains coordinate spaces, how to derive coordinates from both primary and fallback sources, the scaling formula, and input path semantics. All parameters are effectively covered, and an agent can confidently perform a tap without additional lookups.

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 description coverage is 100%, so the baseline is 3. The description adds meaning by defining the DEVICE TAP-COORD SPACE, providing the scaling formula, and clarifying that 'auto' falls back to injected input while 'hid' fails loudly. This meaningfully supplements the schema for the two most error-prone parameters, x and y.

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 opens with a specific verb and resource: 'Tap at (x,y) coordinates on a device screen.' It clearly defines the coordinate space, distinguishes the primary source from the fallback, and names the legacy device_uhid_tap path, so an agent can differentiate it from related input tools without opening schemas.

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 when-to-use guidance: use device_page_source bounds as the primary source, use visual estimation only as a fallback, and use input='hid' when real kernel input is required. It explains the fallback chain, the exact scaling formula, and the relationship to device_uhid_tap, giving the agent clear alternatives and conditions.

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

device_tap_by_textAInspect

Find a UI element by text, content-description, or resource-id and tap it. NOT always usable — for elements without stable text/contentDesc/resourceId (image-only icons, custom Canvas widgets, dynamic/localized labels), use device_tap(x, y) with bounds from device_page_source instead. Both tools are first-class. When multiple nodes share the same text, this tool ranks candidates so an interactive widget (EditText, Button) wins over a passive label (TextView) — pass resourceId to pin a specific element. Returns after the tap is dispatched; an additional ~150ms focus-settle wait is included when the matched element is an EditText so a following device_type lands in the right field. CRITICAL: call this BEFORE device_type sequentially — do NOT issue both in parallel, or the type may race the focus change and write into the previously-focused field.

ParametersJSON Schema
NameRequiredDescriptionDefault
textNoVisible text of the element (matches text or content-desc)
udidYesDevice serial number (UDID)
maxScrollNoMax auto-scroll attempts before giving up (default: 3)
autoScrollNoIf not found on-screen, scroll to look for it before failing (default: true)
resourceIdNoResource ID (e.g. com.android.chrome:id/url_bar)
contentDescNoContent description / accessibility label
scrollDirectionNoAuto-scroll direction (default: down)

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 the full burden of behavioral disclosure. It reveals that the tool returns after the tap is dispatched, includes an extra ~150ms focus-settle wait when the target is an EditText, and warns about the critical race condition if called in parallel with device_type. It also exposes ranking behavior among matches, covering side effects and sequencing requirements.

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 dense but every sentence earns its place: it front-loads the core action, then gives a clear exclusion case with an alternative, then explains disambiguation and device_type sequencing. There is no repetition or filler, and the critical warning is placed at the end where it stands out.

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?

The description covers purpose, usage boundaries, selection behavior, timing, and parallelism pitfalls. However, it does not explicitly state what the tool returns on success/failure or what happens when no matching element is found after scrolling. Since there is no output schema, a brief mention of return semantics would make it fully complete for an agent to handle errors gracefully.

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 description coverage is 100%, so the baseline is 3ressive. The tool description adds meaning beyond the schema by explaining that the `text` parameter also matches content-desc, that `resourceId` pins a specific element, and that candidate ranking favors interactive widgets. This extra context helps an agent choose and combine parameters correctly.

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 states a specific verb and resource: 'Find a UI element by text, content-description, or resource-id and tap it.' It also distinguishes itself from siblings like device_tap and device_page_source by naming them explicitly and explaining the boundary, so an agent can pick the right tool without needing to inspect schemas.

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 gives explicit when-to-use and when-not-to-use guidance: when an element lacks stable identifiers (image-only, Canvas, dynamic labels), it directs the agent to use `device_tap(x, y)` with bounds from `device_page_source`. It also explains how to disambiguate multiple matches using resourceId and ranks interactive widgets over passive labels, giving clear selection criteria.

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

device_terminate_appAInspect

Force-stop an Android app by package name. Tries the control channel first, falls back to am force-stop, verifies with pidof, and surfaces diagnostic info if the app persists (e.g. Samsung FGS resurrection). Returns { stopped, wasRunning, transport, retryRecommended }.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID)
packageNameYesAndroid package name to force-stop (e.g. com.android.chrome)

TDQS

A4.1/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden and excels. It discloses the multi-step process (control channel, fallback to `am force-stop`, verification via `pidof`), handles edge cases (persistent apps like Samsung FGS resurrection), and specifies the exact return shape. This is far more transparent than typical tool descriptions, providing the agent with a clear mental model of 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?

The description is a single, dense sentence that front-loads the core action and then layers in fallback, verification, and return details. It is concise without being terse, though the string of clauses could be slightly easier to parse. Still, it earns its length by covering key behavioral aspects.

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?

The description covers the process, fallback, verification, error handling (persistent apps), and return value. It does not mention prerequisites like device connectivity or app installation, but these are likely implicit for a force-stop tool. The absence of an output schema is mitigated by explicitly describing the return object. Overall, it's nearly complete for an agent to use correctly, with minor gaps around environmental assumptions.

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 both parameters, so the schema already explains 'udid' and 'packageName' adequately. The description does not add additional meaning beyond what's in the schema, such as format requirements or interplay between parameters. Per the baseline rule for high schema coverage, a 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 verb ('Force-stop'), resource ('Android app by package name'), and specifies it's Android-specific. It distinguishes from siblings like device_clear_app_data or device_uninstall_app by focusing solely on force-stopping. The return object and fallback details further clarify its exact scope.

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 mention when to use this tool versus alternatives such as device_clear_app_data or device_uninstall_app. Usage is implied by the tool's name and purpose, but there is no guidance on when not to use it or which alternative might be preferred for specific scenarios. Given the narrow purpose, the lack of explicit routing is acceptable but not exemplary.

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

device_toggle_bluetoothAInspect

Enable or disable Bluetooth on an Android device.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID)
enableYestrue to enable Bluetooth, false to disable

TDQS

A3.6/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 the full burden of behavioral disclosure. It states the toggle effect but does not mention permissions, device state requirements, side effects, or the nature of the return value. For a mutating action, this is a notable gap.

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?

A single front-loaded sentence with no filler or redundancy. It communicates the core action and target resource efficiently.

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 two-parameter toggle tool, the description plus fully documented schema is nearly sufficient. It lacks behavioral context around side effects or prerequisites, but the simplicity of the operation lowers the bar for 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%: both udid and enable have clear descriptions in the schema. The tool description adds no additional parameter meaning beyond what the schema already provides, so the baseline score of 3 is appropriate.

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

Purpose5/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: 'Enable or disable Bluetooth on an Android device.' It clearly identifies the device platform and the radio being controlled, making it easy to distinguish from sibling tools like device_toggle_wifi.

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 its use for controlling Bluetooth on an Android device, but it does not explicitly state when to use this tool versus alternatives such as device_toggle_wifi or device_shell. There are no prerequisites or exclusions mentioned.

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

device_toggle_wifiAInspect

Enable or disable WiFi on an Android device.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID)
enableYestrue to enable WiFi, false to disable

TDQS

A3.5/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 the full burden of behavioral disclosure. The description states the action (enable/disable WiFi) but does not disclose side effects, such as whether toggling WiFi disconnects current connections, requires device unlock, or affects other device state. It also doesn't mention whether the operation is asynchronous or what happens if the device is offline. For a state-changing tool with no annotations, this is a significant gap.

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 action and resource. Every word earns its place, and there is no redundant or vague language. It is appropriately sized for a simple two-parameter tool.

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 two-parameter tool with 100% schema coverage, the description is mostly complete. However, the lack of behavioral context (side effects, prerequisites, return value) and the absence of annotations leave some gaps. An agent can call the tool correctly based on the schema and description, but it won't know what to expect after the call or whether any preconditions exist.

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 already documents both parameters (udid and enable) with clear descriptions. The description adds no additional parameter semantics beyond what the schema provides, but the baseline of 3 is appropriate because the schema does the heavy lifting. The description's mention of 'enable or disable' aligns with the boolean parameter, but adds no new detail.

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 'Enable or disable WiFi on an Android device' uses a specific verb (enable/disable) and resource (WiFi on an Android device), and clearly distinguishes it from the sibling device_toggle_bluetooth. An agent can immediately understand what this tool does without needing to inspect the schema.

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 context (toggle WiFi on a device) but does not explicitly state when to use this tool versus alternatives, nor does it mention any prerequisites or exclusions. There is no guidance about when not to use it, though the sibling list includes device_toggle_bluetooth, which is a related but distinct tool. The description is clear enough for basic selection but lacks explicit routing guidance.

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

device_two_finger_swipeAInspect

Two-finger swipe from (x1,y1) to (x2,y2) on an Android device — a two-finger scroll/pan. Both fingers travel the vector in parallel, offset perpendicular to it so one never runs through the other. Use where a one-finger swipe does the wrong thing, e.g. tilting a map or scrolling a view that pans with one finger. Coordinates are PHYSICAL pixels.Pass input="hid" to require the virtual touchscreen: the gesture then reaches the app as real kernel input and fails loudly instead of silently falling back to injected input. That strict path used to be device_uhid_two_finger_swipe, which stays callable under its old name.

ParametersJSON Schema
NameRequiredDescriptionDefault
x1YesStart X
x2YesEnd X
y1YesStart Y
y2YesEnd Y
gapNoPixels between the two contacts (default: 120)
udidYesDevice serial number (UDID)
inputNoInput path. 'auto' (default) prefers the virtual touchscreen and falls back to injected input. 'hid' requires the virtual touchscreen and fails if the device does not provide one — use it when the gesture must be real kernel input or must fail loudly.
durationNoGesture duration in ms (default: 400)

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations provided, the description carries the full behavioral burden, and it excels: it discloses the perpendicular finger offset geometry, PHYSICAL pixel units, the injected-input fallback behavior, and the loud-failure mode for input='hid'. This goes well beyond the structured schema and leaves the agent well-informed about runtime behavior.

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?

Every sentence earns its place: primary action, geometry detail, use case, coordinate units, strict input behavior, and legacy alias. The most decision-relevant information is front-loaded, and there is no filler or repetition.

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?

For a gesture tool with 8 parameters, a rich schema, and no output schema, this description is complete: it explains what the gesture does, how the fingers move, when to prefer it over a one-finger swipe, what input='hid' changes, and how to refer to the legacy tool. Nothing essential for selection or invocation is missing.

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 the baseline is 3. The description adds meaning beyond the schema by clarifying that coordinates are physical pixels and explaining how gap relates to the perpendicular finger offset. It also expands the input parameter's behavior beyond the enum text, though it does not walk through every parameter individually.

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?

States a specific action ('two-finger swipe') on a specific resource (Android device) with explicit coordinates. It also differentiates itself from one-finger swipe by giving concrete examples like tilting a map, so an agent can distinguish it from device_swipe and similar gesture tools.

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?

Gives explicit guidance on when to use this tool: when a one-finger swipe does the wrong thing, with examples. It also explains when to choose input='hid' versus the default behavior, and even mentions the old alias device_uhid_two_finger_swipe, removing ambiguity about legacy call patterns.

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

device_two_finger_tapAInspect

Two-finger tap at (x,y) on an Android device — zooms OUT one step in Maps and is the accessibility/secondary gesture in several apps. Both fingers land either side of the point and lift without moving. Coordinates are PHYSICAL pixels.Pass input="hid" to require the virtual touchscreen: the gesture then reaches the app as real kernel input and fails loudly instead of silently falling back to injected input. That strict path used to be device_uhid_two_finger_tap, which stays callable under its old name.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesTap centre X
yYesTap centre Y
gapNoPixels between the two contacts (default: 120)
udidYesDevice serial number (UDID)
inputNoInput path. 'auto' (default) prefers the virtual touchscreen and falls back to injected input. 'hid' requires the virtual touchscreen and fails if the device does not provide one — use it when the gesture must be real kernel input or must fail loudly.

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations, the description carries full responsibility and does so well: it explains physical-pixel coordinates, finger placement, no-movement lifting, fallback behavior, strict kernel-input mode, and the legacy alias. This significantly exceeds what the schema alone provides.

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 dense and front-loaded, with each clause serving a purpose. Minor formatting issues like 'PHYSICAL pixels.Pass' and a slightly run-on input-path sentence keep it from being perfect.

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 and no annotations, the description covers gesture mechanics, coordinate units, input modes, example use cases, and compatibility. It does not explicitly state the return value or error format, but that is not critical for a gesture 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%, so the baseline is 3. The description adds real value by clarifying that coordinates are physical pixels and explaining the auto/hid enum semantics, including 'fails loudly instead of silently falling back'. It does not add much beyond the schema for the 'gap' parameter.

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 states a precise action: 'Two-finger tap at (x,y) on an Android device'. It also gives concrete behavioral context (zooms OUT in Maps, accessibility/secondary gesture) that distinguishes it from related gestures like pinch or two-finger swipe.

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 clear context for when to use the gesture and explains the strict input='hid' path versus the default auto fallback. It does not explicitly contrast with sibling tools like device_pinch or device_two_finger_swipe, but the use cases are concrete enough.

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

device_typeAInspect

Type text into the focused field on Android. CRITICAL: call this AFTER device_tap / device_tap_by_text completes — do NOT issue the focusing tap and this type in parallel, or the type will race the focus change and land in the previously-focused field (observed on a banking-app login: username+password concatenated into username box). method="keys" (default): decompose ASCII to keycode events (DOWN/UP with shift) — most reliable; non-ASCII chars (CJK/emoji) auto-fall-back to IME injection for that segment. method="ime": IME injection only — full UTF-8 in one shot, but Samsung IMEs intercept ./@/_ as autocomplete/action shortcuts and may trigger system gestures. method="shell": shell input text — slowest, and Samsung IME drops @/./_. Optional clearFirst wipes the field first; pressKey sends a keycode after typing. All three methods inject — there is no kernel input path for text, and no tool that types a whole string as one. To get text in as real kernel input you compose the reports yourself with device_uhid_create plus device_uhid_input (or device_uhid_key_press per character); only worth it when the app filters injected text.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesText to type
udidYesDevice serial number (UDID)
methodNoInjection method: keys | ime | shell (default: keys — most reliable for ASCII; non-ASCII auto-falls-back to IME).
pressKeyNoKeycode to press AFTER typing (e.g. ENTER, TAB, SEARCH) — handles common "type then submit" flows in one call
clearFirstNoClear the field before typing — reads its current length from the UI and sends exactly that many backspaces (default: false)

TDQS

A5/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden and exceeds it. It discloses the race-condition failure mode with a real observed example, explains that all three methods are injection paths with no kernel input route, and warns about Samsung IME intercepting specific characters — behavior an agent could not infer from the schema alone.

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 long but every sentence earns its place. The critical race-condition warning is front-loaded, method distinctions are compactly organized, and the alternative kernel-input path is mentioned without unnecessary elaboration.

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?

For a complex Android input tool with no annotations and no output schema, this description covers prerequisites, sequencing, method trade-offs, failure modes, optional parameters, and alternatives. Nothing needed to select and call it correctly is missing.

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?

Although the schema already documents all parameters (100% coverage), the description adds substantial meaning: it explains the mechanics of method=keys (ASCII decomposition with shift), the non-ASCII fallback behavior, what clearFirst actually does (reads length and sends backspaces), and how pressKey combines type-then-submit flows. This goes well beyond the schema's one-line 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?

States a specific verb and resource: 'Type text into the focused field on Android.' It clearly distinguishes itself from related input tools by explaining that all methods inject text and that no tool types a whole string as real kernel input, directing agents to device_uhid_* for that use case.

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 sequencing guidance: call AFTER device_tap / device_tap_by_text completes and do NOT run the tap and type in parallel. It also gives concrete selection criteria for method=keys vs ime vs shell, including Samsung IME quirks, and points to device_uhid_create/input as the alternative when an app filters injected text.

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

device_uhid_createAInspect

Register a virtual HID device on an Android device via the device control channel. descriptor is base64-encoded HID report descriptor bytes. reportLen is the exact byte-length of every INPUT report for this id (used for validation). After CREATE, Android needs ~250ms before the device accepts INPUT — this delay is applied automatically.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesUHID device id (s32, unique per session)
nameYesHuman-readable device name (UTF-8)
udidYesDevice serial number (UDID)
vendorIdYesUSB vendor ID (signed s16)
productIdYesUSB product ID (signed s16)
reportLenYesExpected byte-length of each INPUT report
descriptorBase64YesHID report descriptor as base64

TDQS

A3.5/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 disclose behavioral traits. It mentions the automatic 250ms delay and the validation of reportLen, which is helpful, but it does not disclose mutation semantics (creation is a write operation), error behavior, return values, or any prerequisites. This is insufficient for a tool with no annotation safety profile.

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 with zero fluff. The purpose is front-loaded, key parameters are explained inline, and the important behavioral note (250ms delay) is included. Every word earns its place.

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?

The description covers the core purpose and a key timing detail, but it lacks lifecycle context (e.g., that the device must be destroyed later), prerequisites (e.g., device must be connected), or error conditions. For a creation tool with no output schema, this is a moderate gap that could mislead an agent about the full 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?

Schema coverage is 100%, so baseline is 3. The description adds clarity by explaining descriptor is base64-encoded HID report descriptor bytes and reportLen is the exact byte-length for validation, which enriches the schema's terse descriptions. It adds meaningful semantic value 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?

States a specific action (Register) and a clear resource (virtual HID device on an Android device) with the mechanism (device control channel). It is unambiguous about what the tool does, even without explicit sibling differentiation, and the mention of descriptor/reportLen ties directly to its purpose.

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 implies the tool is used before sending INPUT via the 250ms delay note, but it does not explicitly state when to use this tool versus alternatives (e.g., device_uhid_input, device_uhid_destroy). No exclusions or explicit conditions are provided, leaving the agent to infer the context.

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

device_uhid_destroyAInspect

Remove a virtual HID device registered via device_uhid_create.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesUHID device id to destroy
udidYesDevice serial number (UDID)

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description must carry the behavioral burden, and it does disclose the core destructive effect ('Remove') and that the device must have been registered via device_uhid_create. However, it does not mention irreversibility, behavior when the device does not exist, or any side effects beyond removal.

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?

A single, direct sentence with no filler. The action and resource are front-loaded, and every word contributes to understanding the tool's purpose.

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 two-parameter destroy operation with fully documented parameters, the description is adequate but minimal. It lacks details about error conditions, idempotency, and what happens if the supplied device is not found, which would be relevant for an agent invoking this tool autonomously.

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 already fully documents both required parameters, udid and id. The description adds no additional meaning about parameter semantics, which is acceptable given the baseline of 3 for high schema coverage.

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

Purpose5/5

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

The description clearly states a specific verb ('Remove') and resource ('virtual HID device'), and anchors it to the sibling tool device_uhid_create, making the tool's role obvious within a large family of uhid_* tools. It distinguishes itself from creation and input tools without ambiguity.

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 when to use the tool—after device_uhid_create has been used—but it does not explicitly state exclusions, prerequisites, or any alternative. The lifecycle pairing is useful context, but the agent is left to infer that this is the teardown counterpart.

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

device_uhid_gamepad_stateAInspect

Set gamepad state via UHID (id=3). On first call, CREATE is sent automatically. lx/ly/rx/ry are u16 LE stick axes (0-65535, center=32767); lt/rt are u16 LE triggers (0-32767, 0=released). dpad is a u8 hat (1=N,2=NE,3=E,4=SE,5=S,6=SW,7=W,8=NW,0=center). buttons is a u16 LE bitmask. The pad presents as a DualShock 4, so the bit order is that controller's, NOT the browser Gamepad API order: bit0=X/square, bit1=A/cross, bit2=B/circle, bit3=Y/triangle, bit4=L1, bit5=R1, bit6=L2, bit7=R2, bit8=share/select, bit9=options/start, bit10=L3, bit11=R3, bit12=PS/guide, bit13=touchpad. Note the face buttons are rotated: square is bit0 and cross is bit1. Bits 14-15 have no effect. device_gamepad_state is the higher-level twin — W3C standard button/axis arrays plus a selectable controller profile, with the bit packing done for you. Prefer it unless you specifically need to send this exact raw report.

ParametersJSON Schema
NameRequiredDescriptionDefault
ltNoLeft trigger (0-32767, default 0)
lxNoLeft stick X (default 32767 = center)
lyNoLeft stick Y (default 32767 = center)
rtNoRight trigger (0-32767, default 0)
rxNoRight stick X (default 32767 = center)
ryNoRight stick Y (default 32767 = center)
dpadNoD-pad hat value 0-8 (default 0 = center)
udidYesDevice serial number (UDID)
buttonsNoButton bitmask u16 (default 0)

TDQS

A4.9/5.0
Behavior5/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 the automatic CREATE on first call, the raw bit layout, the DualShock 4 emulation, the face-button rotation, and that bits 14-15 are ignored. This is exceptionally transparent for a raw-report tool.

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 dense and front-loaded with the core purpose and auto-CREATE behavior, then details format specifics and ends with sibling guidance. It is long but every sentence adds value for a complex raw HID report; slightly overlong but justified.

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?

For a low-level UHID tool with no output schema and no annotations, the description covers everything an agent needs: the auto-CREATE, all parameter encodings, defaults, bit order, and the sibling alternative. Nothing essential is missing.

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?

Even though schema coverage is 100%, the description adds crucial meaning: lx/ly/rx/ry are u16 LE with center 32767, lt/rt are u16 LE with 0=released, dpad hat mapping (1=N...0=center), and the exact button bitmask order. These details are absent from the schema, which only gives ranges and defaults.

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 states a specific action: 'Set gamepad state via UHID (id=3)' and notes automatic CREATE on first call. It clearly distinguishes from the sibling device_gamepad_state by describing it as the higher-level twin, so an agent can pick the right tool without opening schemas.

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 names the alternative device_gamepad_state and gives a decision rule: prefer it unless you need to send this exact raw report. This is textbook usage guidance with a clear when-to-use 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.

device_uhid_inputAInspect

Send a HID input report to a previously created UHID device (device_uhid_create). report is base64-encoded. Its byte-length must exactly match the reportLen declared at CREATE time. This is a generic raw-report primitive for any created UHID device (keyboard, mouse, gamepad) and is not text-aware. Prefer device_type to type a string; use this only when you need to compose the exact reports yourself.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesUHID device id (must match a prior device_uhid_create call)
udidYesDevice serial number (UDID)
reportBase64YesHID input report bytes as base64

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral burden. It discloses that the report is base64-encoded, its byte-length must exactly match reportLen from CREATE time, and it is a generic raw-report primitive that is not text-aware. It could add failure/return behavior, but the critical constraints are clearly surfaced.

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 about four sentences and front-loads the action and main constraint before the alternative. It is slightly repetitive with 'previously created' and the device_uhid_create reference, but it has no real filler.

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 3-parameter primitive with no output schema, the description covers the prerequisite, the key byte-length constraint, and the preferred alternative. It does not document response or error behavior, but that is a minor gap given the low complexity and absence of an 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?

Schema coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema by connecting reportBase64 to the exact byte-length requirement from CREATE and explaining that the tool is a raw primitive for composing reports, which clarifies how the parameters relate to each other.

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 states a specific verb ('Send') and resource ('HID input report to a previously created UHID device'), then clarifies it is a generic raw-report primitive for any UHID device and is not text-aware. This clearly distinguishes it from device_type and the higher-level UHID helpers.

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?

It explicitly says to prefer device_type for typing a string and to use this tool only when composing exact reports yourself, while also referencing device_uhid_create as a prerequisite. This gives the agent an explicit when-to-use/when-not-to-use decision.

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

device_uhid_key_pressAInspect

Send a key press/release via UHID keyboard (id=2). Uses the device control protocol's boot keyboard interface. On first call, CREATE is sent automatically. modifiers bitmask: bit0=LCtrl, bit1=LShift, bit2=LAlt, bit3=LMeta, bit4=RCtrl, bit5=RShift, bit6=RAlt, bit7=RMeta. keycode is the HID usage ID (0x04=a, 0x28=Enter, 0x29=Escape). Send keycode=0 with modifiers=0 to release. device_key is the higher-level twin: it accepts named keys (HOME, ENTER, ...) instead of raw usage IDs and falls back automatically when a key needs policy-level handling. Prefer device_key for normal automation; reach for this one only when injected key events are filtered.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID)
keycodeNoHID usage key code (default 0 = no key)
modifiersNoModifier bitmask (default 0)

TDQS

A4.8/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral burden. It goes beyond a simple action statement by disclosing automatic CREATE on first call, the boot keyboard interface, the modifier bitmask layout, and the release convention (keycode=0, modifiers=0). It could have also described return values or failure behavior, but what it includes is substantive and relevant.

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 dense but well-organized: purpose first, then protocol detail, then parameter semantics, then sibling differentiation. Every sentence adds operational information; nothing is filler or redundant with the schema.

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?

For a simple three-parameter tool with no output schema and no annotations, the description covers all necessary calling context: how to press, how to release, how to combine modifiers, and when to use this versus the alternative. Nothing critical is missing for an agent to invoke it correctly.

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 already 100%, but the description adds real semantic value: it enumerates each modifier bit's meaning, gives concrete HID usage examples (0x04=a, 0x28=Enter), and explains the release sentinel. This is far more than the schema's generic 'HID usage key code' and 'Modifier bitmask' 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 states a specific action ('Send a key press/release') on a specific resource ('UHID keyboard (id=2)') and immediately distinguishes itself from device_key, the higher-level twin. An agent can understand exactly what this tool does and how it differs from siblings.

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 names device_key as the preferred alternative, explains why ('accepts named keys'), and gives the precise condition for choosing this tool instead ('only when injected key events are filtered'). This is model usage guidance.

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

device_uhid_mouse_moveAInspect

Move the virtual mouse and/or click buttons on an Android device. Hardware mouse input via the device control protocol (HID mouse id=1). On first call, CREATE is sent automatically then a 250ms delay is applied. dx/dy are signed relative deltas (-127..127). buttons bitmask: bit0=left, bit1=right, bit2=middle.

ParametersJSON Schema
NameRequiredDescriptionDefault
dxYesRelative X delta (-127..127)
dyYesRelative Y delta (-127..127)
udidYesDevice serial number (UDID)
wheelNoVertical scroll wheel delta (default 0)
hWheelNoHorizontal scroll wheel delta (default 0)
buttonsNoButton bitmask (bit0=left, bit1=right, bit2=middle, default 0)

TDQS

A4/5.0
Behavior4/5

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

No annotations are supplied, but the description discloses key runtime behavior: automatic CREATE on first call with a 250ms delay, signed relative deltas, and button bitmask encoding. It doesn't cover return values or click release semantics, but it provides materially useful behavioral detail.

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?

Three sentences, front-loaded with the action, with protocol and timing details kept compactly. No filler, no repetition, every sentence earns its place.

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?

The auto-CREATE behavior, protocol identifier, and relative-coordinate/button semantics cover what an agent needs to invoke it correctly. Since wheel/hWheel are already fully documented in the schema, their absence from the description is not a significant gap; output details are also not critical for this fire-and-forget input 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 the schema already documents all six parameters and their ranges. The description's dx/dy and bitmask notes mostly restate schema content rather than adding new meaning.

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 opening sentence names the exact verb ('Move') and resource ('virtual mouse'), and the second identifies hardware HID mouse id=1, which distinguishes it from touch-based uhid siblings like device_uhid_tap or device_uhid_swipe.

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 clearly identifies the tool's mechanism (hardware mouse via HID), but it never explicitly says when to prefer this over the touch/uhid siblings or lists exclusions. The usage context is implied rather than stated as a decision rule.

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

device_uninstall_appBInspect

Uninstall an app from an Android device by package name.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID)
packageNameYesPackage name to uninstall (e.g. com.example.app)

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 carries the full burden. It simply restates the tool's name and function without disclosing that uninstalling permanently removes the app and its data, or that it may fail on system apps. For a destructive mutation, this lack of side-effect disclosure is a significant gap.

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?

A single sentence with no wasted words. The verb 'uninstall' is front-loaded, and all essential scope (Android device, package name) is included. This is an ideal level of conciseness for a simple operation.

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?

The tool is simple (2 parameters, no nested objects, no output schema), so the description is nearly sufficient for an agent to invoke it. However, it omits safety context (permanent data loss, irreversibility) and mentions no behavior on errors (e.g., app not found). Given no annotations and no output schema, a few more words about side effects would make it contextually 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 description coverage is 100%, so the schema already documents both udid and packageName clearly. The description's phrase 'by package name' merely echoes the schema's property description and adds no new meaning about format, validation, or relationships between parameters. Baseline 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 uses a specific verb ('uninstall'), a clear resource ('app'), and platform ('Android device'), with the method ('by package name'). This clearly distinguishes it from siblings like ios_uninstall_app, device_terminate_app, and device_clear_app_data. No ambiguity about what the tool does.

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 choose this tool over alternatives such as device_terminate_app, device_clear_app_data, or app_delete. It does not mention prerequisites like the app being installed or how it differs from app_delete. The only hint is 'by package name,' which implies a prior lookup but does not explicitly direct the agent.

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

device_wait_for_elementAInspect

Poll the UI until an element with the given text or resource-id appears, or timeout. Returns element coordinates in PHYSICAL pixels (ready for device_tap).

ParametersJSON Schema
NameRequiredDescriptionDefault
textNoVisible text or content-desc to wait for
udidYesDevice serial number (UDID)
timeoutNoMax wait time in ms (default: 10000)
intervalNoPoll interval in ms (default: 1000)
resourceIdNoResource ID to wait for (e.g. com.android.settings:id/switch_widget)

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It usefully reveals that the tool polls, can time out, and returns physical-pixel coordinates ready for tapping. However, it does not clarify what happens on timeout (error vs. null), how text/content-desc matching works, or behavior when both text and resourceId are supplied.

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 entire description is one tight, front-loaded sentence. It states the action, the condition, the termination behavior, and the output format without wasted words. The emphasis on PHYSICAL pixels is a valuable, concise detail.

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 there is no output schema and no annotations, the description covers the main behavior but leaves important operational details unspecified, such as timeout failure behavior and the exact structure of the returned coordinates. It is adequate for a simple polling tool but not fully complete for an agent that must handle failure cases.

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 parameters are already documented. The description adds value by grouping 'text or resource-id' as alternative matching criteria and noting that output coordinates are in physical pixels, but it does not provide additional per-parameter 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's function with a specific verb ('poll'), resource ('UI'), condition ('until an element with the given text or resource-id appears'), and termination behavior ('or timeout'). It also distinguishes itself from immediate-lookup siblings like device_find_element by emphasizing polling and yielding coordinates for device_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: wait for a UI element to appear, then use the returned coordinates with device_tap. However, it does not explicitly state when to prefer this over alternatives such as device_find_element or ios_wait_for_element, nor does it mention any exclusions or preconditions.

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

firebase_install_releaseAInspect

Download a build from Firebase and install it on a connected device in one step. The build is also added to the user's app library, so installing it on further devices afterwards needs only app_install. Use firebase_list_releases to pick a releaseId — "the latest build" is the first entry it returns.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice UDID to install on
appIdYesFirebase app id, from firebase_list_apps
releaseIdYesRelease id from firebase_list_releases
projectNumberYesFirebase project number, from firebase_list_apps

TDQS

A4.6/5.0
Behavior4/5

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

The description discloses a key side effect: the build is added to the user's app library, which changes the workflow for future installs. It also implies a multi-step action (download + install). However, with no annotations present, it does not mention authentication requirements, failure modes, or behavior when the build already exists on the device.

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?

Three sentences deliver the core action, side effect, and parameter sourcing without redundancy. The most important scoping information is front-loaded, and every sentence earns its place.

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 4-parameter tool with no output schema, the description covers the main function, side effects, and how to source parameters. It lacks explicit error/return behavior and device connection prerequisites, but these are often implicit for installation tools. Overall, it gives an agent enough to select and invoke the tool correctly.

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% and each parameter already has a one-line description. The tool description adds extra guidance for releaseId, explaining how to obtain it from firebase_list_releases and that the latest build is the first entry. It also clarifies that after this call, further installs only need app_install, which helps the agent understand parameter usage going forward.

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 states a specific action: download a build from Firebase and install it on a connected device in one step. It distinguishes itself from app_install by noting the build is added to the user's app library, and references firebase_list_releases for selecting a releaseId.

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?

It explicitly explains when to use this tool (first install of a Firebase build) and when to use app_install instead (subsequent devices). It also directs the agent to firebase_list_releases to pick a releaseId, and clarifies that the latest build is the first entry, giving actionable selection criteria.

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

firebase_list_appsAInspect

List the Android and iOS apps in the connected Firebase account. Returns app id, display name, platform, and the package name / bundle id for each, plus the project number needed by the other Firebase tools. Call this first when the user names an app rather than an app id.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral burden. It clearly indicates a listing/read operation and details the return content, including app id, display name, platform, package name/bundle id, and project number. It does not discuss auth, pagination, or failure modes, but these are less critical for a simple 0-parameter list 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?

Two sentences deliver all essential information without wasted words: the action, the scope, the returned fields, and the intended calling context. The most important usage guidance is placed at the end but remains highly compact.

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?

For a 0-parameter, no-output-schema tool, the description is complete: it names the resource scope, enumerates the return values, and explains when to call it. An agent has enough information to select and invoke this tool correctly.

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 parameter semantics are trivially satisfied. The description still adds context by stating what the tool returns, satisfying the baseline for 0-parameter tools.

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 states a specific verb and resource: 'List the Android and iOS apps in the connected Firebase account.' It also enumerates the returned fields, which clearly distinguishes this tool from generic app-listing siblings like device_list_apps or ios_list_apps.

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 gives an explicit usage rule: 'Call this first when the user names an app rather than an app id.' This is clear context for when to invoke the tool, though it does not explicitly name alternatives or state when not to use it.

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

firebase_list_releasesAInspect

List recent builds distributed for one Firebase app, newest first. Returns release id, version, build number, binary type, release date, and release notes. Releases marked installable:false cannot be put on a device — the reason is included. Use firebase_list_apps to get appId and projectNumber.

ParametersJSON Schema
NameRequiredDescriptionDefault
appIdYesFirebase app id, e.g. "1:1234567890:android:abc123"
limitNoHow many releases to return (1-100, default 25)
projectNumberYesFirebase project number, from firebase_list_apps

TDQS

A4.5/5.0
Behavior4/5

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

The description discloses return fields, ordering, and the unusual behavior that releases with installable:false cannot be installed and include the reason. With no annotations, this carries the burden well, though it doesn't explicitly confirm read-only behavior or error cases.

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 three succinct sentences: it states the purpose, lists return values, and flags an important caveat. No filler.

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?

With no output schema, the description enumerates all returned fields, covers the ordering, and addresses the installable:false edge case. It also points to firebase_list_apps for the required IDs. Nothing needed to call the tool correctly is missing.

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 description coverage is 100% – each parameter is documented. The description adds a useful hint to obtain appId and projectNumber via firebase_list_apps, which goes slightly beyond the schema's value descriptions. Limit is already self-explanatory in 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 uses a specific verb 'List', names the resource 'recent builds distributed for one Firebase app', states ordering 'newest first', and enumerates return fields. It is clearly distinct from the sibling firebase_install_release (which installs) and firebase_list_apps (which lists apps).

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 gives clear context: it is for listing builds and identifies a prerequisite sibling firebase_list_apps for obtaining appId/projectNumber. However, it does not explicitly state when to prefer this over firebase_install_release or when not to use it, so it stops short of a full exclusion.

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

flow_component_usageAInspect

List every test step that references a given component (fragment) via a live COMPONENT_REF. Backs the deletion guard: a component in use cannot be deleted. Returns the referencing recording id, display id, name, and step index. The component must be a fragment owned by the authenticated user.

ParametersJSON Schema
NameRequiredDescriptionDefault
componentIdYesComponent (fragment) recording ID to look up usage for

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses that it returns recording id, display id, name, and step index, and notes the ownership requirement (fragment owned by authenticated user). It also specifies 'live COMPONENT_REF', indicating only active references are counted. This is solid behavioral disclosure for a read-only query tool, though it doesn't mention pagination or error cases.

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?

Three sentences, front-loaded with the core purpose, followed by use-case context and return details. No redundant words. Each sentence contributes essential information, making it easy for an agent to quickly grasp the tool's function and constraints.

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 single-parameter lookup without output schema, the description covers the key aspects: what it does, what it returns, and a permission constraint. It could mention behavior when no references exist or if the component is not found, but those are minor gaps. Overall, it provides enough for correct invocation.

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% with componentId described as 'Component (fragment) recording ID to look up usage for'. The description adds meaningful context: it must be a fragment owned by the user, and it queries live references. This goes beyond the schema, clarifying the parameter's scope and constraints.

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 states a specific action: listing every test step referencing a component via live COMPONENT_REF. It clearly identifies the resource (test steps) and the object (component). It also distinguishes itself from sibling tools like flow_recording_insert_component or flow_recording_detach_component by focusing on usage queries rather than mutations.

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 mentions it backs the deletion guard, implying it should be used before deleting a component to check if it is in use. This gives clear context for when to invoke it, though it does not explicitly name alternatives or state when not to use it. The context is sufficient for an agent to understand its primary role.

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

flow_recording_actionAInspect

Perform and record one action step on the device. Performs the action and records it with automatic page source + element capture. Coordinates are in video / iOS-automation space — use flow_recording_start's windowSize as the reference.

Actions:

  • tap / doubleTap / longPress / swipe — gesture actions (require x,y; swipe also needs toX,toY)

  • sendKeys — type text into the focused field

  • keyPress — press an Android keycode (e.g. 3=HOME, 4=BACK)

  • wait — pause for waitMs milliseconds

  • pressButton — press a hardware button by name ('home', 'volumeUp', 'volumeDown', 'lock'). Performed live on the device during recording. Android maps to hardware keycodes; iOS invokes the native hardware-button command.

  • assert — record a UI assertion check (no device gesture). Identifies the target element at (x,y), then at replay time verifies the assertion condition. Assertion failures mark the step as FAILED and surface the mismatch in errorMessage. Makes the recording a real verifiable test. assertType 'visualMatch' is the exception: it takes no x/y and no expected, and at replay time compares the whole screen against the screenshot captured now.

  • scrollToElement — record a scroll-until-visible checkpoint (no device gesture). Binds the element at (x,y) now; at replay time it scrolls until that element is back on screen, searching downwards first and then upwards, and reports the element's live coordinates. Use it before acting on something whose position varies between runs (a row in a long list, a button below the fold). This FAILS the run if the element never comes into view, because the step exists to bring a target into view for the step that follows it. Note you do NOT need a separate step to resolve an element before acting on it — every element-bound action re-resolves its own target at replay; use scrollToElement only when the target is genuinely off screen, and assert/exists when its absence should fail the run.

  • appLaunch — launch an app mid-flow by appId (Android package name, iOS bundle id; optional appActivity on Android). Launches live during recording and relaunches the same app at replay time. Use it to switch apps or to return to the app under test after leaving it.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoX coordinate (tap/doubleTap/longPress/swipe start; assert & scrollToElement target element)
yNoY coordinate (tap/doubleTap/longPress/swipe start; assert & scrollToElement target element)
toXNoSwipe end X
toYNoSwipe end Y
textNoText to type (sendKeys)
appIdNoApp to launch for an appLaunch step: Android package name, iOS bundle id. Required when action=appLaunch.
actionYesAction type
waitMsNoWait duration ms (for wait action)
keyCodeNoAndroid keycode (keyPress, e.g. 3=HOME, 4=BACK)
keyNameNoHardware button name for pressButton (e.g. 'home', 'volumeUp', 'volumeDown', 'lock'). Required when action=pressButton.
expectedNoExpected value (required for textEquals and textContains assertions).
optionalNoMark this step as one whose target is EXPECTED to be absent sometimes — a cookie banner, a first-run tutorial, an occasional interstitial. When the element cannot be found at replay the step is SKIPPED instead of failing, and no gesture is dispatched at the recorded position. Leave it off for anything whose absence is a bug: a step that is NOT optional now FAILS the replay when its element is missing, which is what tells a real regression apart from a banner that simply did not appear this run.
attributeNoAttribute to read for text assertions. iOS: label, value, name. Android: text, content-desc, resource-id. Defaults to the platform primary text attribute when omitted.
assertTypeNoAssertion type (required when action=assert). exists/notExists check element presence; textEquals/textContains compare an attribute value; visualMatch compares the whole screen against the screenshot captured now (takes no x/y and no expected).
durationMsNoSwipe/longPress duration ms (default 300)
appActivityNoOptional Android activity to launch with appId. Ignored on iOS.
recordingIdYesRecording ID from flow_recording_start
visionFallbackNoLet a vision model settle this assertion when the accessibility tree cannot find the element. Off by default, and only honoured for assertType 'exists' and 'notExists'. Turn it on for UI the tree cannot describe — canvas/WebGL screens, game engines, image-only controls with their text baked into the bitmap — where 'a person can see it' is the only check available. Leave it off for ordinary native UI: an assertion's value is that it reports what is really there, and a model asked to find something tends to find it. Ignored for text assertions, which compare exact strings that OCR cannot supply reliably.

TDQS

A5/5.0
Behavior5/5

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

With no annotations, the description carries the full behavioral burden and meets it: actions execute live while recording, coordinates reference flow_recording_start's windowSize, assert failures mark the step FAILED and surface mismatches in errorMessage, scrollToElement searches down then up and fails if absent, and appLaunch relaunches at replay. It also clarifies replay-time re-resolution so agents do not insert redundant steps.

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 long, but the tool is a polymorphic 18-parameter dispatcher; each action is a short, self-contained entry with requirements and replay behavior. The overview and coordinate reference are front-loaded, and there is no filler or needless repetition of schema text.

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?

For an 18-parameter tool with 11 action variants and no output schema, the description covers invocation requirements, live vs replay behavior, failure semantics, and per-action parameter constraints. No critical call-time information appears to be missing; the only minor omission is an explicit statement of the return value, which is not essential for correct invocation.

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%, so the baseline is 3, but the description adds substantial value beyond the schema: it maps each action to the exact parameters it requires (swipe needs toX/toY, assert needs assertType, appLaunch needs appId), defines the coordinate space, explains the visualMatch exception, and clarifies the meaning of optional and visionFallback beyond their schema text.

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 opens with a specific verb+resource: 'Perform and record one action step on the device', and enumerates the 11 supported action types. It distinguishes this recorder from generic device_* gesture tools by emphasizing automatic page-source and element capture during recording.

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 gives explicit when-to-use and when-not-to-use guidance for the ambiguous actions: scrollToElement is 'use it before acting on something whose position varies', with the exclusion 'use scrollToElement only when the target is genuinely off screen'; appLaunch is for switching apps; optional is for expected absences; visionFallback is only honored for exists/notExists. These are concrete usage rules, not vague hints.

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

flow_recording_cancelAInspect

Cancel and discard an in-progress recording. All steps are lost — use flow_recording_save instead if you want to keep them.

ParametersJSON Schema
NameRequiredDescriptionDefault
recordingIdYesRecording ID from flow_recording_start

TDQS

A4.7/5.0
Behavior5/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 of behavioral disclosure. It explicitly warns that 'all steps are lost,' making the destructive and irreversible nature of the operation clear. This is exactly the kind of critical behavioral context an agent needs before invoking a cancellation 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?

Two tightly written sentences carry all necessary information. The destructive consequence is front-loaded, and the alternative tool reference is provided in the second sentence. There is no filler, redundancy, or unnecessary detail.

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?

For a single-parameter, no-output-schema cancellation operation, the description is fully sufficient. It explains the action, the destructive outcome, the condition for use, and the alternative. Nothing an agent needs to decide whether and how to call this tool is missing.

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%, and the parameter description already identifies recordingId as coming from flow_recording_start. The tool description adds the 'in-progress' qualifier, which reinforces the temporal constraint, but it does not substantially extend beyond the schema's documentation. This aligns with the baseline of 3 for high schema coverage.

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

Purpose5/5

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

The description uses a specific verb ('Cancel and discard') with a clear resource ('an in-progress recording') and states the consequence ('All steps are lost'). It also explicitly distinguishes itself from flow_recording_save, making the tool's purpose unambiguous relative to its sibling tools.

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 explicitly names the alternative tool (flow_recording_save) and the condition for using it ('if you want to keep them'). This gives clear when-to-use vs. when-not-to-use guidance with no reliance on inference.

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

flow_recording_delete_stepAInspect

Delete one step from an in-progress recording (before flow_recording_save). Removes a mis-recorded step — e.g. an assert that bound to the wrong element or a stray tap — without discarding and re-recording the whole flow. Remaining steps are renumbered; the returned step list reflects the new 1-based indices. Deleting the appLaunch step (index 1) is rejected. Use the stepIndex from a flow_recording_action / flow_recording_get response.

ParametersJSON Schema
NameRequiredDescriptionDefault
stepIndexYes1-based index of the step to delete
recordingIdYesRecording ID from flow_recording_start

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It discloses key behavioral traits: remaining steps are renumbered and the returned step list reflects new indices, and deleting the appLaunch step (index 1) is rejected. It also implies the operation is destructive (removes a step). This is strong but does not explicitly state irreversibility or any permission requirements, which are not critical here.

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

Conciseness5/5

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

The description is three sentences, front-loaded with the primary action, then use cases, then side effects and constraints. Every sentence earns its place with no fluff or repetition.

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?

Even without an output schema, the description explains what the agent receives (the returned step list with new indices) and covers the error case (appLaunch deletion rejected). It provides enough context for correct invocation, including the source of the stepIndex.

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 the baseline is 3. The description adds value by directing the agent to use stepIndex from a flow_recording_action or flow_recording_get response, and clarifies the 1-based renumbering behavior. This goes beyond the schema's terse parameter 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 states a specific action ('Delete one step from an in-progress recording') with a clear resource (a step within a recording) and context (before save). It distinguishes from siblings like flow_recording_replace_step and flow_recording_cancel by specifying its unique role of removing a mis-recorded step without restarting the flow.

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 clear when-to-use guidance: applies to in-progress recordings before save, and provides use cases (mis-recorded assert, stray tap). It also tells the agent where to obtain the stepIndex (from flow_recording_action or flow_recording_get). However, it does not explicitly contrast with flow_recording_replace_step, leaving a minor gap in alternative selection.

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

flow_recording_detach_componentAInspect

Detach (materialize) a component reference in a test into private, editable copied steps. This replaces the live COMPONENT_REF step with a deep copy of the component's current steps and drops the linkage — future edits to the component no longer propagate to this test. One level only: a component that itself references another component cannot be detached. The test must belong to the authenticated user.

ParametersJSON Schema
NameRequiredDescriptionDefault
stepIndexYes1-based index of the COMPONENT_REF step to detach
recordingIdYesTest recording ID containing the component reference

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses the core behavioral traits: replaces the live reference, deep-copies steps, drops linkage, and limits depth to one level. It also states the ownership prerequisite. It doesn't mention reversibility or error handling, but the essential side effects are well covered.

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

Conciseness5/5

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

Three focused sentences with no filler. The primary action and effect are front-loaded, constraints follow naturally, and every sentence contributes meaning.

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 mutation with no output schema, the description explains the transformation, the limitation, and the ownership requirement. It omits potential error conditions or return behavior, but an agent has enough to understand the action and its consequences. This is near-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.

Parameters3/5

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

Schema coverage is 100% (both parameters have descriptive text), so the description adds little beyond the schema. It does reinforce that stepIndex refers to a COMPONENT_REF step and that recordingId is the test ID, but no additional semantics or formatting details are provided.

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 states a precise action (detach/materialize a component reference), the target resource (a test's COMPONENT_REF step), and the outcome (replaces it with a deep copy and drops linkage). It clearly distinguishes from siblings like flow_recording_insert_component and flow_recording_replace_step by focusing on breaking propagation.

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 provides clear context on when to use the tool (when you want to make component steps private and editable without affecting the component) and key constraints (one-level only, ownership requirement). However, it doesn't explicitly contrast with alternatives or state when not to use it, though the purpose is fairly self-evident.

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

flow_recording_getAInspect

Get a specific flow recording with all its steps. Verifies the recording belongs to the authenticated user. Returns recording metadata and the ordered list of steps with action types, coordinates, element info, and timestamps.

ParametersJSON Schema
NameRequiredDescriptionDefault
recordingIdYesFlow recording ID (from flow_recording_list)

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations provided, the description carries the behavioral disclosure burden. It usefully discloses ownership verification ('Verifies the recording belongs to the authenticated user') and the exact return shape ('metadata and ordered list of steps with action types, coordinates, element info, and timestamps'). It does not mention potential errors or rate limits, but this is sufficient for a simple read operation.

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 with no filler. The core action and resource are front-loaded, followed by ownership verification and return details. Every sentence adds value.

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?

For a simple single-parameter read tool with no output schema or annotations, the description fully covers what an agent needs: the action, the target, the ownership constraint, and the returned data. Nothing essential is missing.

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% and the single parameter recordingId is already described in the schema as coming from flow_recording_list. The description adds no new parameter-level meaning beyond identifying the recording, so the baseline score of 3 is appropriate.

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

Purpose5/5

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

The description states a specific verb ('Get'), a specific resource ('a specific flow recording'), and clearly distinguishes this from sibling tools like flow_recording_list by emphasizing 'all its steps'. It also names the key return contents, making the tool's purpose unambiguous.

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 makes it clear this is for retrieving one specific recording by ID, which implies use over flow_recording_list when full step details are needed. However, it does not explicitly state when not to use it or name alternatives, so the agent must infer the selection from context.

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

flow_recording_insert_componentAInspect

Insert a LIVE reference to a reusable component (fragment) into a saved test, after a given step. The component is not copied — it stays linked, so editing the component later updates every test that references it. The reference is expanded to concrete steps at replay time. Optional paramBindings substitute {{name}} placeholders in the component steps. Both the test and the component must belong to the authenticated user.

ParametersJSON Schema
NameRequiredDescriptionDefault
snippetIdYesComponent (fragment) recording ID to reference
recordingIdYesTarget test recording ID to insert the component into
paramBindingsNoOptional {{name}} → value substitutions applied to the component steps
afterStepIndexYes1-based index of the step to insert after (0 to insert at the start)

TDQS

A4.5/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 behavioral disclosure burden. It explains live-reference semantics, that edits propagate to referencing tests, that expansion happens at replay time, how paramBindings substitute placeholders, and the authenticated-user requirement. This is unusually transparent for a mutating 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?

The description is four sentences, each earning its place: it states the operation, clarifies the no-copy behavior, explains replay expansion, and covers paramBindings and ownership. Information is front-loaded with no filler.

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?

For a non-annotated mutation tool with no output schema, the description covers what the tool does, when to use it, key behavioral consequences, parameter behavior, and a prerequisite. Nothing necessary for a correct call is missing.

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

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 already documents all four parameters. The description adds useful context for paramBindings and the insertion position but doesn't materially extend the per-parameter meaning beyond the schema. Baseline 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 names a specific operation: inserting a LIVE reference to a reusable component into a saved test after a given step. It clearly distinguishes the tool from copy/paste behavior and from related flow_recording siblings by emphasizing that the component is not copied but linked.

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 gives clear context: use this when you want a reusable component reference that stays linked and expands at replay time. It notes the ownership prerequisite but does not explicitly name alternative tools or state when this tool should NOT be used.

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

flow_recording_listAInspect

List flow recordings belonging to the authenticated user. Returns recording metadata including name, platform, device, step count, and timestamps.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidNoFilter by device UDID
limitNoMax results to return (default: 50)
offsetNoPagination offset (default: 0)
platformNoFilter by platform
searchQueryNoSearch recordings by name

TDQS

A4/5.0
Behavior3/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. The verb 'List' implies a read-only operationaine, and the statement 'Returns recording metadata including name, platform, device, step count, and timestamps' discloses output details. Yet it does not explicitly mention absence of side effects, ordering, or error behavior, and it relies on the schema to document pagination. This is adequate but not rich.

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

Conciseness5/5

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

The description is two sentences with no filler. The first sentence front-loads the primary action and scope, the second lists return fields. Every word contributes to understanding the tool's function, making it highly concise and well-structured.

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 list tool, the description covers the essential context: what it lists (flow recordings), the user scope, and the return metadata fields. The lack of an output schema and annotations is offset by the description's clarity, though it omits details like default ordering or whether the list is paginated beyond limit/offset (which are in the schema). This is complete enough for an agent to call it correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so all five parameters (udid, limit, offset, platform, searchQuery) are already documented with descriptions and an enum. The tool description does not add parameter-specific semantics beyond the schema. Baseline 3 is appropriate when the schema carries the parameter details.

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 states a specific verb and resource: 'List flow recordings belonging to the authenticated user.' It explicitly names the return content (metadata including name, platform, device, step count, timestamps), which distinguishes it from sibling tools like flow_recording_get (single recording) or flow_recording_start (creates a recording).

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 clear context for when to use the tool: to list the authenticated user's flow recordings. However, it does not name alternatives or explicitly state when not to use it, such as when a more detailed view is needed (e.g., flow_recording_get). The context is clear but lacks exclusion guidance.

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

flow_recording_replace_stepAInspect

Replace one step of an in-progress recording (before flow_recording_save) with a freshly-captured action, without changing its position. Performs the action live on the device — same as flow_recording_action — then overwrites the step at stepIndex instead of appending. Use this to fix a mis-recorded step (wrong element bound, wrong action) in place rather than deleting + re-recording + reordering. Replacing the appLaunch step (index 1) is rejected. Accepts the same action params as flow_recording_action.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoX coordinate (tap/doubleTap/longPress/swipe start; assert & scrollToElement target element)
yNoY coordinate (tap/doubleTap/longPress/swipe start; assert & scrollToElement target element)
toXNoSwipe end X
toYNoSwipe end Y
textNoText to type (sendKeys)
appIdNoApp to launch for an appLaunch step: Android package name, iOS bundle id. Required when action=appLaunch.
actionYesAction type
waitMsNoWait duration ms (for wait action)
keyCodeNoAndroid keycode (keyPress, e.g. 3=HOME, 4=BACK)
keyNameNoHardware button name for pressButton (e.g. 'home', 'volumeUp', 'volumeDown', 'lock'). Required when action=pressButton.
expectedNoExpected value (required for textEquals and textContains assertions).
optionalNoMark this step as one whose target is EXPECTED to be absent sometimes — a cookie banner, a first-run tutorial, an occasional interstitial. When the element cannot be found at replay the step is SKIPPED instead of failing, and no gesture is dispatched at the recorded position. Leave it off for anything whose absence is a bug: a step that is NOT optional now FAILS the replay when its element is missing, which is what tells a real regression apart from a banner that simply did not appear this run.
attributeNoAttribute to read for text assertions. iOS: label, value, name. Android: text, content-desc, resource-id. Defaults to the platform primary text attribute when omitted.
stepIndexYes1-based index of the step to replace
assertTypeNoAssertion type (required when action=assert). exists/notExists check element presence; textEquals/textContains compare an attribute value; visualMatch compares the whole screen against the screenshot captured now (takes no x/y and no expected).
durationMsNoSwipe/longPress duration ms (default 300)
appActivityNoOptional Android activity to launch with appId. Ignored on iOS.
recordingIdYesRecording ID from flow_recording_start
visionFallbackNoLet a vision model settle this assertion when the accessibility tree cannot find the element. Off by default, and only honoured for assertType 'exists' and 'notExists'. Turn it on for UI the tree cannot describe — canvas/WebGL screens, game engines, image-only controls with their text baked into the bitmap — where 'a person can see it' is the only check available. Leave it off for ordinary native UI: an assertion's value is that it reports what is really there, and a model asked to find something tends to find it. Ignored for text assertions, which compare exact strings that OCR cannot supply reliably.

TDQS

A4.4/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 behavioral disclosure burden. It discloses that the tool 'Performs the action live on the device' and 'overwrites the step at stepIndex instead of appending,' which reveals it is a live execution and a mutating operation. It also discloses the rejection condition for the appLaunch step. It could further clarify irreversibility or side effects, but the core behavior is adequately exposed.

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 compact (two sentences plus a final reference clause) and front-loaded with the core purpose. Every sentence earns its place: it states what it does, the alternative it replaces, a key constraint, and a pointer to a sibling tool for parameter details. No redundant or filler wording.

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's complexity (19 parameters, no output schema, no annotations), the description covers the essential operational context: when it applies (in-progress before save), how it behaves (live action, overwrites in place), a critical constraint (appLaunch rejection), and a reference to sibling tool for action params. It does not describe return values, but no output schema exists, and the absence is not a critical gap for invocation.

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 parameter descriptions in the schema already carry the main semantic weight. The description adds the note 'Accepts the same action params as flow_recording_action,' which is a useful cross-reference, and the appLaunch rejection constraint is additional context. However, it does not add new meaning for the individual parameters beyond what the schema already provides.

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 states a specific verb ('Replace'), a specific resource ('one step of an in-progress recording (before flow_recording_save)'), and the key semantics of preserving position. It also explicitly differentiates from appending (flow_recording_action) and from the delete + re-record + reorder workflow, making it easy for an agent to distinguish from related siblings.

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

Usage Guidelines5/5

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

The description explicitly states when to use this tool: 'Use this to fix a mis-recorded step (wrong element bound, wrong action) in place rather than deleting + re-recording + reordering.' It also notes a critical constraint: 'Replacing the appLaunch step (index 1) is rejected.' This gives clear context and an exclusion, leaving no ambiguity about when to choose this tool.

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

flow_recording_replayAInspect

Replay a flow recording on a device. Executes each recorded step in order using element locators with coordinate fallback. Returns a full result summary with per-step pass/fail status. Validation failures are automatically skipped so the replay never blocks.

ParametersJSON Schema
NameRequiredDescriptionDefault
platformNoDevice platform — auto-detected from recording if omitted
timeoutMsNoMax replay duration in ms (default: 300000 = 5 min)
targetUdidYesUDID of the device to replay on
recordingIdYesFlow recording ID to replay (from flow_recording_list)
validateElementsNoUse recorded element locators to find targets before acting (default: true; failures auto-skipped)

TDQS

A4.2/5.0
Behavior4/5

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

The description discloses key behavioral traits beyond the schema: steps execute in order, locators are used with coordinate fallback, validation failures are auto-skipped so replay never blocks, and a full result summary with per-step pass/fail is returned. With no annotations provided, this is strong behavioral disclosure for a replay 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?

Three sentences with no redundancy. The core action, execution mechanism, return value, and non-blocking behavior are all covered efficiently. Front-loaded with the primary verb and resource.

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 replay tool with no output schema, the description covers the execution model, return summary, and failure handling. It does not detail the exact structure of the result summary or mention cancellation/abort options, but the essential information for invoking it correctly is present.

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 already documents all five parameters. The description adds context for validateElements (failures auto-skipped) and mentions recordingId comes from flow_recording_list, but it does not add significant meaning beyond the schema for the other parameters. Baseline 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 replays a flow recording on a device, executes recorded steps in order using element locators with coordinate fallback, and returns a per-step pass/fail summary. This distinguishes it from related siblings like flow_replay_start, flow_recording_list, and flow_replay_summary by focusing on the replay execution itself.

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 implies usage context: replay a previously recorded flow on a device, with recordingId sourced from flow_recording_list. It does not explicitly state when to prefer this over flow_replay_start or ios_actions_replay, but the clear scope and reference to flow_recording_list provide adequate context for an agent to select it.

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

flow_recording_replaysAInspect

List all replay runs of a saved recording — the run history. Returns one row per replay with id, status, totals, started/completed timestamps, and computed durationMs. Useful for trend analysis (pass rate over time) and finding the most recent failure to drill into. Filtered to the authenticated user.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax replays to return (default 25, newest first)
recordingIdYesFlow recording ID (from flow_recording_list)

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the behavioral transparency burden. It discloses the row granularity, the returned fields (id, status, totals, timestamps, durationMs), and the authenticated-user filter. It does not discuss failure modes or side-effect guarantees, but 'List' strongly implies a read-only operation.

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

Conciseness5/5

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

The description is three sentences with no filler. The main action, output shape, and use cases are all front-loaded, and every sentence contributes useful information.

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 two-parameter listing tool with no output schema, the description is largely complete: it describes what is returned, why it is useful, and that results are scoped to the authenticated user. It could go slightly further by clarifying how this relates to replay summary/status siblings, but nothing essential for calling it is missing.

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 input schema already documents recordingId and limit, including the default and ordering. The description adds little parameter-level meaning beyond referring to 'a saved recording,' so the baseline score of 3 is appropriate.

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

Purpose5/5

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

The description opens with a clear verb and resource: 'List all replay runs of a saved recording — the run history.' It also enumerates the concrete output fields, making the tool's purpose unambiguous and distinguishing it from singular replay actions like flow_replay_status or flow_recording_replay.

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 gives explicit use cases: 'trend analysis (pass rate over time)' and 'finding the most recent failure to drill into.' It does not name alternatives or exclusion criteria, but the context is clear enough for an agent to decide when this historical listing tool is appropriate.

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

flow_recording_revertAInspect

Revert a test recording to a stored version snapshot: its steps and meta (name/category/tags) are restored from that version. A snapshot is written on every mutating save, keeping the last 10 versions. The recording must belong to the authenticated user; an unknown recording or version reports not-found.

ParametersJSON Schema
NameRequiredDescriptionDefault
versionYesSnapshot version number to restore
recordingIdYesRecording ID to revert

TDQS

A3.6/5.0
Behavior4/5

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

With no annotations provided, the description carries the full behavioral burden and does substantial work: it discloses that the operation is mutating, what gets restored, that snapshots are kept for the last 10 mutating saves, and that unknown recordings/versions return not-found. It stops short of explicitly stating whether the revert itself creates a new snapshot or whether the pre-revert state remains recoverable, but the snapshot policy implies recoverability.

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?

Three dense sentences, each adding distinct value: the core operation, the snapshot retention policy, and ownership/error behavior. The main action is front-loaded and there is no filler.

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

Completeness4/5

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

For a two-parameter mutating tool with no output schema and no annotations, the description covers the operation, restoration scope, retention, authentication, and error behavior. The main residual gap is ambiguity about whether the revert creates a new snapshot and whether the prior state is recoverable, which is minor but prevents a perfect score.

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 baseline of 3 applies. The schema already describes recordingId and version clearly, and the description adds useful context about the last 10 versions and authentication, but it does not add significant meaning beyond the schema for either parameter.

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 names a specific verb and resource: reverting a test recording to a stored version snapshot, and explicitly states what is restored (steps and meta). It does not explicitly contrast itself with sibling flow_recording_* tools, but 'revert' and 'restored from version' make the operation distinct enough from save/get/delete-step operations.

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 given about when to choose this tool over alternatives such as flow_recording_save or flow_recording_delete_step. The description covers mechanics, retention, ownership, and error behavior, but it never states the decision context or when not to use it.

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

flow_recording_saveAInspect

Save a completed recording to the database. Waits for any pending background captures (page source + screenshots) to finish before persisting.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoOptional new name (overrides the name set at start)
recordingIdYesRecording ID from flow_recording_start

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral burden. It discloses a non-obvious behavior: the save blocks until pending page-source and screenshot captures finish before persisting. This is valuable context beyond the schema. It does not cover idempotency or return values, but the core synchronization behavior is clearly stated.

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 tight sentences with no filler. The main action is front-loaded, and the important waiting behavior is added in the second sentence. Every word contributes to the agent's understanding.

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?

This is a simple two-parameter save tool with no output schema, and the description covers the essential purpose and the main non-obvious timing behavior. It could add what happens if the recording is not yet complete or whether saving is irreversible, but these are not critical gaps for an agent to invoke it correctly.

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 baseline is 3. The schema already explains that recordingId comes from flow_recording_start and that name optionally overrides the original. The description adds no additional parameter-level detail, which is acceptable given the schema 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?

States a specific verb ('Save'), a specific resource ('a completed recording'), and the destination ('the database'). It clearly distinguishes this from sibling tools like flow_recording_start and flow_recording_cancel. An agent can tell what it is for without opening the schema.

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 phrase 'completed recording' implies the tool is used after recording has finished, and the waiting behavior suggests it should be called after background captures are pending. However, it does not explicitly name alternatives or state when not to use it, leaving the agent to infer the lifecycle context.

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

flow_recording_startAInspect

Start recording a new scenario on a device. Automatically captures the initial app state and adds an appLaunch step. Returns a recordingId — pass it to flow_recording_action for each step, then flow_recording_save when done.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName for the recording
udidYesDevice UDID to record on
categoryNoRecording category (default: test)
platformNoPlatform — auto-detected from connected devices if omitted

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the burden of disclosing side effects. It transparently states that it starts a recording, automatically captures the initial app state, adds an appLaunch step, and returns a recordingId. It could go further by mentioning cancellation or behavior if a recording is already active, but the essential stateful consequences are disclosed.

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

Conciseness5/5

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

Two tight sentences convey purpose, automatic behavior, return value, and the follow-up workflow. Every clause contributes information, and the most important action 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?

The description tells the agent what the tool does, what it returns, and how to continue the workflow using flow_recording_action and flow_recording_save. Since there is no output schema, explicitly naming the recordingId return value is sufficient for correct invocation.

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 already documents all four parameters. The description adds no parameter-specific detail beyond the return value and the downstream workflow, so it stays at the baseline for high schema 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 uses a specific verb and resource: 'Start recording a new scenario on a device.' It also adds defining behavior—automatically capturing the initial app state and adding an appLaunch step—and names the returned recordingId. This clearly distinguishes it from flow_recording_action, flow_recording_save, and the other flow_recording_* siblings.

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 clear usage workflow: call this to start, pass the recordingId to flow_recording_action for each step, then call flow_recording_save when done. It does not explicitly mention when to use flow_recording_cancel, but the primary selection guidance against the main siblings is present and useful.

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

flow_recording_wrap_in_conditionAInspect

Make a RANGE of already-recorded steps conditional: they run at replay only when a check on screen passes.

Record the steps normally FIRST, then wrap them. That is the order conditionals are actually discovered — you do not know a promo banner is intermittent until you have already recorded dismissing it. The wrapped steps are MOVED into the branch, so a step never exists twice, and the remaining steps are renumbered.

The condition is evaluated against the element at (x,y), which must be on screen NOW so its locators can be recorded — the same binding every other element-bound action uses.

Use it for anything that appears only sometimes: a cookie banner, a first-run tutorial, an occasional interstitial, a rating prompt.

NOTE: at replay a condition that cannot be decided is treated as FALSE (the else branch runs). Set timeoutMs to the realistic worst-case render time of the thing you are checking for — too small a budget judges a slow element absent, runs the wrong branch, and the run still reports success.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesX of the element the CONDITION checks — not the element the wrapped steps act on.
yYesY of the element the condition checks.
checkYesWhat to check. exists/notExists test presence; textEquals/textContains compare an attribute. visualMatch is deliberately unavailable here — it is fail-safe by design, so as a branch selector it would silently always take the same branch.
branchNoWhich branch the wrapped steps become. Default 'then' — run them when the check passes.
expectedNoExpected value. Required for textEquals and textContains.
attributeNoAttribute to read for text checks. iOS: label, value, name. Android: text, content-desc, resource-id.
timeoutMsNoHow long to wait for the check to become true before deciding it is false. Default 5000.
recordingIdYesRecording ID from flow_recording_start
toStepIndexYesLast step to wrap (1-based, inclusive).
fromStepIndexYesFirst step to wrap (1-based). Step 1 is the appLaunch that seeds the start state and cannot be wrapped.

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 behavioral burden, and it does so thoroughly. It discloses that wrapped steps are moved into the branch, never duplicated, and remaining steps are renumbered; that an undecided condition is treated as false at replay; and that a too-small timeout can silently run the wrong branch while reporting success.

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 long but dense and front-loaded: scope, ordering constraint, locator binding, use cases, and failure semantics each get focused treatment. Every paragraph adds information an agent needs, and there is no filler or repetition of schema content.

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

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, 10 parameters, and no annotations or output schema, the description covers the essential behavioral context: recording order, state changes to the step list, branch semantics, the on-screen locator requirement, and timeout consequences. The schema handles parameter syntax, so nothing critical is missing for an agent to invoke the tool correctly.

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 description coverage is 100%, so the baseline is 3. The description adds meaningful semantics beyond the schema by explaining that x/y refer to the element the condition checks and must be on screen now, and that timeoutMs should be set to the realistic worst-case render time. It does not need to restate every parameter because the schema already documents them.

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 opening sentence conveys a specific action: making a range of already-recorded steps conditional on a screen check at replay. It clearly identifies the resource (recorded steps) and the behavior (wrap in condition), and it is easily distinguished from the many other flow_recording_* siblings.

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 gives explicit when-to-use guidance: record first, then wrap; use for intermittent UI elements such as cookie banners, tutorials, and interstitials. It also states the on-screen requirement for the condition element. It does not name an alternative tool for when-not conditions, but the context is strong enough to guide an agent.

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

flow_replay_abortAInspect

Abort an in-flight replay started via flow_replay_start or flow_recording_replay. Forces the replay to a terminal 'aborted' state instead of leaving it wedged in status:"running" forever — use this when a replay stops making progress (e.g. after a device/control-connection error) rather than polling flow_replay_status indefinitely. A per-step watchdog (90s) and an overall watchdog (15min) also force termination automatically, so this tool is for cancelling sooner than that, or cancelling a replay you no longer need. No-op if the replay has already reached a terminal state. Note: because a single in-flight device call has no way to be interrupted mid-flight, flow_replay_status may take a few seconds (bounded by the current step's own timeout) to reflect 'aborted' after this call returns.

ParametersJSON Schema
NameRequiredDescriptionDefault
replayIdYesReplay ID returned by flow_replay_start or flow_recording_replay

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 carries the full burden and does so thoroughly: it discloses the forced terminal 'aborted' state, the no-op for terminal replays, the watchdog timeouts, and the latency before flow_replay_status reflects the aborted state due to uninterruptible in-flight device calls. This is exceptional behavioral disclosure.

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 moderately long at five sentences, but every sentence contributes value: purpose, use case, watchdog context, no-op edge case, and status-lag caveat. It is front-loaded with purpose and usage, and the detail is justified for a tool with subtle behavioral side effects.

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?

For a single-parameter, mutation-style tool with no annotations and no output schema, the description covers invocation source, side effects, timing, alternatives, and edge cases. An agent has everything needed to call it correctly and interpret the outcome.

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?

The schema already fully documents replayId as 'Replay ID returned by flow_replay_start or flow_recording_replay' with 100% coverage, so the description adds no new parameter semantics. It reinforces the ID origin but provides no additional format or type details 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 opens with a specific verb+object ('Abort an in-flight replay') and names the exact originating tools (flow_replay_start, flow_recording_replay). It clearly differentiates from flow_replay_status by targeting the terminal 'aborted' state rather than polling indefinitely.

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 explicitly states when to use it: when a replay stops making progress (e.g., after a device/control-connection error) rather than polling flow_replay_status indefinitely. It also explains it is for cancelling sooner than the built-in watchdogs or cancelling a replay no longer needed, and documents the no-op behavior for already-terminal replays.

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

flow_replay_startAInspect

Kick off a flow replay in the background. Returns a replayId immediately — pass it to flow_replay_status to poll progress. Use this instead of flow_recording_replay when you want to monitor live or do other work while the replay runs. Validation failures are auto-skipped (MCP has no interactive input).

ParametersJSON Schema
NameRequiredDescriptionDefault
platformNoDevice platform — auto-detected from recording if omitted
targetUdidYesUDID of the device to replay on
recordingIdYesFlow recording ID to replay (from flow_recording_list)
resetAppDataNoWipe the recorded app's data (Android `pm clear`) BEFORE replay so it starts from a clean first-run state. Use this for recordings of enrollment / first-run / logged-out flows (e.g. create-passcode) that will NOT reproduce against an already-enrolled or logged-in app. Destructive — erases the app's local data on the target device. Android only; default false.
validateElementsNoUse recorded element locators to find targets before acting (default: true)
visualCheckEnabledNoOpt in to AI Visual Review: capture per-step baselines and run the end-of-replay visual-analysis phase. Slower; default false.

TDQS

A4.6/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 that the tool runs in the background, returns immediately with a replayId, auto-skips validation failures, and that resetAppData is destructive and erases app data. This is strong behavioral disclosure for a mutation tool, though it doesn't detail failure modes or what happens if the replay cannot start.

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?

Three sentences with no filler. The core behavior and return value are front-loaded, the sibling alternative is named, and the validation-failure caveat is a single clause. Every sentence earns its place.

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 background-start tool with no output schema, the description covers the key things an agent needs: what it returns, how to poll, when to prefer it, and the destructive resetAppData caveat. It doesn't describe error conditions or how to abort, but those are covered by sibling tools (flow_replay_abort) and the description is otherwise complete for correct invocation.

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 the baseline is 3. The description adds meaningful context beyond the schema: it explains the purpose of resetAppData (clean first-run state for enrollment/first-run flows), notes it is destructive and Android-only, and clarifies that platform is auto-detected if omitted. This goes beyond the schema's field 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 kicks off a flow replay in the background, returns a replayId immediately, and explicitly distinguishes it from flow_recording_replay. The verb 'kick off' plus the resource 'flow replay' and the immediate-return behavior make the purpose unambiguous.

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 explicitly says to use this instead of flow_recording_replay when you want to monitor live or do other work while the replay runs, and tells the agent to pass the returned replayId to flow_replay_status for polling. It also notes validation failures are auto-skipped because MCP has no interactive input, which is a clear when-to-use/when-not-to-use signal.

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

flow_replay_statusAInspect

Poll the status of an in-progress or recently completed replay started via flow_replay_start. Returns current step index, completed step pass/fail, and overall status. Verifies the replay belongs to the authenticated user.

ParametersJSON Schema
NameRequiredDescriptionDefault
replayIdYesReplay ID returned by flow_replay_start

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations provided, the description must carry behavioral disclosure. It does mention the auth verification ('Verifies the replay belongs to the authenticated user') and describes the output fields, which is helpful. But it does not explicitly state that the operation is read-only, nor does it cover error handling, rate limits, or what happens if the replay ID is invalid or not found.

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 three concise sentences with zero filler. The primary purpose and usage context are front-loaded, and every sentence adds value.

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

Completeness4/5

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

For a single-parameter, read-only status polling tool with no output schema and no annotations, the description is fairly complete. It explains what the tool returns, mentions the ownership verification, and ties it to the start tool. Minor gaps include error handling and response format details, but these are not critical for a simple poll.

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% (replayId is fully described as 'Replay ID returned by flow_replay_start'). The tool description adds no additional meaning beyond the schema, so the baseline of 3 applies.

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 states a specific verb (poll), a specific resource (replay status), and the exact data returned (step index, pass/fail, overall status). It also references the initiating tool flow_replay_start, clearly distinguishing it from sibling tools like flow_replay_abort, flow_replay_step, and flow_replay_summary.

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?

It provides context that the tool is for in-progress or recently completed replays, implying it should be used after starting a replay. However, it does not explicitly mention alternatives or when not to use it, such as using flow_replay_summary for a final summary, leaving some ambiguity.

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

flow_replay_stepAInspect

Full data for ONE step of a replay: action type, recorded element + locators + coordinates, recorded page-source XML, live page-source XML captured during replay, locator actually used, scores, error message. Heavy — call selectively for steps you want to diagnose.

ParametersJSON Schema
NameRequiredDescriptionDefault
replayIdYesReplay ID
stepIndexYesStep index (1-based, from flow_replay_summary)

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses the heavy payload size and the fact that data is captured from replay, implying a read-only retrieval. It doesn't explicitly state side effects or auth requirements, but the wording strongly suggests a safe diagnostic lookup.

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 one dense sentence that front-loads the core purpose, lists the return contents compactly, and ends with a clear usage warning. No wasted words, and the structure makes the heavy nature immediately obvious.

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 and no annotations, the description does well to enumerate the return categories and warn about the heavy call. It gives enough detail for an agent to decide when to use it, though it could be more explicit about read-only semantics or potential errors.

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% and both parameters are already documented as 'Replay ID' and '1-based step index from flow_replay_summary'. The description adds no further parameter-specific meaning, which is acceptable given the high schema 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 states the tool returns full data for one step of a replay and enumerates the specific payload categories (action type, locators, XML, scores, error message). This clearly distinguishes it from related tools like flow_replay_summary and flow_replay_step_screenshot, and the 'ONE step' scoping makes its purpose unambiguous.

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 advises calling selectively for steps you want to diagnose and flags the tool as heavy, giving clear context for when to use it. It doesn't explicitly name alternative sibling tools for other cases, but the intended usage is unambiguous.

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

flow_replay_step_screenshotAInspect

Return the screenshot for one step of a replay as an image you can view directly. kind="recorded" is what was captured during recording; "live" is what the device showed during replay; "diff" is the visual diff overlay. Use selectively — not every step needs visual inspection.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindYesWhich image to load
replayIdYesReplay ID
stepIndexYesStep index (1-based)

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It explains the meaning of each screenshot kind: 'recorded' (captured during recording), 'live' (what the device showed during replay), and 'diff' (visual diff overlay). It also discloses that the output is a directly viewable image. It does not mention error behavior or side effects, but for a read-only image fetch this is adequate.

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?

Three sentences, zero fluff. The action is front-loaded, the kind options are clearly enumerated, and the usage caution is appended without redundancy. Every sentence earns its place.

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 read-only tool with 3 required parameters and no output schema, the description covers purpose, parameter semantics, and usage. It could mention output format details or error cases, but 'as an image you can view directly' is sufficient for an agent to invoke and interpret the result. The absence of annotations is mitigated by the explicit kind explanations.

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 the baseline is 3. The description adds meaningful semantic value for the 'kind' parameter by explaining exactly what 'recorded', 'live', and 'diff' mean, going beyond the schema's terse 'Which image to load'. It also reinforces the 1-based stepIndex, though that is already in 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 action: 'Return the screenshot for one step of a replay as an image you can view directly.' It specifies the resource (replay step screenshot) and the outcome (a viewable image). This distinguishes it from siblings like flow_replay_step, which likely returns step data rather than screenshots. The three kind values are also explained succinctly.

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 offers a usage hint: 'Use selectively — not every step needs visual inspection.' This implies when to use the tool but does not explicitly name alternatives or state conditions for choosing another tool (e.g., flow_replay_step for text details). The guidance is present but thin.

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

flow_replay_summaryAInspect

Compact replay summary for analysis. Returns replay metadata (totals, passed/failed/skipped counts) + one row per step with status, action, duration, diff scores, and a short error excerpt. Always small — call this first when analyzing a replay, then use flow_replay_step for full per-step detail.

ParametersJSON Schema
NameRequiredDescriptionDefault
replayIdYesReplay ID

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations provided, the description carries full behavioral burden. It adds valuable context: 'Always small' signals response size expectations, 'call this first' establishes workflow ordering, and listing the returned content clarifies the tool is a read-only summary. While it does not explicitly state side effects (none are expected for a summary), the description provides enough behavioral context beyond a bare listing.

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 with zero filler. The core purpose ('Compact replay summary') is front-loaded, followed by a tight list of return contents and a clear usage directive. Every word 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?

Although there is no output schema, the description sufficiently enumerates the response shape (metadata counts + per-step rows with named fields) and gives workflow context. An agent has everything needed to invoke the tool correctly and interpret its result for a summary.

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%, and the single required parameter replayId is already described as 'Replay ID.' The description adds no additional semantics beyond what the schema provides, so the baseline score of 3 is appropriate.

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

Purpose5/5

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

The description states a specific verb ('returns') and resource ('replay summary'), then enumerates the exact fields (totals, passed/failed/skipped counts, per-step status, action, duration, diff scores, error excerpt). This clearly distinguishes it from sibling flow_replay_step, and an agent can identify the tool's purpose at a glance.

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 instructs to 'call this first when analyzing a replay' and names the alternative 'use flow_replay_step for full per-step detail.' This is unambiguous guidance on when to use this tool versus its closest sibling, with no inference required.

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

get_visual_reviewAInspect

Get full detail for one AI Visual Review candidate (from list_visual_reviews), including the actual baseline, live, and diff images as images you can view directly. Use this to inspect a candidate and form your own verdict, then call resolve_visual_review with your decision.

ParametersJSON Schema
NameRequiredDescriptionDefault
review_idYesReview id from list_visual_reviews

TDQS

A4.4/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 that it returns 'actual baseline, live, and diff images as images you can view directly', which is useful behavioral detail. It does not explicitly state read-only, but 'inspect' and 'view' imply no side effects. It doesn't mention other potential details like metadata, but for a detail-retrieval tool this is adequate.

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 with zero redundancy. The first sentence states the purpose and what is returned, the second gives usage guidance. Information is front-loaded and every phrase earns its place.

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 detail tool with no output schema, the description explains the key outputs (images) and the workflow (call resolve afterwards). It does not enumerate all possible fields (e.g., status, metadata), but 'full detail' implies more than images. Still, given the clarity of its role in the pipeline, it is reasonably 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 description coverage is 100% with the parameter review_id described as 'Review id from list_visual_reviews'. The description repeats this source, adding no new semantic value. Baseline 3 is appropriate since the schema already documents the parameter fully.

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

Purpose5/5

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

Clear verb and resource: 'Get full detail for one AI Visual Review candidate'. It explicitly distinguishes from list_visual_reviews by specifying 'from list_visual_reviews' and from resolve_visual_review by noting the follow-up action. An agent can immediately identify its role in the workflow.

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

Usage Guidelines5/5

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

Explicitly states when to use it: 'Use this to inspect a candidate and form your own verdict, then call resolve_visual_review with your decision.' This directs the agent to the correct alternative (resolve_visual_review) and indicates this tool is for inspection before resolution.

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

ios_accessibility_auditAInspect

Run an accessibility audit on the CURRENT screen of an iOS device — Apple's own XCTest audit engine (the same one Xcode's "Audit for Accessibility" button runs), so findings match what Apple reports. Audits whatever is in the foreground right now, so navigate to the screen you care about FIRST (ios_tap_by_label / ios_navigate_url), then call this. Reports contrast failures, tap targets under 44×44pt, missing/unhelpful labels, elements the accessibility engine cannot see, Dynamic Type and clipped-text problems, and wrong traits. Each issue carries the offending element's label, type and screen-point rect — the rect centre is directly tappable with ios_tap. Pass auditTypes to narrow the run (much faster on dense screens). TIMING: the audit sees the screen as it is at that instant — running it immediately after a launch or navigation, while the UI is still animating in, under-reports (measured on device: 4 issues mid-animation vs 5 once settled). Let the screen settle first. Requires iOS 17+ (errors on older) and an active iOS automation session (auto-starts if needed).

ParametersJSON Schema
NameRequiredDescriptionDefault
rectNoNarrow the result to a region in screen POINTS, skipping the label lookup. Takes precedence over `element`. A finding is kept when its centre falls inside this rect.
udidYesiOS device UDID
elementNoNarrow the result to one element: its accessibility label, resolved on device the same way ios_tap_by_label resolves it. the platform audit engine can only audit a whole app, so this filters the findings to those inside that element's bounds — it cannot surface anything the full-screen audit did not already report. Errors if the label matches nothing, rather than silently returning the whole screen.
auditTypeNoConvenience alias for a single-entry auditTypes, e.g. "contrast".
auditTypesNoAudit types to run; omit for all of them. "contrast" = Text/background contrast below the WCAG threshold; "elementDetection" = Elements the accessibility engine cannot detect; "hitRegion" = Tap targets smaller than the 44×44pt minimum; "sufficientElementDescription" = Controls with a missing or unhelpful label; "dynamicType" = Text that does not scale with Dynamic Type; "textClipped" = Text clipped at larger content sizes; "trait" = Wrong or missing accessibility traits.

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations provided, the description carries the full behavioral burden and delivers: it discloses the snapshot-at-instant timing behavior with measured evidence (4 issues mid-animation vs 5 once settled), the platform engine limitation (can only audit a whole app, so element filtering cannot surface new findings), the version failure mode, and session auto-start. Every significant behavioral trait an agent needs to interpret results is disclosed.

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?

Long but dense — every sentence carries non-redundant information, organized with clear signposts (TIMING:, Requires) and front-loaded with purpose and prerequisites before behavioral caveats. No filler, no restatement of the schema's parameter descriptions.

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?

Complete for its complexity: no output schema exists, but the description specifies what each issue carries (label, type, screen-point rect) and how to act on it; no annotations exist, but behavior, preconditions, failure modes, and version requirements are all covered. An agent can decide when to call it, what to pass, and what to expect in response.

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% and the schema itself is unusually detailed (rect precedence and centre-rule, element resolution and failure mode, per-enum expansion of audit types). The description still adds value beyond the schema: the performance hint that auditTypes narrows the run and is 'much faster on dense screens', plus the actionable link that a finding's rect centre is directly tappable with ios_tap.

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 names a specific verb and resource — 'Run an accessibility audit on the CURRENT screen of an iOS device' — and identifies the exact engine (Apple's XCTest audit engine, same as Xcode's 'Audit for Accessibility'). The platform scoping ('iOS device') and the enumerated finding types (contrast, tap targets under 44×44pt, missing labels, traits) clearly differentiate it from the android_accessibility_audit sibling.

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 sequences the workflow: 'navigate to the screen you care about FIRST (ios_tap_by_label / ios_navigate_url), then call this', and gives an explicit when-not condition — running right after launch or navigation under-reports while the UI animates ('Let the screen settle first'). It also states preconditions and failure modes: iOS 17+ (errors on older) and an active iOS automation session (auto-starts if needed).

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

ios_actions_recording_readAInspect

Read a stored recording's entries in order. Each entry carries the channel it crossed (cdp or ws-rpc), whether it was a command or an event, the method, its payload, outcome and duration in ms, plus t_ms — milliseconds since the recording started, which is what makes the gaps between actions readable. Page through with limit/offset; narrow with channel or kind.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesRecording id from ios_actions_record_stop or ios_actions_recordings
kindNoOnly commands, or only events
limitNoEntries to return (default 500, max 5000)
offsetNoEntries to skip
channelNoOnly this channel

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations provided, the description carries full responsibility. It discloses entry fields, the meaning of t_ms for time gaps, and ordering. However, it does not specify the default sort beyond 'in order', the exact return shape, or error behavior, making it adequate but skeletal.

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?

Three sentences, front-loaded with the core action, then field content, then pagination/filtering guidance. Every sentence earns its place with zero filler.

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 5-parameter read tool with no output schema, the prose covers the result format (fields per entry), pagination, and filtering. It omits edge cases like invalid ids or empty recordings, but id provenance is covered in the schema, so the description is largely 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 description coverage is 100%, so the baseline is 3. The description reinforces limit/offset and channel/kind usage, but adds no schema-independent meaning beyond that reinforcement.

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 ('Read') and resource ('stored recording's entries'), and clarifies ordering behavior ('in order'). It clearly separates this from the recording/stopping/replay siblings through the resource focus, though it does not explicitly name an alternative.

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

Usage Guidelines4/5

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

It gives explicit directions for pagination and filtering: 'Page through with limit/offset; narrow with channel or kind.' This tells the agent exactly how to constrain results. It stops short of naming a sibling alternative for when this tool should not be used, so not a 5.

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

ios_actions_recordingsAInspect

List stored action recordings, newest first — id, device, label, when it ran and what it captured. Filter by device with udid.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidNoOnly recordings for this device
limitNoHow many to return (default 50, max 500)

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description carries the behavioral disclosure burden. It does disclose the sort order and return fields, which is useful. However, it does not mention pagination, potential empty results, or any side effects, though this is a read-only list operation so the risk is lower.

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, information-dense sentence that leads with the core verb and resource, then lists ordering, output fields, and the filter in a natural reading order. Every element contributes meaning.

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 list operation with two optional parameters and no output schema, the description covers the key information: what it lists, the order, the fields returned, and the available filter. It does not mention how pagination via `limit` works, but that is already in the schema. Complete enough for an agent to invoke correctly.

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?

The input schema already documents both parameters (udid and limit) with 100% coverage. The description mentions the `udid` filter but does not add new detail beyond the schema. Since schema coverage is high, a baseline score of 3 is appropriate.

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

Purpose5/5

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

The description uses a specific verb ('List') and resource ('stored action recordings'), and adds concrete details about the result order and fields ('newest first — id, device, label, when it ran and what it captured'). This distinguishes it from related recording tools like ios_actions_record_start or ios_actions_recording_read.

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 clearly states the tool's purpose and the optional filter for device using `udid`, providing clear context. It does not explicitly mention alternatives or when not to use it, but the context is sufficient for an agent to infer the primary use case.

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

ios_actions_record_startAInspect

Start recording every Web Inspector / CDP command and event for a device — what was sent, what came back, and how long each took. Spans all Safari tool calls until ios_safari_record_stop, across the one-shot sessions they each open. A DIAGNOSTIC trace, not a replayable script: CDP payloads carry session-scoped node and object ids that are meaningless in a later session, so use flow recording (which captures selectors) when you want playback. Payloads over 2000 chars are truncated (a screenshot command alone returns megabytes of base64) and the trace stops appending after 50,000 entries.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID
labelNoShort name to find this recording by later.

TDQS

A4.4/5.0
Behavior5/5

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

With no annotations, the description shoulders the behavioral burden and does it thoroughly: it reveals that the trace is diagnostic rather than replayable, that payloads over 2000 chars are truncated, and that appending stops after 50,000 entries. It also explains why CDP payloads carry session-scoped ids and why a screenshot alone returns megabytes of base64. This is exemplary behavioral disclosure for a recording 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?

The description is about 70 words in four sentences, with the main action and scope first, followed by the diagnostic caveat and limits. Every sentence contributes a distinct fact: what is recorded, scope, why not replayable, and hard limits. It is dense but not bloated.

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?

The description covers the recording's lifecycle: what is captured, how long it runs, the stop condition, and hard limits. Gaps are minor: it doesn't state what the start call returns (e.g., a recording ID), and the stop-tool reference appears to be a typo ('ios_safari_record_stop' vs. the actual sibling 'ios_actions_record_stop'). Still, for a start-recording tool it is largely 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?

The schema already documents both parameters with 100% coverage, and the description adds little about udid or label beyond the schema's own text ('Short name to find this recording by later'). The description's detail is about trace behavior, not parameter meaning. Baseline 3 is appropriate given the schema carries the full load.

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 opens with a specific verb and resource: 'Start recording every Web Inspector / CDP command and event for a device — what was sent, what came back, and how long each took.' It also distinguishes itself from replayable scripts by saying 'use flow recording (which captures selectors) when you want playback,' which separates it from replay-related siblings. The only wrinkle is naming the stop tool as 'ios_safari_record_stop' when the sibling list shows 'ios_actions_record_stop,' but the core purpose is unambiguous.

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

Usage Guidelines4/5

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

It provides an explicit alternative: 'use flow recording (which captures selectors) when you want playback,' so an agent knows when not to choose this. It also defines the scope ('Spans all Safari tool calls until ... stop') and characterizes the result as a diagnostic trace. However, it references 'ios_safari_record_stop' as the terminator while the actual sibling is 'ios_actions_record_stop,' which is a minor but real guidance error.

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

ios_actions_record_statusBInspect

Report whether an action recording is running for a device, and what it has captured so far, without stopping it.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations, the description carries the behavioral transparency burden. It does disclose a key non-destructive trait ('without stopping it'), which is useful context. However, it does not mention side effects, error conditions (e.g., what happens if no recording is active), or the exact nature of the reported captured data, leaving gaps.

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?

A single, front-loaded sentence that conveys the purpose, the captured-content scope, and the non-destructive behavior with zero redundancy. Every word earns its place.

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 one-parameter tool with no output schema and no annotations, the description is mostly sufficient. However, it leaves out any detail about the response format or error behavior (e.g., when no recording exists), and it does not redirect to related tools, so it is not fully 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% for the single 'udid' parameter, which is described as 'iOS device UDID' in the schema. The description adds no additional semantic meaning beyond what the schema provides, so the baseline score of 3 applies.

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

Purpose4/5

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

The description clearly states a specific verb ('Report') and resource ('action recording status' plus captured content), and explicitly notes it does not stop the recordinghopper. This distinguishes it from the start/stop siblings, though it does not explicitly differentiate from 'ios_actions_recording_read', which could overlap.

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?

There is no guidance on when to use this tool versus alternatives such as ios_actions_record_start/stop or ios_actions_recording_read. The description implies a status-check use case but does not state prerequisites or conditions for selecting this tool over others.

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

ios_actions_record_stopBInspect

Stop the action recording for a device and return its id and what it captured — commands, events and errors across both channels.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID

TDQS

B3.4/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 the full burden of behavioral disclosure. It states the core side effect (stopping) and the returned data, but does not mention whether an active recording must exist, whether the recording is persisted for later reads, or what happens if no recording is in progress.

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?

One dense sentence with no filler, front-loading the action before describing the return value. The em-dash aside adds useful output detail without becoming bloated.

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?

With a single well-documented parameter and no output schema, the description does state the return payload (id, commands, events, errors), which is helpful. However, it omits lifecycle context such as needing a prior ios_actions_record_start call and error/edge-case behavior, so it is not fully 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?

The only parameter, udid, is already fully described in the schema as 'iOS device UDID'. The description adds no additional meaning beyond saying 'a device', so it stays at the baseline for 100% schema description 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?

Clearly states a specific action ('Stop'), a specific resource ('action recording for a device'), and the expected output ('its id and what it captured'). The 'action recording' qualifier distinguishes it from generic ios_record_stop and device_record_stop siblings, so an agent can select it correctly.

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 verb 'Stop' and the phrase 'action recording' imply this is the termination step after ios_actions_record_start, but the description never states that prerequisite explicitly. It also does not point to alternatives such as ios_actions_record_status or ios_actions_recording_read, so usage context is only implicit.

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

ios_actions_replayAInspect

Replay a stored recording against a device: each step's element is re-resolved from its recorded locators, then the recorded action is performed again. Reports per step which locator worked, whether it RECOVERED (the recorded one failed and an alternate matched — that step's locator needs attention before it fails outright), whether the element's accessible name drifted, and any state that changed since recording (a button now disabled, an element now hidden). Web steps only: native steps and steps recorded by coordinates come back unsupported rather than being replayed blind onto whatever now occupies that point.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID to replay against
recordingIdYesRecording id from ios_actions_record_stop or ios_actions_recordings
stopOnFailureNoStop at the first failed step. Default false — the second failure usually explains the first.

TDQS

A4.9/5.0
Behavior5/5

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

The description discloses several behavioral traits beyond the schema: per-step reporting of which locator worked, RECOVERED status, accessible name drift detection, state-change detection (button disabled, element hidden), and the unsupported handling for native/coordinate steps. It also explains the default stopOnFailure behavior ('the second failure usually explains the first'), which adds context to the parameter.

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, information-dense paragraph that front-loads the core action and then details the reporting behavior. Every sentence adds meaningful information: what happens, what is reported, and what is excluded. No filler or repetition of schema content.

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

Completeness5/5

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

For a replay tool with 3 parameters, 100% schema coverage, and no output schema, the description is complete. It explains the input source (recordingId), the execution model (re-resolving locators), the output semantics (per-step reports), and the limitations (web-only, coordinate steps unsupported). An agent has everything needed to decide when to call it and what to expect.

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 the schema already documents all three parameters. The description adds value by explaining the stopOnFailure default rationale ('the second failure usually explains the first') and by clarifying that recordingId comes from ios_actions_record_stop or ios_actions_recordings. It doesn't add syntax details for udid, but the schema already covers that.

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 states a specific verb ('Replay') and resource ('a stored recording against a device'), and explains the mechanism (re-resolving locators, performing the recorded action again). It clearly distinguishes itself from recording tools (ios_actions_record_start/stop) and from flow_recording_replay by focusing on per-step locator recovery and state drift reporting.

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 explicitly states when to use this tool (to replay a stored recording) and what to expect. It also provides an exclusion: 'Web steps only: native steps and steps recorded by coordinates come back unsupported rather than being replayed blind.' This tells the agent when NOT to expect full functionality and what alternative behavior to anticipate.

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

ios_active_appAInspect

Get the currently active (foreground) app on an iOS device. Returns bundleId, name, and pid. Requires an active iOS automation session.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral burden. It discloses the return payload (bundleId, name, pid) and the session requirement, and the verb 'Get' reasonably implies a read-only operation. It stops short of describing error behavior when no session exists, but for a simple query tool this is adequate.

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 two tight sentences: the first states the tool's purpose, and the second states the output and precondition. Every sentence earns its place with no filler.

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

Completeness4/5

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

For a one-parameter query tool without an output schema, the description covers the target, the return fields, and the key prerequisite. It lacks only minor context such as failure behavior and how to establish the active session, but nothing essential is missing.

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?

The single parameter udid is already fully described in the schema as 'iOS device UDID', so schema coverage is 100%. The description adds no further parameter context, which is acceptable but not value-adding beyond what the schema provides.

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 uses a specific verb ('Get') and resource ('currently active (foreground) app on an iOS device'), and further specifies the return fields. This clearly distinguishes it from the many sibling tools that deal with app lists, launch times, or performance.

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 gives a clear precondition—an active iOS automation session—but does not name alternatives or explain when to prefer this tool over similar ones like device_current_app or ios_list_apps. The use case is implied by the purpose rather than explicitly contrasted with siblings.

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

ios_alert_respondAInspect

Answer the alert currently on screen: accept it, dismiss it, or press a specific button by label. Use ios_alert_status first to read the available buttons — 'accept' and 'dismiss' press the alert's default controls, which is wrong for a prompt whose buttons are not a clean accept/dismiss pair (for example 'Allow Once' / 'While Using the App' / “Don’t Allow”), and button is how you answer those. text is typed into the alert's first text field before the button is pressed, for prompts that ask for input. Requires an active iOS automation session.

ParametersJSON Schema
NameRequiredDescriptionDefault
textNoType this into the alert's text field before pressing.
udidYesiOS device UDID
actionNoPress the alert's default accept or dismiss control. Default 'accept'.
buttonNoPress this button label instead of the default control, e.g. "Allow Once".

TDQS

A4.3/5.0
Behavior3/5

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

With no annotations available, the description carries the full burden of behavioral disclosure. It does add useful context by clarifying that 'accept' and 'dismiss' press default controls and may be wrong for non-clean button pairs, and that 'text' is typed before pressing. However, it does not disclose behaviors such as error handling when no alert exists, what happens if the specified button label is not found, or the return format. This is a moderate level of transparency.

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 three sentences long and front-loads the core purpose. The example of alarm buttons adds clarity without excessive verbosity. Every sentence contributes to understanding or usage, though it could be slightly more concise without losing essential 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?

The description is well-suited for the tool's complexity. It mentions the prerequisite of an active iOS automation session)Skip, and provides guidance on when to use each parameter. It does not describe the return value, but no output schema exists and the outcome is likely self-evident (alert answered). Minor gaps like error handling are not critical for this tool type.

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 the baseline is 3. The description adds meaningful semantics beyond the schema by explaining the relationship between 'action' and 'button', and by clarifying that 'text' is entered before button press. This enriches the agent's understanding of how the parameters interact, going beyond the raw 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?

The description clearly states the tool's purpose with a specific verb ('Answer the alert currently on screen') and enumerates the three supported actions: accept, dismiss, or press a specific button by label. It differentiates itself from related tools like ios_alert_status by referencing it explicitly and explaining the distinction between default controls and button labels.

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: always use ios_alert_status first to read available buttons, use 'accept'/'dismiss' only for clean accept/dismiss pairs, and use 'button' for prompts like 'Allow Once'/'While Using the App'/'Don't Allow'. It also explains when 'text' should be supplied, leaving no ambiguity about when to use this tool versus alternatives.

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

ios_alert_statusAInspect

Check whether a system or app alert is currently blocking the iOS UI, and read its text and button labels in one call. An alert covers the screen and swallows taps aimed at whatever is behind it, so this is worth checking before trusting a tap that "succeeded". Absence is a normal answer, not an error: returns {"present": false} when nothing is open. Requires an active iOS automation session.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the full behavioral disclosure burden. It explains the alert's screen-covering, tap-swallowing behavior, and that the tool returns a normal false result when no alert is present. It does not mention permission requirements or exact return fields, but the disclosed behavior is meaningful and accurate.

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 compact and front-loaded, leading with the core purpose. Every sentence adds value: the blocking behavior, the 'absence is normal' semantic, and the session requirement. The inline JSON example is a concise way to communicate expected false-case output.

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 single-parameter read tool, the description is mostly complete: it explains purpose, normal absence semantics, and prerequisite session. Since there is no output schema, it could have more explicitly detailed the true-case return shape, but the mention of 'text and button labels' gives sufficient guidance.

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%, and the udid parameter is already documented as 'iOS device UDID'. The description adds no additional parameter-level detail, so this matches the baseline for fully schema-covered parameters.

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 begins with a specific verb and resource: 'Check whether a system or app alert is currently blocking the iOS UI' and clarifies what it reads (text and button labels). It clearly separates this from the sibling ios_alert_respond by framing it as a status check rather than an action.

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 concrete context: 'worth checking before trusting a tap that "succeeded"' and notes that absence is a normal answer rather than an error. It also states the active iOS automation session requirement, but it does not explicitly contrast with ios_alert_respond or mention when not to use it.

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

ios_app_launch_timeAInspect

Measure COLD app-launch time (ms) for a bundle id, averaged over N cold launches. Each run terminates + relaunches the app and times until it is running and idle. Uses the on-device automation agent (auto-started); the agent runner must include the device.perf.launchTime method.

ParametersJSON Schema
NameRequiredDescriptionDefault
runsNoCold launches to average (default 3)
udidYesiOS device UDID
bundleIdYesApp bundle id to launch, e.g. com.apple.Preferences

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations provided, the description carries the full behavioral burden. It discloses that each run terminates and relaunches the app (a side effect), times until the app is running and idle, and requires a specific automation agent and method. This goes beyond a mere definition and provides actionable behavioral context. No contradictions with any annotations (none exist).

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 two sentences, front-loads the core purpose and key behavior (terminates/relaunches, averages over N runs), and includes the prerequisite method. Every sentence earns its place with no redundant or vague wording.

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?

There is no output schema, so the description should clarify what the tool returns. It says 'Measure COLD app-launch time (ms)' and mentions averaging over N runs, which strongly implies the return value is an average time in milliseconds, but it does not explicitly state the output format or whether additional data (e.g., per-run times) is provided. It also covers the key prerequisite (agent method). Given a simple measurement tool, this is a minor gap but still leaves some ambiguity about the response structure.

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?

The schema already fully describes all three parameters (udid, bundleId, runs) with 100% coverage, including the default for runs. The description adds minimal extra meaning beyond the schema, such as clarifying that runs refer to cold launches and that each run terminates the app. It does not provide syntax or format details beyond what the schema already specifies, so a baseline score of 3 is appropriate.

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

Purpose5/5

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

The description states a specific verb ('Measure'), resource ('COLD app-launch time'), and scope ('for a bundle id, averaged over N cold launches'). It clearly distinguishes itself from the sibling android_app_launch_time by specifying iOS and cold launch semantics, leaving no ambiguity about what the tool does.

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 provides context on how it works (each run terminates and relaunches the app, times until idle) and mentions a prerequisite (on-device automation agent with device.perf.launchTime method), which helps an agent decide when to use it. However, it does not explicitly name alternatives or state when not to use this tool, leaving some inference to the agent given the sibling list. No exclusions are given.

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

ios_batteryAInspect

Get battery status of an iOS device: charge percent, temperature (°C and °F), charging state, battery health and cycle count. No automation session required. The normalised summary is the one to read — the raw power registry beside it reports temperature in hundredths of a degree and carries several different 'capacity' keys, only one of which is a percentage.

ParametersJSON Schema
NameRequiredDescriptionDefault
rawNoInclude the full IOPMPowerSource registry alongside the summary (~60 keys). Default true; set false for just the summary.
udidYesiOS device UDID

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the full disclosure burden and handles it well by warning that the summary is normalized while raw reports temperature in hundredths of a degree and has multiple ambiguous 'capacity' keys. This prevents an agent from misreading raw values. It does not mention failure modes or explicitly state read-only behavior, but the getter framing makes that reasonably clear.

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 two sentences with no wasted words. The primary purpose is front-loaded, and the important raw-vs-summary warning is delivered concisely in the second sentence.

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?

The description lists all return categories, explains the summary/raw distinction, and notes that no automation session is required. Since there is no output schema, this gives an agent enough context to call the tool correctly and interpret results. It does not discuss error cases, but that is not a material gap for a simple status getter.

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; both 'udid' and 'raw' are already documented in the schema. The description adds useful interpretive context about the raw output's unit scaling and capacity-key ambiguity, but it does not add additional parameter format or value guidance beyond what the schema provides.

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 uses a specific verb and resource ('Get battery status of an iOS device') and lists the returned metrics: charge percent, temperature, charging state, battery health, and cycle count. It clearly scopes the tool to iOS, distinguishing it from Android siblings, but it does not explicitly differentiate it from the generic device_battery sibling, so it stops short of a 5.

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

Usage Guidelines4/5

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

The description gives clear invocation context with 'No automation session required', telling the agent it can call this tool directly without session setup. It does not name alternatives such as device_battery or state when not to use this tool, so it lacks the explicit when/when-not guidance needed for a 5.

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

ios_clear_locationAInspect

Clear the simulated GPS location so the iOS device returns to using its real CoreLocation fix. Counterpart to ios_set_location.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID

TDQS

A4.3/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 burden. It clearly states the behavioral effect (clears simulated location, reverts to real CoreLocation fix) and identifies the tool's scope. It doesn't mention edge cases like no simulated location being set, but for a simple clear operation this is adequate.

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 action, no filler. The outcome and counterpart are explained in minimal words, making it highly 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?

For a single-parameter tool with no output schema and simple behavior, the description is complete. It covers what, why, and the relationship to ios_set_location, leaving no critical gaps for an agent to call it correctly.

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

Parameters3/5

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

Schema coverage is 100%, with the udid parameter already described as "iOS device UDID." The description adds no additional parameter-level meaning beyond what the schema provides, so the baseline of 3 applies.

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 states a specific verb and resource: "Clear the simulated GPS location" and clarifies the outcome: "returns to using its real CoreLocation fix." It also names its counterpart (ios_set_location), which distinguishes it from sibling tools like ios_play_location_route and device_clear_location.

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 explicitly identifies itself as the counterpart to ios_set_location, giving clear context for when to use it (to undo a simulated location). However, it doesn't explicitly mention alternatives like device_clear_location or any exclusions (e.g., not for clearing routes), so it lacks a full when-not-to-use statement.

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

ios_clear_textAInspect

Clear a text field on an iOS device using the native element-clear command — reliable for any field length, unlike sending backspaces. Omit label to clear the currently-focused field (tap the field first to focus it); pass label to target a specific field. Pattern: tap field → ios_clear_text → ios_send_keys. Requires an active iOS automation session (auto-starts if needed).

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoElement type filter e.g. XCUIElementTypeTextField (used only when label is given).
udidYesiOS device UDID
labelNoAccessibility label/text of the field to clear. Omit to clear the focused field.
strategyNoElement finding strategy to try first when a label is given.

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full behavioral burden. It discloses the native clearing mechanism, the focused-field behavior versus targeted-field behavior, the expected workflow, and the session auto-start behavior. It does not cover failure cases or return values, but it provides meaningful behavioral context beyond the schema.

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 three sentences with no filler. It front-loads the core purpose, then gives the key parameter behavior, the recommended workflow, and the session requirement. Every sentence earns its place and avoids repeating schema field descriptions.

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?

The description is largely complete for an action tool with no output schema: it explains what to clear, how to choose between focused and labeled fields, the expected workflow, and the session requirement. The main gap is the absence of error behavior when no field is focused and no label is provided, but the provided context is sufficient for correct invocation in most cases.

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 the baseline is 3. The description adds important semantics beyond the schema by explaining that omitting `label` clears the focused field and that tapping the field first is part of the pattern. It does not expand much on `type` or `strategy`, but the schema already documents those adequately.

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 states a specific verb ('Clear'), a resource ('a text field on an iOS device'), and a precise mechanism ('native element-clear command'). It distinguishes itself from a common alternative ('unlike sending backspaces') and from the related ios_send_keys workflow, making it easy for an agent to see exactly what this tool does.

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 clear usage context: omit `label` to clear the focused field after tapping it, or pass `label` to target a specific field. It also provides a workflow pattern ('tap field → ios_clear_text → ios_send_keys'). However, it does not explicitly name alternatives or exclusions, such as when a generic clear tool or a different iOS command would be preferred.

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

ios_clipboard_get_hidAInspect

Read the device clipboard (pasteboard) via the system clipboard service (no automation session needed, no app foregrounding). Returns the current UTF-8 text, or empty string. Returns "no HID available" on iOS 17.x / no-tunnel.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It discloses the read behavior, the return type (UTF-8 text or empty string), and a specific error condition ('no HID available' on iOS 17.x / no-tunnel). It does not mention permissions or side effects, but for a simple read operation this is adequate.

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?

Three concise, front-loaded sentences. The first sentence states the primary action and key characteristics, the second covers the return value, and the third addresses the known limitation. No wasted 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?

For a simple 1-parameter read tool with no output schema, the description explains both the expected return (UTF-8 text or empty string) and the error condition. It lacks an explicit mention of what HID stands for, but the tool name and sibling set provide sufficient context.

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% and the only parameter 'udid' is already described as 'iOS device UDID'. The description adds no additional meaning about the parameter, which is acceptable given the high schema 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 uses the specific verb 'Read' and clearly identifies the resource as 'device clipboard (pasteboard)'. It further distinguishes the mechanism ('via the system clipboard service') and highlights unique characteristics ('no automation session needed, no app foregrounding'). This sets it apart from sibling tools like ios_get_pasteboard or device_clipboard_get.

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 implies when to use this tool: when you need to read the clipboard without an automation session or app foregrounding. It does not explicitly name alternatives or exclusions, but the context is clear enough for an agent to infer appropriate usage.

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

ios_clipboard_set_hidAInspect

Write the device clipboard (pasteboard) via the system clipboard service (no automation session needed, no app foregrounding). Returns "no HID available" on iOS 17.x / no-tunnel.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesText to place on the device clipboard
udidYesiOS device UDID

TDQS

A4/5.0
Behavior4/5

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

With no annotations present, the description carries the full burden of behavioral disclosure. It reveals that no automation session or app foregrounding is required and explicitly states the 'no HID available' error on iOS 17.x/no-tunnel. This is meaningful behavioral transparency beyond the schema.

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 with no wasted words: the first front-loads action, mechanism, and key constraints; the second captures the relevant platform limitation. Very efficient and well structured.

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 two-parameter write tool with no output schema, the description adequately covers purpose, mechanism, usage context, and a notable failure mode. It does not mention the success return value or explicitly distinguish sibling clipboard tools, but these are minor gaps for a tool this straightforward.

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%, with both parameters already described ('Text to place on the device clipboard', 'iOS device UDID'). The description adds no additional parameter-specific meaning, so the baseline score of 3 applies.

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

Purpose4/5

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

The description clearly states the action ('Write the device clipboard') and the resource ('pasteboard'), and adds a distinguishing mechanism ('via the system clipboard service') plus the absence of session/app foregrounding requirements. It does not explicitly name sibling alternatives, but the function is unmistakable.

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 gives clear context for when this tool is appropriate: when clipboard writes should occur without an automation session or app foregrounding. It also discloses a platform-specific failure condition. It does not explicitly contrast with sibling clipboard tools like ios_set_pasteboard or device_clipboard_set, but usage context is well implied.

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

ios_contact_hidAInspect

Press-and-HOLD a single contact down at (x,y) via direct HID input (no automation session needed) WITHOUT lifting — mouse-button-down / touch-down. The contact stays held until ios_release_hid. Use for hold-then-steer interactions the automation session cannot express. Coordinates are iOS screen points. Returns "no HID available" on iOS 17.x / no-tunnel.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesX coordinate (screen points, or 0..1 fraction if norm=true)
yYesY coordinate (screen points, or 0..1 fraction if norm=true)
normNoIf true, x/y (and path points) are 0..1 FRACTIONS of the screen — pass `pixelInScreenshot ÷ screenshotSize` directly (scale-free, matches the frontend, avoids point-guessing). Default false = iOS screen points.
udidYesiOS device UDID

TDQS

A4.4/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 responsibility. It discloses that no automation session is needed, the hold persists until ios_release_hid is called, coordinates are iOS screen points, and it returns an error on iOS 17.x/no-tunnel. These are key behavioral traits that are not inferable from the schema or annotations.

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 three sentences, front-loaded with the core action and the critical 'without lifting' qualifier, then adds the release dependency and error condition. No wasted words; every sentence provides 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 hold action with no output schema, it covers the main requirements: how to invoke, the held state, the release counterpart, coordinate system, and error case. It omits minor details like behavior if the device is already in a held state, but these are edge cases not essential for typical usage.

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 including norm and coordinate format. The description adds minimal extra meaning beyond restating that coordinates are screen points; it does not clarify the norm option's interaction or any edge cases. Baseline 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 a specific action: press-and-hold a single contact at coordinates via direct HID input, and explicitly contrasts with alternatives by noting it does not lift. The phrase 'without lifting — mouse-button-down / touch-down' precisely defines the behavior, and the reference to 'hold-then-steer interactions' differentiates it from tap or timed-press tools.

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 provides a specific use case ('hold-then-steer interactions the automation session cannot express') and mentions the companion tool ios_release_hid, but it does not explicitly name sibling tools like ios_tap_hid or ios_long_press_hid. Still, the guidance is clear enough for an agent to know when to invoke it.

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

ios_contacts_hidAInspect

Press-and-HOLD up to five contacts at once via direct HID input (no automation session needed), WITHOUT lifting. One call is one frame, so all fingers land at the same instant — call it repeatedly to steer them (a two-finger drag, two on-screen thumbsticks). Fingers stay held until ios_release_contacts_hid. Coordinates are iOS screen points. Returns "no HID available" on iOS 17.x / no-tunnel.

ParametersJSON Schema
NameRequiredDescriptionDefault
normNoIf true, x/y (and path points) are 0..1 FRACTIONS of the screen — pass `pixelInScreenshot ÷ screenshotSize` directly (scale-free, matches the frontend, avoids point-guessing). Default false = iOS screen points.
udidYesiOS device UDID
pointsYesWhere each finger is, in order. Keep the order stable across calls: it is the finger identity.

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does so thoroughly: touches persist until the release tool is called, each call advances one frame, all contacts land at the same instant, and the no-HID-available failure mode is disclosed. It also clarifies that no automation session is needed.

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 dense yet compact, front-loading the core action and then adding only high-value behavioral details: frame semantics, steering, release coupling, coordinate units, and the failure condition. No sentence is wasted.

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?

For a 3-parameter tool with no annotations and no output schema, the description is unusually complete: it covers the multi-touch lifecycle, repeated-call semantics, coordinate convention, and environment failure. The only minor omission is the unnamed success return value, but invocation-critical behavior is fully specified.

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?

The schema already documents all three parameters at 100% coverage, including norm's fraction behavior and points ordering/finger identity. The description adds the iOS screen-point coordinate unit and reinforces the five-contact limit, but it does not materially expand parameter meaning 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 names a specific verb ('press-and-HOLD'), a concrete resource ('up to five contacts at once via direct HID input'), and the defining frame semantics: one call equals one frame with all fingers landing simultaneously. It is clearly distinct from the release sibling and from session-based automation input.

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 clear context for use: call repeatedly to steer multi-touch gestures such as a two-finger drag, and keep fingers held until ios_release_contacts_hid. It does not explicitly state alternatives or exclusions (e.g., when to prefer ios_contact_hid or other tap/drag HID tools), so it stops short of a 5.

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

ios_crash_analyticsAInspect

List crash reports on an iOS device with aggregate analytics (total, per-app, per exception type, per-day timeline). Telemetry and in-house automation processes are excluded. Use ios_crash_detail with a returned crash id for the full log. No automation session required.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the burden of behavior disclosure. It is transparent about the output at a high level, explicitly states that telemetry and in-house automation processes are excluded from the data, and clarifies the session requirement. A slightly fuller statement of return shape or pagination would be possible, but nothing important is hidden.

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 definition is three focused sentences with the main function first, followed by exclusions and a routing pointer. There is no filler or repetition of schema details.

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 one-parameter, read-only listing tool with no output schema, the description explains what analytics are returned, what data is excluded, and how to get the full log. It is slightly incomplete in not contrasting with ios_crash_list, but it is otherwise sufficient for an agent to invoke it correctly.

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% for the single param, and 'udid' is already documented as the iOS device UDID. The description adds only implicit context by mentioning an iOS device, which is enough for baseline but not a meaningful addition 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 leads with a specific verb and resource: 'List crash reports on an iOS device' and immediately enumerates the analytics dimensions (total, per-app, per exception type, per-day timeline). It distinguishes itself from the likely sibling ios_crash_list by emphasizing aggregate analytics and from ios_crash_detail by pointing to it for full logs.

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 clear guidance to use ios_crash_detail with a returned crash id for the full log and notes that no automation session is required, removing a prerequisite. It does not explicitly state when to choose this over ios_crash_list for raw crash lists, but the aggregate-analytics framing makes the choice largely implicit.

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

ios_crash_detailAInspect

Full parsed metadata + raw content of one crash report (by id from ios_crash_analytics). No automation session required.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesCrash report id (file name) from ios_crash_analytics
udidYesiOS device UDID

TDQS

A3.8/5.0
Behavior3/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 the output (metadata + raw content) and the lack of session requirement, which is useful. However, it does not state whether the operation is read-only, has side effects, or requires any special permissions. For a retrieval tool, these are relevant but not critical omissions, leading to a moderate score.

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 that communicates the tool's primary function and key constraint without any fluff. Every word contributes value: 'Full parsed metadata + raw content' defines output, 'one crash report' specifies scope, 'by id from ios_crash_analytics' explains the input, and 'No automation session required' provides a usage condition. It is an exemplar of concise, structured description.

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 retrieval tool with two well-documented parameters and no output schema, the description adequately informs an agent: what it returns, how to identify the report, and that no session is needed. It does not mention error handling or the exact structure of the returned metadata, but that is often unnecessary. The description covers the essential operational details, making it nearly complete for its 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 description coverage is 100%, with both parameters (id and udid) already described clearly. The description adds the context that the id comes from ios_crash_analytics, which reinforces the schema's 'Crash report id (file name) from ios_crash_analytics' but adds no new syntactic or semantic detail. With high schema coverage, the baseline 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 retrieves 'Full parsed metadata + raw content of one crash report' and specifies the source of the id ('by id from ios_crash_analytics'). It distinguishes itself from sibling tools like ios_crash_analytics (which likely lists/analyzes) and ios_crash_list by focusing on a single report's details. The verb is implicit but unambiguous, and the resource and scope are precise.

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 a prerequisite (obtain id from ios_crash_analytics) and states a condition ('No automation session required'). However, it does not explicitly state when to use this tool over alternatives like ios_crash_list or ios_crash_symbolicate, nor does it mention exclusions or alternative scenarios. The guidance is implied rather than explicit.

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

ios_crash_listAInspect

List crash reports on an iOS device. No automation session required.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID
patternNoFilter pattern (e.g. "*.ips")

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations provided, the description carries the behavioral burden, and it does disclose one meaningful trait: no automation session is required. That said, it does not mention output format, whether a connected device is required beyond the udid parameter, or any side-effect implications, though 'list' implies a read-only operation.

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

Conciseness5/5

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

The description is two short sentences with no filler. The primary action is stated first, and the important 'no automation session required' note is appended efficiently without repeating schema information.

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 two-parameter list operation, the description plus schema is largely sufficient for correct invocation. The absence of an output schema is not critical here because 'List' implies a collection result, and the no-session requirement is clearly stated, though a note about the returned crash report file types would have made it 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 description coverage is 100%, so the parameters 'udid' and 'pattern' are already documented in the schema. The description adds no additional detail about their semantics or formatting, so it does not go beyond the structured information.

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 uses a specific verb ('List') and resource ('crash reports on an iOS device'), making the tool's purpose immediately clear. It is distinguishable from ios_crash_detail and ios_crash_analytics by the 'list' framing, though it does not explicitly name those alternatives.

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

Usage Guidelines3/5

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

The phrase 'No automation session required' gives a useful prerequisite condition, telling the agent this tool can be used without setting up a session. However, it provides no guidance about when to prefer this over related crash tools such as ios_crash_analytics, ios_crash_detail, or ios_crash_symbolicate.

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

ios_crash_symbolicateAInspect

Symbolicate a crash report (by id from ios_crash_analytics): resolve stack frames from imageName + offset into symbol + offset (file:line) using atos and symbol binaries on the host. System/OS frames resolve from Xcode’s on-disk DeviceSupport symbols (when a device of that iOS build was prepared in Xcode). App frames resolve only when a matching .dSYM is provided via dsymPath (matched by Mach-O UUID). Unresolvable frames are returned as-is. By default only the faulting thread is symbolicated.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesCrash report id (file name) from ios_crash_analytics
udidYesiOS device UDID
dsymPathNoDirectory of .dSYM bundles for app-frame symbolication (matched by UUID)
allThreadsNoSymbolicate every thread, not just the faulting one (default false)

TDQS

A4.6/5.0
Behavior5/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, and it does so thoroughly. It reveals the mechanism (atos and host symbol binaries), the dependency on Xcode DeviceSupport and UUID-matched dSYMs, the pass-through behavior for unresolved frames, and the default to only the faulting thread.

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 dense but every clause earns its place: main purpose first, then resolution sources, resolution conditions, fallback behavior, and default scope. No filler or repetition of the schema is present.

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?

There is no output schema, and the description does not explicitly state the return payload shape, though it strongly implies a symbolicated crash report. It fully covers invocation prerequisites, behavior, edge cases, and defaults, making it nearly complete for an agent to call correctly.

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

Parameters4/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, but the description adds real meaning: id is sourced from ios_crash_analytics, dsymPath is matched by Mach-O UUID, and allThreads defaults to false. Only the udid parameter stays at schema-level detail, which is acceptable.

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 states a specific verb ('Symbolicate') and resource ('a crash report'), and specifies the transformation from raw stack frames to symbol+offset/file:line. It also ties the input id to ios_crash_analytics, which clearly distinguishes this post-processing tool from crash listing/detail siblings.

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 gives clear context: use it on crash reports from ios_crash_analytics, with prerequisites for successful resolution (Xcode DeviceSupport symbols, matching .dSYM). It does not explicitly name alternatives or say when not to use it, but the usage context is strong enough for an agent to select it correctly.

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

ios_device_infoAInspect

Get detailed device info from an iOS device (no automation session required). Returns activation state, serial, product type, iOS version, etc.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID

TDQS

A4.3/5.0
Behavior4/5

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

Since no annotations are provided, the description carries the full behavioral burden. It discloses the non-session nature of the operation and implies a read-only query by listing informational return values. It does not cover failure modes or authentication, but for a simple info retrieval tool the essential behavior is communicated.

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?

A single sentence that front-loads the operation, includes the key differentiator, and gives representative output fields. There is no filler or redundant restating of the tool name.

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?

For a one-parameter read-only tool with no output schema, the description is complete: it tells the agent what to provide (UDID), that no session is required, and what kind of data will be returned. Nothing essential is missing for correct invocation.

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?

The input schema already documents the only parameter (udid) at 100% coverage. The description does not add extra parameter-level meaning beyond what the schema provides, so the baseline score of 3 applies.

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

Purpose5/5

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

The description clearly states the operation: get detailed device info from an iOS device, with concrete examples of returned data (activation state, serial, product type, iOS version). It also differentiates itself from generic device_info and other iOS commands by emphasizing the iOS-specific scope and the no-session requirement.

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 phrase 'no automation session required' gives a clear usage condition, telling the agent this tool is the standalone/out-of-band option when no active session exists. It does not explicitly name alternatives or exclusions, but the context is strong enough to guide selection.

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

ios_diagnosticsAInspect

Get device diagnostics (battery, HDMI, WiFi) from an iOS device. No automation session required.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description carries the transparency burden. It adds useful behavioral context by stating that no automation session is required and 'Get' implies a read-only operation. However, it does not disclose potential side effects, permissions, connectivity assumptions, or return format, leaving notable gaps.

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 well-front-loaded sentence that states the action and scope first, then includes the one critical usage qualifier. There is no redundancy or wasted text.

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 low-complexity tool with one well-documented parameter and no output schema, the description adequately covers purpose, scope, and session requirements. It does not explicitly describe the return data shape, but the enumerated categories give enough expectation for an agent to invoke it correctly.

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% and the only parameter, udid, is already described as 'iOS device UDID'. The description adds no further semantic detail, format constraints, or clarification, so the baseline score of 3 applies.

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

Purpose5/5

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

The description uses a specific verb ('Get') and resource ('device diagnostics') and enumerates battery, HDMI, and WiFi, making the tool's scope immediately clear. It also distinguishes this from narrower siblings like ios_battery or ios_device_info by indicating it is a combined diagnostic call.

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 clear usage condition: 'No automation session required' tells agents when this tool is appropriate as a standalone call. It does not explicitly name sibling alternatives or exclusion cases, so it stops short of full guidance.

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

ios_dismiss_keyboardAInspect

Dismiss the software keyboard on an iOS device if it is visible. Requires an active iOS automation session (auto-starts if needed).

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It discloses the conditional behavior ('if it is visible') and the session auto-start behavior, but does not explain what happens if no keyboard is visible (e.g., no-op), potential side effects, or return value. This is adequate but not rich.

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

Conciseness5/5

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

Two sentences with no wasted words. The action is front-loaded, followed by the condition and then the session requirement. Every word earns its place.

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 tool with one parameter, no output schema, and no annotations, the description covers the action, condition, and prerequisite. It lacks explicit mention of behavior when the keyboard is not visible or possible side effects, but the definition is largely complete for an agent to invoke it correctly.

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 already documents the single parameter 'udid' as 'iOS device UDID'. The description adds no additional meaning about the parameter, so the baseline score of 3 is appropriate.

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

Purpose5/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: 'Dismiss the software keyboard on an iOS device.' It clearly identifies the tool's unique function among many iOS sibling tools, and the conditional 'if it is visible' adds precision about its scope.

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 provides clear context on when to use the tool (when the keyboard is visible) and notes the prerequisite of an active iOS automation session with auto-start behavior. However, it does not explicitly name alternative tools or exclusions, so it falls short of a 5.

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

ios_drag_dropAInspect

Drag-and-drop on an iOS device: hold at (x1,y1) for holdMs to grab, then move to (x2,y2) over durationMs. Distinct from ios_swipe (no explicit hold). Use for home-screen icon reorder, drag-into-folder, slide-to-confirm. Coordinates are screen points. Requires an active iOS automation session.

ParametersJSON Schema
NameRequiredDescriptionDefault
x1YesStart X (screen points)
x2YesEnd X (screen points)
y1YesStart Y (screen points)
y2YesEnd Y (screen points)
udidYesiOS device UDID
holdMsNoHold-in-place duration before motion in ms (default: 500)
durationMsNoMotion duration from start to end in ms (default: 400)

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It discloses useful behavioral details: the hold-then-move sequence, coordinate units ('screen points'), and a prerequisite ('Requires an active iOS automation session'). Yet it does not mention return behavior, whether it waits for the gesture to complete, or potential side effects/edge cases, leaving some behavioral ambiguity.

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?

Three sentences with no wasted words. The core gesture is front-loaded, followed by sibling differentiation, use cases, coordinate clarification, and the session requirement. Every sentence contributes distinct information.

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 gesture tool with a 100%-covered parameter schema and no output schema, the description covers the essential context: what it does, how it works, typical use cases, coordinate semantics, and a prerequisite. It is slightly incomplete in not stating what the tool returns or whether it blocks until the gesture completes, but nothing critical is missing for invoking it correctly.

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 description coverage is 100%, so the baseline is 3. The description adds value by connecting the parameters into a temporal sequence: hold at (x1,y1) for holdMs to grab, then move to (x2,y2) over durationMs. This clarifies the relationship between start/end coordinates and the timing parameters beyond their individual 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 opens with a specific action: 'Drag-and-drop on an iOS device' and then precisely explains the gesture sequence ('hold at (x1,y1) for holdMs to grab, then move to (x2,y2) over durationMs'). It also explicitly differentiates from ios_swipe by noting the absence of an explicit hold, which distinguishes it from a key sibling.

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 clear use cases ('home-screen icon reorder, drag-into-folder, slide-to-confirm') and contrasts with ios_swipe ('Distinct from ios_swipe (no explicit hold)'), giving the agent context for when this tool fits. However, it stops short of explicitly stating when not to use this tool or naming other alternatives like ios_drag_hid, so it lacks full exclusionary guidance.

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

ios_drag_hidAInspect

Drag-and-drop via the direct input path (no automation session needed): press-and-HOLD at from, move to to as one continuous contact, then release. Unlike ios_swipe_hid it holds at BOTH ends — holdStartMs lets the app pick the item up, holdEndMs lets the drop/snap register (a bare swipe often fails to grab or to land the drop). Use for reordering, sliders, and canvas drag-and-drop (jigsaw pieces, cards). Pass norm=true to give from/to/waypoints as 0..1 fractions (pixelInScreenshot ÷ screenshotSize — precise, matches the frontend). Single-contact only. Returns "no HID available" on iOS 17.x / no-tunnel.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesDrop point (screen points, or 0..1 fraction if norm=true)
fromYesGrab point (screen points, or 0..1 fraction if norm=true)
normNoIf true, x/y (and path points) are 0..1 FRACTIONS of the screen — pass `pixelInScreenshot ÷ screenshotSize` directly (scale-free, matches the frontend, avoids point-guessing). Default false = iOS screen points.
udidYesiOS device UDID
holdEndMsNoSettle dwell at the drop before release, ms (default 250)
waypointsNoOptional intermediate points for a curved/steered drag (same space as from/to)
durationMsNoTotal travel time, ms (default 500)
holdStartMsNoGrab dwell before moving, ms (default 250)

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It covers the HID direct input path, single-contact constraint, hold timing purpose, and the 'no HID available' error on iOS 17.x/no-tunnel. These are valuable traits not inferable from the schema alone.

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 dense but well-organized: behavior first, contrast with sibling second, use cases third, coordinate guidance fourth, then constraints and failure mode. Every sentence earns its place without filler or redundant restating.

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?

For a gesture tool with a fully documented schema and no output schema, this description covers the essential context: gesture sequence, timing rationale, coordinate space, single-contact constraint, and known error case. Nothing needed to invoke it correctly is missing.

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

Parameters4/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 behavioral meaning to holdStartMs and holdEndMs beyond their schema descriptions, and reinforces the norm=true coordinate formula, helping the agent compute values correctly even though the schema already mentions 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 opens with a specific verb and resource: 'Drag-and-drop via the direct input path'. It then spells out the full gesture sequence (press-and-hold, move, release), clearly distinguishing it from ios_swipe_hid by noting it holds at both ends. An agent can unambiguously tell this tool from its closest sibling.

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?

It explicitly contrasts with ios_swipe_hid, explaining why a bare swipe often fails to grab or drop, and gives concrete use cases: reordering, sliders, and canvas drag-and-drop. This is clear when-to-use guidance with a named alternative and failure mode context.

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

ios_elements_in_regionAInspect

List addressable elements whose bounding box INTERSECTS the given rectangle. Counterpart of device_elements_in_region. Returns each element with its attributes, bounds, centre and ranked locators, sorted SMALLEST-FIRST so the most specific element comes back first. Use to enumerate a region (tab bar, dialog, list section) without reading the whole tree. Coordinates are iOS screen POINTS, the same space as ios_tap. Zero-area elements are kept — iOS tab-bar labels often report 0x0 and are still tappable by label. Requires an active iOS automation session.

ParametersJSON Schema
NameRequiredDescriptionDefault
x1YesLeft edge of the region (screen points)
x2YesRight edge of the region (screen points)
y1YesTop edge of the region (screen points)
y2YesBottom edge of the region (screen points)
udidYesiOS device UDID
limitNoCap on returned elements (default 50)

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden, and it delivers: it reveals the return content (attributes, bounds, centre, ranked locators), the ordering logic (smallest-first), coordinate semantics (iOS screen points, same space as ios_tap), an edge case (zero-area elements kept), and the session prerequisite. This is exceptionally transparent for a read-only tool.

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?

Four sentences, each carrying distinct information: core behavior, return format/order, usage context, and the zero-area edge case plus prerequisite. It is appropriately front-loaded and not redundant, though slightly dense. It could be trimmed slightly but remains 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?

No output schema exists, so the description compensates by specifying the exact return fields, ordering, coordinate space, and an important edge case. It also states the session requirement informatically. An agent gains everything needed to invoke this tool correctly with no gaps.

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 baseline is 3. The description adds only a restatement of the coordinate system ('iOS screen POINTS, same space as ios_tap') which is already conveyed by the schema's 'screen points' mention. No additional parameter-specific meaning is provided 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 opens with a specific verb and resource: 'List addressable elements whose bounding box INTERSECTS the given rectangle.' It also names its sibling counterpart (device_elements_in_region), immediately distinguishing it from the generic device-level tool. This is a precise, unambiguous purpose statement.

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?

It explicitly says when to use it: 'Use to enumerate a region (tab bar, dialog, list section) without reading the whole tree.' It also mentions being the counterpart of device_elements_in_region, which serves as a clear alternative, and implies when not to use (avoid whole-tree reads). This leaves no ambiguity about selection.

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

ios_end_sessionAInspect

End a iOS automation session on an iOS device, releasing resources.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations provided, the description carries the disclosure burden. It does state the key behavioral consequence—ending the session and releasing resources—but it does not cover side effects, behavior when no session exists, or whether session data is discarded. Adequate but not fully 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?

The description is a single concise sentence that front-loads the action, names the target resource, and gives the main side effect. Every word contributes value and there is no filler.

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 one-parameter lifecycle tool, the description plus schema gives enough to invoke it correctly: action, resource, side effect, and required argument. A note connecting it to ios_start_session or requiring an active session would strengthen it, but nothing critical is missing.

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?

The schema fully describes the only parameter, udid, as 'iOS device UDID', so the description does not need to compensate. It also does not add extra meaning, such as how to obtain the UDID or that it should refer to an active session, so it stays at the baseline.

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 uses the specific verb 'End' with the resource 'iOS automation session on an iOS device' and the consequence 'releasing resources'. This clearly distinguishes it from lifecycle siblings such as ios_start_session and generic device release tools.

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 intended use is implied: call this when an iOS automation session is no longer needed. However, it does not explicitly state prerequisites such as an active session created by ios_start_session, nor does it mention when not to use it or name alternatives.

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

ios_fast_screenshotAInspect

Take a screenshot of an iOS device (no automation session required). Returns PNG image. Alternative to ios_screenshot when the iOS automation session is not running: it needs no session, but captures fresh from the device on every call, so it is slower per shot than ios_mjpeg_screenshot (which is fast only because a session is already streaming frames).

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses that the tool returns PNG, captures fresh from the device on every call (no caching), and is slower than mjpeg. It also states no session is required. It does not describe error conditions or prerequisites like device connectivity, but for a simple screenshot tool this is adequate.

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 with no filler. The main action and key differentiators are front-loaded, and the comparison to alternatives is concise and informative.

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 tool with one parameter, no output schema, and no annotations, the description provides enough context: what it does, when to use it, what it returns, and its performance trade-offs. It could mention potential errors (e.g., device not connected) but that is minor given the 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 coverage is 100% and the single parameter (udid) is fully documented in the schema. The description adds no additional parameter details, which is appropriate since the baseline is 3 when the schema already covers everything.

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 takes a screenshot of an iOS device, and explicitly distinguishes it from siblings ios_screenshot and ios_mjpeg_screenshot by noting the 'no automation session required' and fresh-capture behavior. The verb and resource are specific, and the contrast with alternatives removes 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?

It explicitly says 'Alternative to ios_screenshot when the iOS automation session is not running' and explains the trade-off versus ios_mjpeg_screenshot (slower per shot but no session needed). This gives clear when-to-use guidance and names specific alternatives.

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

ios_file_copyAInspect

Duplicate ONE file to another path on an iOS device. The copy happens on the device side, so the bytes never travel to the server and back — prefer this over pull-then-push when both paths are in the same root. Directories are refused, because the file-transfer service has no recursive copy and reporting success after copying nothing would be worse than an error; walk the tree with ios_file_list and copy the files.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesAbsolute destination path within the same root
udidYesiOS device UDID
bundleIdNoBundle id of an app whose OWN container to browse (Documents/, Library/, tmp/) — the files the app itself reads and writes. Omit to use the shared media directory (photos, downloads) instead. Only apps built for testing expose a container; store-installed apps cannot.
remotePathYesAbsolute path of the source file

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral disclosure burden. It adds valuable traits: the copy is device-side (bytes never travel to the server), and directories are refused with the rationale that reporting success after copying nothing would be worse than an error. This explains expected error behavior and architectural efficiency, though it omits overwrite semantics and mutation warnings.

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?

Three sentences with zero waste: the purpose is front-loaded, the device-side fact is brief but informative, and directory handling is explained with actionable guidance. Every sentence earns its place.

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 4-parameter tool with no output schema and no annotations, the description covers the operation, when to use it, performance characteristics, and error behavior for directories. It doesn't mention overwrite behavior or return values, but the schema already documents parameters, and the description gives sufficient guidance to call the tool correctly.

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 reinforces that remotePath must be a file (not directory) and that both paths must be in the same root, which partially overlaps with the schema ('within the same root'). It doesn't add new syntax or format details beyond the schema, so the baseline 3 is appropriate.

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

Purpose5/5

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

The description opens with 'Duplicate ONE file to another path on an iOS device,' a specific verb+resource+device scope that clearly distinguishes it from move, pull, push, and delete siblings. It also explicitly states directories are refused, further narrowing the boundary.

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 gives an explicit conditional preference: 'prefer this over pull-then-push when both paths are in the same root,' and for directories it directs to 'walk the tree with ios_file_list and copy the files.' This names alternatives and the conditions that select them, leaving little to inference.

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

ios_file_deleteAInspect

Delete a file or directory tree on an iOS device. Directories are removed recursively. Same bundleId root selection as ios_file_list — the usual use is clearing an app's cached state between test runs. Returns deleted (true when everything went) plus failed, the paths that could not be removed. Set force to continue past individual failures instead of stopping at the first. This is destructive and has no undo. Camera photos and videos, their folders, and the on-device media databases are REFUSED: deleting one removes the file while the photo library keeps its record of it, leaving that library pointing at something that no longer exists. Files you pushed yourself are always deletable, including ones you put in the camera folder.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID
forceNoContinue past individual failures and report them (default false)
bundleIdNoBundle id of an app whose OWN container to browse (Documents/, Library/, tmp/) — the files the app itself reads and writes. Omit to use the shared media directory (photos, downloads) instead. Only apps built for testing expose a container; store-installed apps cannot.
remotePathYesAbsolute path of the file or directory to delete

TDQS

A4.4/5.0
Behavior5/5

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

No annotations exist, so the description carries the full burden and meets it: it warns that deletion is destructive and irreversible, explains recursive removal, describes the deleted/failed return shape, defines force semantics, and spells out the camera/media refusal behavior. This is exactly the behavioral context an agent needs before invoking a destructive tool.

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?

All sentences are substantive and the core action is front-loaded; the media-refusal explanation is verbose but justified because it encodes a subtle failure mode. Could be tightened in phrasing, but no filler.

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?

With no output schema, the description compensates by documenting the return contract (deleted/failed), error-accumulation behavior, and protected paths. For a destructive file tool this is complete enough for an agent to call and interpret results correctly.

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 reinforces bundleId semantics by referencing ios_file_list and clarifies force's behavior, but it does not add much beyond the schema descriptions. It does not contradict 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?

States exactly what it does—delete a file or directory tree on an iOS device—and adds the key distinction that directories are removed recursively. This separates it clearly from ios_file_list/copy/move/stat and the generic device_file_delete.

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 clear use case (clearing an app's cached state between test runs) and ties bundle directory selection to ios_file_list, so an agent knows the same root-selection logic applies. It does not explicitly enumerate alternative tools, but the destructive/refusal warnings plus usual-use context are enough.

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

ios_file_findAInspect

Search an iOS device subtree for files and folders whose NAME matches a query. The walk runs on the device side, so this is the right way to locate a file — far cheaper than listing directories one by one. query is a case-insensitive substring, unless it contains *, ? or [, in which case it is treated as a glob (e.g. *.log, app-?.db). Results carry both the path within the root and the real absolute path on the device. truncated: true means the limit stopped the walk — report it as "the first N matches", not as everything that exists. Same bundleId root selection as ios_file_list.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID
limitNoMaximum matches to return (default 200)
queryYesName substring, or a glob if it contains * ? or [
bundleIdNoBundle id of an app whose OWN container to browse (Documents/, Library/, tmp/) — the files the app itself reads and writes. Omit to use the shared media directory (photos, downloads) instead. Only apps built for testing expose a container; store-installed apps cannot.
maxDepthNoMaximum depth to descend (default unlimited)
remotePathYesAbsolute path of the subtree to search

TDQS

A4.7/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 full burden for behavioral disclosure. It discloses the query semantics (substring vs glob), the meaning of 'truncated: true' (which prevents misinterpretation of partial results), and provides the walk behavior (on-device, avoiding list-by-list). It also hints at permissions (bundleId handling) and path results. The description could add more about side effects (none are expected) or error conditions, but the coverage is strong.

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 and well-structured. It opens with the primary purpose, immediately highlights the performance advantage, then details the query semantics, result handling, and important caveat (truncated). Each sentence contributes new information; there is no fluff or repetition. The mention of ios_file_list is a useful pointer that ties the tool into its family.

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 moderate complexity (6 parameters, glob handling, truncation) and the absence of an output schema, the description is remarkably thorough. It covers the core behavior, parameter semantics, edge cases (glob detection, truncated), and even navigates the bundleId nuance. The description fully prepares an agent to call this tool correctly, including reporting expectations. The only possible gap is not describing the exact structure of the results, but that is mitigated by the clear path explanation.

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 description coverage is 100%, so the schema already documents all parameters. The description adds value by explaining the query semantics in more depth (case-insensitive substring, glob behavior) beyond the schema's brief description. It also clarifies the meaning of 'truncated' and the bundleId root selection, complementing the schema. However, the description doesn't detail every parameter (maxDepth, limit), so it's not a full 5.

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: searching a subtree for files/folders by name. It specifies the verb ('Search'), resource ('files and folders'), and the scope ('subtree'), distinguishing it from list-only tools like ios_file_list. It also differentiates itself from generic device_file_find by being iOS-specific and emphasizing the on-device walk.

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 explicitly explains when to use this tool over alternatives: 'The walk runs on the device side, so this is the right way to locate a file — far cheaper than listing directories one by one.' This gives clear usage guidance. It doesn't mention when NOT to use it, but the positive guidance is strong. It also references ios_file_list for -comment.

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

ios_file_listAInspect

List files and directories on an iOS device. Returns each entry with its name, type (file/dir/link), size and modification time. Pass bundleId to browse a specific app's own container — that is where an app under test keeps its database, caches and logs — or omit it to browse the shared media directory (photos, downloads). Use depth above 1 to recurse. An entry that could not be read comes back with type: null and an error, so one bad child never hides the rest of the listing.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID
depthNoRecursion depth (default 1 = the directory itself)
bundleIdNoBundle id of an app whose OWN container to browse (Documents/, Library/, tmp/) — the files the app itself reads and writes. Omit to use the shared media directory (photos, downloads) instead. Only apps built for testing expose a container; store-installed apps cannot.
remotePathYesAbsolute path within the chosen root, e.g. "/Documents"

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden and does so well. It discloses the return fields, the effect of `depth` recursion, and especially error handling: unreadable entries come back as `type: null` with an `error`, so one bad child doesn't hide the rest—this is critical context not present in schema or annotations.

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?

Three sentences, front-loaded with the core action Scientific, then the two optional parameters, then error behavior. No fluff or repetition of schema details that are already clear. 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?

For a 4-parameter tool with no output schema, the description gives enough to call correctly: required params are implied by schema (udid, remotePath), optional params are explained precisely, and the return format is described. The error-handling behavior is a notable asset that fills the gap left by the absent 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?

Schema description coverage is 100%, so the baseline is 3. The description adds meaningful nuance beyond the schema: it explains why `bundleId` matters (database, caches, logs) and clarifies that `depth` > 1 triggers recursion prepared—the schema says 'default 1 = the directory itself' but doesn't emphasize the recursion trigger. This is helpful but not exhaustive, so a 4 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 opens with a specific verb and resource: 'List files and directories on an iOS device.' It clarifies what each entry returns (name, type, size, modification time) and immediately distinguishes the two browsing modes (app container vs. shared media), which sets it apart from generic file-listing siblings like device_file_list.

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?

It gives explicit conditional guidance: pass `bundleId` to browse an app's own container (and explains why that matters for app under test), omit it for shared media, and use `depth` above 1 to recurse. This tells an agent exactly when and how to invoke the tool, though it does not name alternative listing tools.

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

ios_file_mkdirAInspect

Create a directory on an iOS device, parent directories included. Safe to call when it already exists — the reply distinguishes the two (created vs existed) instead of failing, so staging a temp folder needs no existence check first. Same bundleId root selection as ios_file_list.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID
bundleIdNoBundle id of an app whose OWN container to browse (Documents/, Library/, tmp/) — the files the app itself reads and writes. Omit to use the shared media directory (photos, downloads) instead. Only apps built for testing expose a container; store-installed apps cannot.
remotePathYesAbsolute path of the directory to create

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the full behavioral burden and does so well. It discloses parent-directory creation, idempotent behavior when the directory already exists, and the distinct `created` vs `existed` reply values. It does not cover error conditions or permission prerequisites, but for a simple directory-creation operation the core behavioral contract 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.

Conciseness5/5

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

The description is three sentences, front-loaded with the primary action and then the idempotency behavior, followed by a concise cross-reference to ios_file_list. Every sentence earns its place, with no filler or redundant restatement.

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?

The definition covers the core action, parent-directory creation, idempotency, reply semantics, and the bundleId root-selection behavior. Since no output schema is present, the explicit mention of `created` vs `existed` is helpful. A full description of the reply payload or common failure modes would make it completely self-sufficient.

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 input schema already documents udid, bundleId, and remotePath in detail. The description adds only the cross-reference that bundleId root selection matches ios_file_list, which does not materially extend parameter understanding. The baseline of 3 is appropriate because the schema carries the semantic load.

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 opens with a specific verb and resource: 'Create a directory on an iOS device, parent directories included.' This clearly differentiates it from related iOS file tools like ios_file_list, ios_file_push, and ios_file_stat, and the platform scope is explicit. The additional note about existing directories further characterizes the operation rather than merely restating the tool name.

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 an explicit use case: staging a temp folder requires no existence check because the tool tolerates an already-existing directory. It also cross-references ios_file_list for the shared bundleId root-selection rule, which helps an agent choose consistent parameters. However, it does not compare against the generic device_file_mkdir sibling or state when this iOS-specific version should be preferred over it.

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

ios_file_moveAInspect

Rename or move a file or directory on an iOS device. Both paths are inside the SAME root (the same bundleId selection as ios_file_list) — moving between an app container and the shared media directory is an ios_file_pull followed by an ios_file_push, not this. Missing parent directories of the destination are created.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesAbsolute destination path within the same root
udidYesiOS device UDID
bundleIdNoBundle id of an app whose OWN container to browse (Documents/, Library/, tmp/) — the files the app itself reads and writes. Omit to use the shared media directory (photos, downloads) instead. Only apps built for testing expose a container; store-installed apps cannot.
remotePathYesAbsolute path of the file or directory to move

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full behavioral burden and does so well. It discloses a key constraint (both paths inside the same root/bundleId selection) and a side effect (missing parent directories are created). It does not mention overwrite behavior or what happens to the source after a move, but move is semantically standard and the disclosed behaviors add meaningful context.

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?

Three sentences, each earning its place: the primary purpose, the cross-root exclusion with named alternatives, and the auto-creation side effect. It is front-loaded with the action and scoped precisely. No wasted 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?

For a tool with no output schema or annotations, the description explains the critical operational constraints (same-root requirement, auto-creation of parent directories) and points to ios_file_list for bundleId semantics. Minor gaps exist, such as overwrite behavior on the destination and whether directories are moved recursively, but these are not essential for correct invocation.

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%, with parameters like `to` already documented as "Absolute destination path within the same root." The description reiterates the same-root constraint but adds little beyond the schema. Per the rubric, baseline 3 applies when the schema does the heavy lifting, and it does here.

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 states a specific verb and resource: "Rename or move a file or directory on an iOS device." It further distinguishes itself from sibling tools by explicitly noting that cross-root moves are handled by ios_file_pull followed by ios_file_push, not this tool. This clarity separates it from related file operations like copy, delete, and stat.

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 explicitly states when this tool is NOT appropriate: "moving between an app container and the shared media directory is an ios_file_pull followed by an ios_file_push, not this." It also implies the correct use case by constraining both paths to the same root. This is clear routing guidance with named alternatives.

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

ios_file_pullAInspect

Read a file off an iOS device and return its contents as base64. Same bundleId root selection as ios_file_list. Oversized files are REFUSED rather than truncated — the error reports the actual size, so narrow the path or raise maxBytes (there is a hard ceiling). This matters: a silently clipped database or log is indistinguishable from a corrupt one. Check size first with ios_file_stat when unsure.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID
bundleIdNoBundle id of an app whose OWN container to browse (Documents/, Library/, tmp/) — the files the app itself reads and writes. Omit to use the shared media directory (photos, downloads) instead. Only apps built for testing expose a container; store-installed apps cannot.
maxBytesNoRaise the size limit for this call (default 5 MB, capped at 25 MB)
remotePathYesAbsolute path of the file to read

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly reveals that oversized files are refused rather than truncated, that the error includes the actual size, that maxBytes has a hard ceiling, and why this behavior matters. This is exactly the kind of non-obvious failure-mode context an agent needs and goes well beyond schema fields.

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 front-loaded with the core purpose and then logically adds root selection, size-limit behavior, and a pre-check recommendation. Each sentence provides useful information, though the 'This matters' explanatory sentence is slightly verbose and could be trimmed without losing operational clarity. Overall, it is well-organized and appropriately sized.

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 there is no output schema, the description sufficiently explains the return value (base64 contents), the key error behavior (refusal with size reporting), and the safe fallback (use ios_file_stat). With four parameters already fully documented in the schema, there are no missing operational details that would prevent a competent agent from using this tool correctly.

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 baseline is 3. The description adds some practical context around maxBytes and remotePath (raise the limit, narrow the path), and references ios_file_list for bundleId behavior, but these enrich rather than replace schema information. No significant semantic gap exists to compensate for.

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 states a specific verb ('Read'), a resource ('a file off an iOS device'), and the exact output format ('return its contents as base64'). It also immediately distinguishes conceptually from siblings by referencing ios_file_list for root selection and ios_file_stat for size checking, leaving no ambiguity about what this tool does.

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 guidance is provided: when a file may be too large, either narrow the path, raise maxBytes, or 'Check size first with ios_file_stat when unsure.' The cross-reference to ios_file_list for bundleId root selection also tells the agent how to align with existing listing logic. This clearly indicates when to use this tool versus related iOS file tools.

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

ios_file_pushAInspect

Write a file onto an iOS device from base64 content, creating parent directories as needed. Same bundleId root selection as ios_file_list — pass it to seed an app's own container with fixture data, a config file or a test database before launching it. Overwrites an existing file at that path.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID
contentYesFile content as a base64 string
bundleIdNoBundle id of an app whose OWN container to browse (Documents/, Library/, tmp/) — the files the app itself reads and writes. Omit to use the shared media directory (photos, downloads) instead. Only apps built for testing expose a container; store-installed apps cannot.
remotePathYesAbsolute destination path within the chosen root

TDQS

A4.2/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 full responsibility. It fully discloses the write behavior, content format (base64), creation of parent directories, and destructive overwriting. This is significant behavioral context for a mutation tool. It doesn't mention return values or error conditions, but these are not critical for a simple file push.

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?

Three sentences, each directly useful: the core operation, the primary use case, and the overwrite behavior. No filler. The most critical details are front-loaded.

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 tool with 4 parameters and no annotations or output schema, the description covers the essential semantics: what it writes, where it writes, how it handles directories, and its destructive nature. It points to the sibling ios_file_list for bundleId semantics, which helps grounding. Minor gaps like return format or permissions do not hinder correct invocation.

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 fully documents all four parameters. The description adds marginal value by explaining the purpose of bundleId (root selection seed app container) and how content is interpreted, but it does not replace or significantly extend the schema descriptions. Baseline 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 states a specific action ('Write a file onto an iOS device from base64 content'), names the resource, and adds key behavioral details (creating parent directories, overwriting). It clearly distinguishes itself from sibling file operations like ios_file_pull (reading), ios_file_delete, and ios_file_copy/move.

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 gives a concrete use case: seeding an app's own container with fixture data, config files, or test databases before launching it. It mentions the bundleId root selection consistent with ios_file_listcars, which helps an agent understand when to use this over other file tools. However, it does not explicitly state when NOT to use it (e.g., shared media directory) or list alternate tools.

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

ios_file_statAInspect

Get metadata for one file or directory on an iOS device — type, size and modification time. Cheaper than listing a directory when you already know the path, and the way to check a file's size before pulling it. Same bundleId root selection as ios_file_list.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID
bundleIdNoBundle id of an app whose OWN container to browse (Documents/, Library/, tmp/) — the files the app itself reads and writes. Omit to use the shared media directory (photos, downloads) instead. Only apps built for testing expose a container; store-installed apps cannot.
remotePathYesAbsolute path within the chosen root

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It discloses the operation's outputs (type, size, modification time), implies a read-only nature, and adds cost/behavior context ('Cheaper than listing a directory'). It does not mention error behavior or permission requirements, but for a metadata lookup the core behavior 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.

Conciseness5/5

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

Two sentences with no filler; the primary purpose is front-loaded and the additional guidance is compact. Every clause adds value, from the metadata fields to the comparative cost to the sibling root-selection reference.

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 stat tool with a well-covered schema, the description provides enough context: purpose, return fields, usage scenarios, and root selection. It lacks exact output formatting and error behavior, but these are minor given the tool's simplicity and the absence of an 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 100%, so the schema already documents all parameters well. The description adds a useful cross-reference ('Same bundleId root selection as ios_file_list'), but this does not substantially expand meaning beyond what the schema provides. Baseline 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 opens with a specific verb and resource: 'Get metadata for one file or directory on an iOS device', and enumerates the returned fields (type, size, modification time). It clearly distinguishes itself from ios_file_list and ios_file_pull, so an agent can differentiate it without opening schemas.

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 gives concrete usage context: use it when you already know the path, to check a file's size before pulling it, and it is cheaper than listing a directory. It references ios_file_list for the bundleId root selection, but it does not explicitly state when not to use it or name a formal alternative for listing paths.

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

ios_find_elementAInspect

Find a UI element on an iOS device by its accessibility label or text. Returns the element center coordinates (x, y), bounds, and which strategy matched. On no match, returns similar visible labels to retry with. Prefer this (or ios_tap_by_label) over eyeballing coordinates from a screenshot. Requires an active iOS automation session (auto-starts if needed).

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoElement type filter e.g. XCUIElementTypeButton, XCUIElementTypeCell (optional, used in class chain)
udidYesiOS device UDID
labelYesAccessibility label or visible text of the element to find
matchNoHow to match `label`. Default "contains" — strict, and the only modes that act without interpretation. "fuzzy" tolerates typos and word-order drift, and is tried ONLY after strict finds nothing; it REFUSES when two candidates are too close rather than guessing between them (e.g. "Sign" vs Sign In / Sign Out), and reports which attribute it matched.
strategyNoElement finding strategy to try first. Defaults to trying class chain → predicate string → accessibility id → name → xpath in order.

TDQS

A4.2/5.0
Behavior4/5

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

No annotations are supplied, so the description carries the behavioral burden. It discloses return contents (center coordinates, bounds, matched strategy), the no-match fallback of similar labels, and automatic session start. It does not mention timeouts or explicitly state that it is non-mutating, but the key behaviors are covered for a lookup 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?

Three sentences, front-loaded with the action, followed by return values, no-match behavior, and usage guidance. Every sentence earns its place with no filler or redundant schema repetition.

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 usefully names the return values and the no-match fallback, and it addresses session requirements. It omits explicit failure/timeout details and optional parameter guidance, but those are covered by the schema, making the overall definition largely 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 the baseline is 3. The description confirms that 'label' means accessibility label or visible text but adds little beyond the schema's own parameter documentation; the detailed match and strategy semantics live in 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?

Opens with a specific verb, target platform, and matching mechanism: 'Find a UI element on an iOS device by its accessibility label or text.' It also states what the tool returns, so an agent can immediately recognize it as a locator rather than an action tool like ios_tap_by_label.

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?

Explicitly advises preferring this tool (or ios_tap_by_label) over eyeballing screenshot coordinates, which gives clear usage context. It does not fully spell out when to choose this over related siblings such as ios_elements_in_region or ios_tap_by_label, so it is clear but not exhaustive.

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

ios_fpsAInspect

Sample on-device rendering FPS (Core Animation frames-per-second) for a physical iOS device over a short window, returning mean/min/max FPS plus GPU/renderer/tiler utilization when available. This is the iOS counterpart to android_fps. No automation session required. FPS reflects whatever is on screen during the window — drive the app first for a meaningful reading.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID
durationMsNoSampling window in milliseconds (default 2000)

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations provided, the description carries the behavioral disclosure burden. It discloses that no automation session is required, that sampling is over a short window, and that utilization metrics are returned only 'when available.' It does not describe potential side effects or permission needs, but for a read-only FPS sampler the essential behaviors are covered.

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 two tight sentences with zero fluff. It front-loads the core purpose and output, then adds the key usage caveat and sibling reference. Every sentence earns its place, making it easy to parse quickly.

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?

For a simple two-parameter tool with no output schema, the description covers everything an agent needs: what it does, what it returns, the device requirement, the session-free nature, and the crucial 'drive the app first' caveat. No critical information is missing for correct invocation.

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?

The input schema has 100% description coverage for both parameters (udid and durationMs). The description adds little beyond what the schema already states—it mentions 'short window' but doesn't elaborate on durationMs specifics. Since schema covers parameters fully, a baseline of 3 is appropriate; the description adds no significant new meaning.

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 opens with a specific verb ('Sample'), resource ('on-device rendering FPS'), and target platform ('physical iOS device'), and explicitly states the returned metrics (mean/min/max FPS plus utilization). It also names the sibling tool 'android_fps' as the iOS counterpart, clearly distinguishing it from other performance tools.

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 provides clear context on when to use: 'No automation session required' and notes that FPS reflects whatever is on screen, advising to 'drive the app first for a meaningful reading.' While it doesn't list explicit when-not-to-use scenarios or alternatives beyond android_fps, the guidance is actionable and sufficient for a sampling tool.

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

ios_gamepad_disconnectAInspect

Release every input the virtual game controller is holding on an iOS device, so nothing stays pressed after you finish. Also drops any controller being streamed from a live viewer of this device — otherwise that one re-sends its frame a moment later and the release looks like it silently failed. Call this when finished.

By default the controller STAYS CONNECTED with nothing held: apps still see a gamepad, and the next call reuses it instead of waiting ~5 s for the device to adopt a new one. Pass unplug:true to remove it outright — the honest choice when handing the device back, since a phantom controller changes how games behave for whoever gets it next. The cost of unplugging is paid later, not now: re-registering waits out the adoption again, and the device keeps a permanent entry for every controller ever registered, which nothing can remove.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID
unplugNoRemove the controller from the device instead of just releasing its inputs (default false)

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations present, the description carries the full behavioral burden and does so thoroughly. It discloses that the controller stays connected by default, that re-registering costs ~5 seconds, that unplugging leaves a permanent and unremovable device entry, and that streamed controllers can re-send frames and mask a successful release.

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 front-loaded with the primary behavior and then proceeds through default behavior, the unplug variant, and long-term side effects in a logical order. Although longer than average, every sentence contributes a distinct operational implication rather than filler.

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?

For a two-parameter tool with no output schema, the description is complete: it covers the common use case, an important edge case, the default behavioral contract, the parameter variant, and the irreversible side effect. An agent has enough context to invoke it correctly and anticipate consequences.

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 already documents both parameters with 100% coverage, so the baseline is 3. The description adds strong semantic value to 'unplug' by explaining the operational consequence, the recommendation context, and the future cost of re-registering, which is beyond what the schema alone offers.

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 opens with a specific action: 'Release every input the virtual game controller is holding on an iOS device,' naming the verb, resource, and platform clearly. It also covers the secondary streaming-controller behavior, so the full purpose is unambiguous and distinguishable from state/status siblings.

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 explicit situational guidance: 'Call this when finished,' plus a clear decision rule for default behavior versus unplug:true and a recommendation for handing the device back. It does not explicitly name sibling alternatives like device_gamepad_disconnect, so it stops just short of full alternative routing.

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

ios_gamepad_stateAInspect

Present a REAL game controller to an iOS device and set its state. The device registers a virtual DualShock 4 and receives genuine controller HID, so NATIVE apps see a GCExtendedGamepad and a web page sees a W3C standard-mapping pad in navigator.getGamepads(). It shows up in Settings > General > Game Controller. No Safari page is required.

HOW TO FIRE INPUT PROPERLY: • One call = ONE frame = one instant in time. A button stays pressed until you send a frame WITHOUT it, so every press needs a matching release frame — exactly like keydown then keyup. Sending press after press just holds them all down. • For anything that should look played rather than stepped — mashing, combos, a stick sweep — pass frames instead of calling repeatedly. The device plays the whole sequence out at intervalMs (default 33 ms ≈ 30 fps). A round trip per frame cannot reach that cadence, so a rapid sequence built out of single calls will always read as held buttons. • Alternate press and release inside frames: [{buttons:[1]}, {}, {buttons:[0,1]}, {}] is tap A, release, tap A+B, release. • Axes are [leftX, leftY, rightX, rightY], -1..1. Sweep them across frames to roll a stick; omitted axes read as 0. • READ THIS BEFORE REPORTING A STICK BUG: a stick axis can only express RIGHT and UP on axes[0..1], because the report's joystick fields are unsigned. The left stick's full 360-degree analog push IS delivered, but it arrives on the D-PAD — buttons[12..15], and GCExtendedGamepad.dpad.xAxis/yAxis for native apps, which are bipolar. Reconstruct it as x = right - left, y = down - up. Pushing left and reading axes[0] === 0 is the EXPECTED, structural behaviour, not a fault to debug. • While a sequence is playing, this call owns the pad — a controller streamed from a live viewer is paused and resumes on its own shortly after. • Confirm the pad EXISTS with ios_gamepad_status; confirm VALUES in the app under test.

Input routes to whatever holds focus, so foreground the app under test first — measuring while Settings or another app is in front reads as "nothing works".

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoIGNORED. Accepted so older callers do not break. The controller is a real device on the phone and its identity is fixed when it is registered, so passing an id here does NOT re-attach it as that controller and does NOT change what a tester displays — it is silently discarded. Read the current identity with ios_gamepad_status. Button mapping is always W3C standard order regardless.
axesNoAxis values -1..1: [leftX, leftY, rightX, rightY]. Omitted axes read as 0.
udidYesiOS device UDID
resetNoRegister a FRESH controller before sending this frame, instead of reusing the one already there. Use ONLY when the controller has stopped responding — the usual sign is that calls keep succeeding while the app under test sees nothing, and ios_gamepad_status still reports one as registered. Two costs, so do not pass it routinely: the call takes several seconds while the device adopts the new controller, and every registration leaves a permanent extra entry under Settings > General > Game Controller that the device never expires.
framesNoPlay a SEQUENCE of frames at intervalMs instead of setting one state. This is how you produce real gameplay input: include the release frames (an entry with no buttons releases everything). Capped at 300 frames. Overrides axes/buttons when present.
buttonsNoButton values 0..1 in W3C standard order (0-3 face, 4/5 shoulders, 6/7 triggers, 12-15 d-pad, 16 home, 17 touchpad on a DualShock). >= 0.5 counts as pressed. An empty/omitted entry releases everything.
intervalMsNoGap between frames in ms (default 33). Lower = faster mashing; 33 ms matches a 30 fps controller poll.

TDQS

A5/5.0
Behavior5/5

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

With no annotations provided, the description carries the full behavioral burden. It thoroughly discloses frame semantics, held-button behavior, sequence ownership pausing live viewers, reset side effects, the ignored `id` field, and the unsigned-axes structural quirk. It even explains expected behavior that might otherwise be misreported as a bug.

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?

Though long, the description is front-loaded with purpose and then structured into labeled usage sections. Every paragraph earns its place by covering a real failure mode or operational detail. The bullet-style 'HOW TO FIRE INPUT PROPERLY' section makes complex temporal semantics easy for an agent to follow.

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 high complexity, absence of annotations, and no output schema, the description is remarkably complete. It covers prerequisites, focus requirements, frame cadence, release semantics, stick-axis caveats, sequence limits, reset behavior, and verification routing via ios_gamepad_status. No critical operational gap remains.

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 meaningfully extends parameter meaning beyond the schema: it explains W3C button ordering, the >=0.5 press threshold, axes as [leftX, leftY, rightX, rightY] with -1..1 range, the unsigned-axis left/up limitation, and how `frames` requires release frames. This is far above the baseline for high schema 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 opening sentence states a specific verb and resource: 'Present a REAL game controller to an iOS device and set its state.' It distinguishes what makes this tool unique by explaining the virtual DualShock 4, GCExtendedGamepad, W3C gamepad exposure, and the fact that no Safari page is needed. It also names the verification sibling ios_gamepad_status, making the tool's role clear relative to related tools.

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 gives explicit when-to-use and how-to-use guidance: one call equals one frame, press/release frames must pair, rapid sequences should use `frames` rather than repeated calls, and axes should be swept across frames. It also tells the agent to foreground the app under test and to verify existence with ios_gamepad_status, reducing ambiguity about setup and alternatives.

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

ios_gamepad_statusAInspect

Report whether a virtual game controller is currently registered on an iOS device. The pad is a REAL HID device (apps see a GCExtendedGamepad and it appears in Settings > General > Game Controllers), so this reads the device rather than a web page and stays true with no browser open. Look at the gamepad field: registered tells you a pad exists, and the surrounding HID surfaces tell you input can reach the device at all. It reports presence, not the last axes/buttons you sent — confirm values in the app under test.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations provided, the description carries the full responsibility for behavioral disclosure. It reveals the key nuance that the virtual pad is a real HID device, that it reads device state rather than browser state, and that the `gamepad` field's `registered` flag is the authoritative presence signal. This goes well beyond a generic status-tool 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?

Every sentence earns its place: the opening states the core purpose, the second explains the unusual HID behavior, the third provides output-field guidance, and the final sentence prevents a common misuse. It is dense but not bloated, and the critical caveat 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?

Given the tool's simplicity and the absence of an output schema, the description adequately explains what the caller will see (`gamepad` field, `registered`, surrounding HID surfaces) and what it will not see. The behavior, scope, and expected interpretation are all covered well enough for an agent to call and interpret the tool correctly.

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?

The schema already fully documents the single `udid` parameter with 100% coverage, so the baseline is 3. The description adds useful device context but does not add parameter-specific guidance beyond what the schema provides.

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?

Begins with a specific verb and resource: 'Report whether a virtual game controller is currently registered on an iOS device.' It also differentiates itself from related tools like ios_gamepad_state by explicitly stating it reports presence, not the last axes/buttons sent, making the tool's scope unmistakable.

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 gives clear context for when to use the tool: it reads the actual device rather than a web page and stays valid with no browser open. It also tells the agent what not to expect ('reports presence, not the last axes/buttons') and directs value confirmation to the app under test, though it does not explicitly name alternative sibling tools.

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

ios_gesture_pathAInspect

Replay a freeform stroke as ONE continuous touch on an iOS device — the polyline lands exactly as given, so use it for curves, arcs, signatures, unlock patterns, or any gesture a straight ios_swipe cannot express. points is an ordered list of {x, y, t?} screen points; t is ms from touch-down (omit to auto-space evenly, which also controls speed → momentum for a fast flick). Minimum 2 points. Requires an active iOS automation session.

ParametersJSON Schema
NameRequiredDescriptionDefault
normNoIf true, x/y (and path points) are 0..1 FRACTIONS of the screen — pass `pixelInScreenshot ÷ screenshotSize` directly (scale-free, matches the frontend, avoids point-guessing). Default false = iOS screen points.
udidYesiOS device UDID
inputNoInput path. 'auto' (default) drives the gesture through the automation session. 'hid' drives it through the direct input path instead, which needs no automation session — it reports 'no HID available' on iOS 17.x or with no tunnel.
pointsYesOrdered waypoints of the stroke (first = touch-down, last = lift)

TDQS

A4.4/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It does disclose useful traits: one continuous touch, exact polyline placement, and t-based speed/momentum. However, it flatly says 'Requires an active iOS automation session' while the schema's input parameter states 'hid' needs no automation session — an in-document contradiction that could mislead the agent.

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 dense but tightly organized: primary purpose first, concrete examples, then essentials (points format, timing semantics, minimum count, precondition). Every sentence earns its place.

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 tool with no annotations and no output schema, the description covers the key points an agent needs to call it correctly: purpose, point semantics, timing, and a precondition. The main gap is the unresolved session requirement vs the hid path, which is captured in the schema but not reconciled in the description.

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 already describes all four parameters (100% coverage), but the description adds meaning beyond it: points is an ordered list, t omitted auto-spaces evenly and controls speed/momentum, minimum 2 points. This helps the agent build a valid call without needing extra inference.

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 opens with a specific verb and resource: 'Replay a freeform stroke as ONE continuous touch on an iOS device.' It explicitly names the limitation of a sibling (ios_swipe) and lists concrete use cases (curves, arcs, signatures, unlock patterns), so an agent can instantly tell what this tool is for.

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

Usage Guidelines5/5

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

It gives explicit when-to-use guidance ('use it for curves, arcs, signatures, unlock patterns, or any gesture a straight ios_swipe cannot express'), names the alternative ios_swipe, and states a precondition (active iOS automation session).

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

ios_get_browser_urlAInspect

Get the current URL loaded in Safari on an iOS device. Returns the URL string. Requires an active iOS automation session (auto-starts if needed).

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It discloses the session requirement and that it can auto-start a session—a potential side effect—and states the return value is a URL string. However, it does not explicitly confirm read-only behavior, error handling, or what happens when Safari has no URL or isn't running.

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 two sentences with zero redundancy. The first sentence states the core purpose and return type, and the second adds the prerequisite. Every word earns its place and key information is front-loaded.

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 getter with one parameter and no output schema, the description covers the purpose, return type, and session prerequisite. It doesn't cover edge cases like Safari not running or empty URL, but those are minor for a tool of this simplicity and could be deferred to an output schema or error messages.

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%—the single required parameter 'udid' is described as 'iOS device UDID' in the schema. The description adds no additional parameter meaning beyond what the input schema already provides, so baseline 3 applies.

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 states a specific verb ('Get') and resource ('current URL loaded in Safari on an iOS device'). It clearly identifies the platform (iOS) and browser (Safari), distinguishing it from generic tools like device_get_browser_url without opening schemas.

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 mentions a prerequisite (active iOS automation session) and auto-start behavior, giving some contextual usage guidance. However, it does not name sibling alternatives like ios_safari_navigate or explicitly state when not to use this tool, leaving when-to-use to inference.

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

ios_get_locationAInspect

Read the iOS device's current GPS location. Returns the simulated value when ios_set_location is active (no automation session needed to read it), otherwise the device's real CoreLocation fix.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID

TDQS

A4/5.0
Behavior4/5

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

With no annotations provided, the description carries full responsibility for behavioral disclosure. It reveals a key nuance: it returns the simulated value when ios_set_location is active, and otherwise the real CoreLocation fix. This goes beyond the name and is valuable, though it does not mention permissions, error conditions, or return format.

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 two concise sentences, front-loading the primary action and then adding the crucial behavioral nuance. Every word serves a purpose, with no redundant information.

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 read operation with one parameter and no output schema, the description covers the core action and the most important behavioral variation. It omits details like return format or permission requirements, but these are less critical given the simplicity and the explicit simulated/real distinction.

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?

The schema covers 100% of the single parameter (udid) with a clear description. The tool description adds no additional meaning about udid beyond what the schema already provides, so the baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool reads the iOS device's current GPS location, using a specific verb and resource. It distinguishes itself from siblings like ios_set_location (a write operation) and device_get_location (generic device location) by specifying iOS and the simulated/real distinction.

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 provides behavioral context about when it returns simulated vs. real location and notes that no automation session is needed to read it. However, it does not explicitly name alternative tools or state when to prefer this over device_get_location or other location-read tools, leaving usage guidance implicit.

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

ios_get_pasteboardAInspect

Get the clipboard (pasteboard) text copied on an iOS device. Returns the copied text (empty string if the pasteboard has none). Requires an active iOS automation session; the automation agent must be foregrounded to read the pasteboard.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral burden. It discloses the return value (copied text, empty string if none) and the important condition that the automation agent must be foregrounded. This is valuable context beyond the bare operation, though it does not discuss edge cases like permission handling or failure modes.

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 with no redundant detail. The core action is front-loaded, followed by the return behavior and the key prerequisite. Every sentence earns its place.

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 read-only tool with one fully documented parameter and no output schema, the description covers the essential information: what it does, what it returns, and the runtime precondition. Minor gaps like why the agent needs to be foregrounded or how to handle failures are acceptable given the tool's 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?

The input schema already fully documents the udid parameter with 100% coverageă, so the description adds no additional semantic value about parameters. The baseline of 3 applies per the rubric when schema coverage is high.

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 reads clipboard text from an iOS device, using 'Get' as the verb and specifying the resource. It does not explicitly differentiate from sibling tools like device_clipboard_get or ios_clipboard_get_hid, but the iOS-specific and pasteboard-focused wording is unambiguous.

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 provides a clear prerequisite: an active iOS automation session with the agent foregrounded. However, it does not state when to use this tool over alternatives or when not to use it. The context is implied rather than explicit.

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

ios_hid_statusAInspect

Report whether direct HID input (host-driven, no automation session needed) is available on an iOS device, plus its display size. Use to decide between the hid tools and the session-backed ios tools. Does NOT require an automation session.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It discloses a key behavioral trait: 'Does NOT require an automation session.' It also implies a read-only status check. However, it does not describe the return format or error behavior, which would be helpful but not critical for a simple status 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?

The description is two concise sentences, front-loaded with the core purpose and output, followed by usage guidance and a key constraint. Every sentence earns its place with no fluff.

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 one-parameter status tool with no output schema, the description covers purpose, usage context, and a key behavioral trait (no session). It could specify the return format, but the absence of an output schema makes that less critical. Overall, it provides enough for an agent to decide when to call it and what to expect.

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?

The schema covers the single parameter 'udid' with a description ('iOS device UDID'). The tool description adds no extra semantic detail about the parameter, so it remains at the baseline 3 for a fully documented 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 states a specific verb ('Report') and a clear resource: HID input availability and display size on an iOS device. It explicitly differentiates from the sibling *_hid and session-backed ios_* tools, making its purpose unmistakable.

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?

It gives direct guidance: 'Use to decide between the *_hid tools and the session-backed ios_* tools.' This tells the agent exactly when to call this tool and implies the alternative (session-backed tools when HID is not available). Also notes that no automation session is needed, further clarifying usage context.

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

ios_install_appAInspect

Install an IPA or .app on an iOS device. No automation session required.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to .ipa file or .app folder on the server
udidYesiOS device UDID

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It accurately conveys that this is a device-modifying install operation and that no session is needed, but it does not disclose potential side effects such as overwriting an existing app, signing requirements, or failure behavior.

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

Conciseness5/5

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

Two short sentences with no filler. The primary action and artifact types are front-loaded, followed by the key prerequisite clarification about no automation session.

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 two-parameter install tool, this is largely complete: it names the input types, the target platform, and the lack of a session requirement. The main gap is that no output or success/failure indication is mentioned, and there are no annotations to fill that in.

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 both parameters (path and udid) are already documented. The description adds no extra parameter-level detail beyond what the schema provides.

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 specific action: install an IPA or .app on an iOS device. It is easily distinguished from siblings like ios_uninstall_app and ios_launch_app by naming both the operation and the target platform.

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 clear usage context: installing an IPA or .app onto an iOS device. It adds the useful contextual cue that no automation session is required, which helps an agent know when this direct tool is appropriate, though it does not explicitly list alternatives or exclusions.

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

ios_key_hidAInspect

Send raw HID keyboard usage codes as real hardware keypresses — the ONLY way to inject true keypresses, modifiers and shortcuts (the typing tools can only type into a focused field). usages is an ordered list of USB HID Keyboard/Keypad usage-page codes (e.g. 0x04=a … 0x1D=z, 0x28=Return, 0x2A=Backspace; modifiers 0xE0=LeftCtrl…0xE3=LeftGUI); send them together to press a chord. The keys are pressed AND released as one action, so nothing stays held after the call. Pass an empty list to force-release anything a previous caller left held. Returns "no HID available" on older iOS or when the device has no active input channel.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID
usagesYesOrdered USB HID Keyboard/Keypad usage codes to press together (numbers, e.g. [0x04] for "a"). Empty list = release any keys left held.

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 carries the full behavioral disclosure burden and does so thoroughly. It explains that keys are 'pressed AND released as one action, so nothing stays held,' describes the fallback error case ('no HID available'), and documents the release mechanism via an empty list. This is transparent and prevents common misuse.

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 dense but efficient: three sentences cover purpose, parameter semantics, release behavior, and failure modes. Every sentence earns its place, and the core differentiating purpose is front-loaded. No redundant or filler content is present.

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 lack of annotations and output schema, the description covers all critical aspects an agent needs: what the tool does, how to encode usages, chord behavior, the one-action press/release guarantee, the empty-list release usage, and the expected error condition. The tool is complex, and the description is complete enough for correct invocation.

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 the baseline is 3, but the description adds real value beyond the schema by providing concrete USB HID usage-code examples (0x04=a, 0x28=Return), modifier ranges (0xE0–0xE3), and chord semantics. The udid parameter gains no new meaning, but the usages parameter is substantially enriched.

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 states a specific action ('Send raw HID keyboard usage codes as real hardware keypresses') on a specific resource (iOS key input). It strongly distinguishes itself from sibling typing tools by claiming it is 'the ONLY way to inject true keypresses, modifiers and shortcuts,' which separates it from ios_send_keys and similar tools.

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 clear usage context: use this when true hardware keypresses, modifiers, chords, or shortcuts are needed, and notes that 'typing tools can only type into a focused field.' It also explains when to pass an empty list to force-release stuck keys. However, it does not explicitly name alternative sibling tools or give a formal when-not-to-use list beyond the generic typing-tool contrast.

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

ios_kill_appAInspect

Kill an app on an iOS device by bundle ID, process ID, or process name. No automation session required.

ParametersJSON Schema
NameRequiredDescriptionDefault
pidNoProcess ID to kill
udidYesiOS device UDID
bundleIdNoApp bundle ID to kill
processNameNoProcess name to kill

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations present, the description must carry the behavioral disclosure burden. It does disclose a key operational trait: no automation session is required. But it does not state that killing by PID or process name can terminate non-app processes, whether the kill is forceful, or what side effects occur, leaving meaningful behavioral gaps for a destructive operation.

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 short sentences. The main capability and target selectors are front-loaded, followed by the session-requirement note. Every word adds information.

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 destructive iOS process tool with no annotations and no output schema, the description is adequate but leaves an important gap: the schema marks only `udid` as required, and the description does not clarify that at least one of `pid`, `bundleId`, or `processName` is needed, nor that they are alternatives. Simple to read, but an agent could attempt an invalid call with only a UDID.

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 parameter names and their meanings are already documented. The description repeats the three target selectors without adding extra semantics such as 'exactly one of pid, bundleId, or processName must be provided,' which would have elevated the score.

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 names a specific action ('Kill'), a specific resource ('an app on an iOS device'), and the supported target selectors (bundle ID, process ID, or process name). It is clear and unambiguous, but it does not explicitly distinguish this from the similarly named sibling `ios_terminate_app`, so it misses the fifth point.

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?

'No automation session required' provides a concrete usage context: the agent can invoke this tool standalone without first establishing an iOS automation session. However, the description does not name alternatives such as `ios_terminate_app` or state when the agent should prefer one over the other, so it stops short of full when/when-not guidance.

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

ios_launch_appAInspect

Launch/activate an app on an iOS device by bundle ID. With no arguments it ACTIVATES — resuming the app in place and keeping its state — using the automation session when one is up and the direct device transport otherwise. Pass arguments to force a COLD relaunch with that argv instead (launch arguments are ignored on an already-running process, so the app is killed first). Arguments land in the process's argv, which is where NSUserDefaults reads its argument domain from, e.g. ["-AppleLanguages", "(fr)"] or your own debug flags; the override lives for that launch only.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID
bundleIdYesApp bundle ID to launch
argumentsNoOptional launch arguments (argv). Omit for a plain activate; supplying any forces a cold relaunch.

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It discloses that activation preserves state, cold relaunch kills the app first, and that arguments are passed to argv where NSUserDefaults reads from. It also notes that the override lives only for that launch. This is rich behavioral context beyond the schema, though it could mention side effects like terminating the current instance or any permission requirements.

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 a single paragraph that is detailed but not overly verbose. It front-loads the core action and the key branching behavior (with/without arguments) before diving into implementation details. Every sentence adds value: the transport choice, the kill-before-relaunch rationale, and the NSUserDefaults connection. Slightly long for a tool description, but justified given the 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?

For a tool with 3 parameters, no output schema, and no annotations, the description covers all necessary information: the two modes, how arguments affect behavior, where they land, and the scope of the override. The agent can correctly invoke the tool in either mode without needing external context. It even explains the transport mechanism (automation session vs. direct device), which is useful for understanding connectivity.

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 description coverage is 100%, so each parameter (udid, bundleId, arguments) is documented. The description adds semantics for 'arguments': it explains the meaning of omitting vs. providing it, and how they map to argv and NSUserDefaults. This goes beyond the schema's simple 'Optional launch arguments (argv)' by detailing the behavioral impact.

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 ('Launch/activate') and resource ('an app on an iOS device by bundle ID'), and distinguishes two modes: activation (no arguments) and cold relaunch (with arguments). This differentiates it from siblings like 'ios_launch_app_in_language' and 'device_launch_app' by specifying the iOS-specific behavior and the role of arguments.

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 explicitly explains when to use activation vs. cold relaunch: 'With no arguments it ACTIVATES... Pass arguments to force a COLD relaunch'. It also notes that launch arguments are ignored on an already-running process, so passing arguments triggers a kill first. This gives clear decision criteria for the agent, though it doesn't name sibling alternatives like 'ios_launch_app_in_language', but the behavior distinction is sufficient.

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

ios_launch_app_in_languageAInspect

Launch an iOS app forced into a specific language / locale, without changing the device's system settings. Useful for QA testing app localization (e.g. open the app in Spanish without flipping the whole device to Spanish). Override is per-launch — relaunching the app outside this tool reverts to system language. Works whether or not an automation session is already open: it reuses an open automation session when there is one and launches the app directly when there is not, and says which path it used. The target app must use NSLocalizedString / Bundle.main.localizedStringForKey at runtime (modern apps do; some legacy apps cache locale on first cold launch — kill via ios_kill_app and re-call this tool to force re-read).

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID
localeNoOptional BCP-47 / POSIX locale (defaults to <language>_<UPPER(language)>), e.g. "fr_FR", "es_US"
bundleIdYesApp bundle ID, e.g. com.apple.Preferences
languageYesISO 639-1 language code, e.g. "fr", "es", "en", "ja"

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations at all, the description carries full behavioral burden, and it delivers: per-launch override, reverting on relaunch outside the tool, session reuse behavior, and the legacy locale-caching caveat. It even warns about a known failure mode and the workaround, which is a strong transparency signal.

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 long but every sentence earns its place: purpose, use case, per-launch semantics, session behavior, and a legacy-app caveat with remediation. It is front-loaded with the primary action and avoids filler.

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 annotations and no output schema, the description still provides enough to select and invoke the tool correctly: prerequisites, behavior, failure modes, and a retry path. There is no missing critical information for an agent to use this tool effectively.

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 of 3 applies. The description adds useful behavioral context around language forcing and locale-related caching, but it does not materially extend the parameter semantics beyond what the schema already documents for udid, bundleId, language, and locale.

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 names a specific verb and resource: 'Launch an iOS app forced into a specific language / locale' without touching system settings. It clearly distinguishes itself from generic app-launch and system-language tools, and the example (Spanish localization QA) anchors its purpose.

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 explicitly states when to use this tool — QA testing app localization without changing device-wide settings — and gives concrete fallback guidance for legacy apps: kill the app via ios_kill_app and re-call. It also clarifies it works with or without an existing automation session, leaving little ambiguity about invocation context.

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

ios_list_appsAInspect

List the apps installed on an iOS device — user apps AND system apps like Settings and Safari, which the raw listing's default hides. Returns bundleId, name and type. Internal bundles are excluded: iOS reports 264 installed bundles on a typical iPad, of which ~51 are apps and the rest are XPC helpers and view services (MediaRemoteUIService, AAUIViewService, SpringBoard). Pass includeInternal to see those too. No automation session required.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID
includeInternalNoInclude hidden system bundles — view services, XPC helpers, SpringBoard — and return the raw Info.plist dicts. Default false. Very large output.

TDQS

A4.4/5.0
Behavior5/5

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

With no annotations provided, the description carries the full behavioral disclosure burden, and it does so well: it explains the default filtering behavior, that internal bundles are excluded, what the output includes, what includeInternal changes, and that no automation session is needed. This is genuinely transparent for a read-only listing tool.

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 front-loaded with the core purpose and return fields, and most details are useful. The example counts and bundle names are a bit verbose but help explain the internal-bundle exclusion behavior, so the length is justified without being bloated.

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 modest complexity, the absence of an output schema, and no annotations, the description is complete: it covers purpose, return format, default behavior, the includeInternal option, and the session requirement. Nothing an agent needs to decide whether to call this tool is missing.

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%, and both parameters are already clearly documented in the input schema. The description reinforces includeInternal with additional context (internal bundles, default exclusion) but does not add significant semantic meaning beyond what the schema already provides.

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 a specific verb and resource: 'List the apps installed on an iOS device'. It explicitly distinguishes user apps from system apps, names return fields (bundleId, name, type), and clarifies that internal bundles are excluded, so an agent understands exactly what this tool does.

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 clear when-to-use context: to list iOS apps including system apps, and optionally include internal bundles via includeInternal. It also notes that no automation session is required, which is a useful prerequisite signal, though it does not explicitly name an alternative tool or state when not to use it.

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

ios_locators_forAInspect

Generate ranked locator strategies for one element. Counterpart of device_locators_for. Pass either coordinates (x, y — picks the SMALLEST element containing the point) OR a label substring. Returns accessibility id, predicate string, class chain and XPath, best first, each with a note on why it ranks where it does. Use these to fill page-object selectors when generating test scripts instead of re-deriving them. Requires an active iOS automation session.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoX of the element in screen points (use with y)
yNoY of the element in screen points (use with x)
udidYesiOS device UDID
labelNoLabel / name substring to look up instead of coordinates

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the full behavioral burden and does well: it discloses the smallest-element hit-testing rule for coordinates, the ranked best-first ordering with explanatory notes, the exact output types (accessibility id, predicate string, class chain, XPath), and the active-session precondition. It does not state what happens when both label and coordinates are passed or when neither is provided, a minor gap.

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 four sentences with no filler: it sequentially covers purpose, input modes with the key hit-testing nuance, output format and ordering, and the intended use case. Information is front-loaded and each sentence earns its place.

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 and no annotations, the description adequately explains what is returned and in what order, how to specify the target element, and the session requirement. It stops short of covering edge cases like unspecified parameter combinations or behavior when no element matches, but an agent can invoke the tool correctly with the information 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 description coverage is 100%, so all four parameters are already documented. The description adds useful relational context—x/y are a pair ('use with x/y') and form an alternative to label—and explains the coordinate interpretation ('picks the SMALLEST element'). This is reinforcing rather than substantially extending the schema, aligning with the baseline 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?

The description states a specific verb and resource: 'Generate ranked locator strategies for one element.' It further distinguishes the tool from a sibling by explicitly naming 'Counterpart of device_locators_for,' and the iOS-specific scope is reinforced by the session requirement. This leaves no ambiguity about what the tool does.

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 gives clear contextual guidance: pass either coordinates or a label substring, and use the results 'to fill page-object selectors when generating test scripts instead of re-deriving them.' It names the counterpart sibling but does not explicitly explain when to choose ios_locators_for over device_locators_for, and it offers no exclusions (e.g., when a simpler find_element would suffice).

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

ios_lock_statusAInspect

Check if an iOS device screen is locked. Requires an active iOS automation session.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID

TDQS

A3.9/5.0
Behavior3/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. The 'Check' verb implies a read-only operation, and the session requirement is genuine behavioral context beyond the schema. However, it doesn't disclose failure behavior when no session is active or what the tool returns, both of which would matter given zero annotation coverage.

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 short sentences with the purpose front-loaded and the prerequisite following. There is zero filler; every word contributes either to what the tool does or when it can be used.

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 one-parameter status check, the core is covered: purpose and precondition are explicit. But with no output schema, the return value (e.g., a boolean) is undefined, and the behavior when no active session exists is unstated. Adequate but with clear gaps given the lack of annotations.

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% — the udid parameter is already documented as 'iOS device UDID' in the schema. The description adds no parameter-level meaning, so the baseline of 3 for high schema coverage applies.

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 states a specific verb and resource: 'Check if an iOS device screen is locked.' This is unambiguous and naturally distinguishes it from sibling ios_unlock, which changes lock state rather than querying it. An agent can tell them apart from name and description alone.

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 gives a clear, explicit precondition for use: 'Requires an active iOS automation session.' This is the key contextual guidance an agent needs before invoking the tool. It stops short of 5 because it doesn't name alternatives or exclusions (e.g., directing an agent to ios_unlock when the goal is to change state rather than check it).

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

ios_long_pressAInspect

Long press at (x,y) on an iOS device screen. Triggers context menus, peek/pop, drag handles. Distinct from ios_swipe (has motion) and ios_drag_drop (hold + motion). Coordinates are screen points. Requires an active iOS automation session.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesX coordinate (screen points)
yYesY coordinate (screen points)
normNoIf true, x/y (and path points) are 0..1 FRACTIONS of the screen — pass `pixelInScreenshot ÷ screenshotSize` directly (scale-free, matches the frontend, avoids point-guessing). Default false = iOS screen points.
udidYesiOS device UDID
inputNoInput path. 'auto' (default) drives the gesture through the automation session. 'hid' drives it through the direct input path instead, which needs no automation session — it reports 'no HID available' on iOS 17.x or with no tunnel.
durationNoHold duration in ms (default: 800)

TDQS

A3.7/5.0
Behavior2/5

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

With no annotations, the description must carry the behavioral burden. It does state effects and a session prerequisite, but the 'Requires an active iOS automation session' claim is overbroad because the input schema documents a 'hid' path that needs no automation session. Similarly, 'Coordinates are screen points' ignores the norm parameter that switches x/y to fractions. These are materially misleading for invocation.

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?

Three concise sentences front-load the action, then add effects, sibling distinctions, coordinate meaning, and a prerequisite. Every sentence earns its place; there is no filler or repetition.

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?

Although the schema is rich, the description's unqualified session and coordinate claims create wrong expectations for valid invocation modes. It also provides no output/error/fallback behavior and no guidance on when to use 'auto' versus 'hid'. Overall, an agent cannot reliably select or invoke this tool correctly in all supported modes.

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 coverage is 100%, so the baseline is 3, but the description adds no value beyond the schema and actually conflicts with it: it omits the norm coordinate switch and the HID input alternative. The blanket 'screen points' and 'requires session' statements can actively mislead an agent about two of the six parameters.

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 opens with a specific verb and resource: 'Long press at (x,y) on an iOS device screen.' It names concrete effects (context menus, peek/pop, drag handles) and explicitly distinguishes itself from ios_swipe and ios_drag_drop, so an agent can tell exactly what this tool does.

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?

It gives applicable use cases and names two alternative tools with the deciding criterion: ios_swipe has motion, ios_drag_drop has hold plus motion. This is explicit when-to-use vs. alternatives guidance, plus a prerequisite statement.

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

ios_mjpeg_screenshotAInspect

PREFERRED fast screenshot of an iOS device via the MJPEG stream. Returns the JPEG image PLUS a text block with the image pixel size and the device POINT size, and the exact formula to convert a pixel you read off the image into iOS screen points for the HID/tap tools (the image is NOT 1:1 with device points — guessing that scale is the #1 cause of missed taps). Much faster than ios_screenshot; use it for routine per-action checks. Auto-wakes on a black frame. Requires an active iOS automation session, because the speed comes from reading the frame stream that session is already running — with no session, use ios_fast_screenshot instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID

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 carries the full burden. It discloses the return payload (JPEG + text block with pixel/point sizes and conversion formula), the non-1:1 scaling caveat, auto-wake behavior, and the session requirement. This is comprehensive for a read-only screenshot 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?

Every sentence earns its place: speed, return content, scaling warning, usage advice, session requirement, and fallback. Front-loaded with the key advantage. 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?

For a tool with no output schema, the description fully explains what the agent gets back and why it matters. It covers prerequisites, alternatives, and the critical scaling formula. Nothing essential is missing.

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 udid at 100%, so baseline is 3. The description does not add extra meaning to the parameter beyond the session requirement, which is more about usage than the parameter itself. No need for more.

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 states a specific verb ('fast screenshot') and resource ('iOS device via MJPEG stream'), and differentiates itself from siblings by naming ios_screenshot and ios_fast_screenshot. The agent can immediately tell this tool's niche without opening schemas.

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 says when to use (routine per-action checks) and when not to use (no session → use ios_fast_screenshot). Also names the slower alternative (ios_screenshot) and the reason (speed). No ambiguity.

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

ios_navigate_urlAInspect

Navigate Safari to a URL on an iOS device via the automation session (address-bar type + submit), then VERIFY the navigation actually landed via the Web Inspector — so it never falsely reports success. For Safari, prefer ios_safari_navigate (CDP-based, also cold-opens Safari). Requires an active iOS automation session (auto-starts if needed).

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesURL to navigate to (include https://)
udidYesiOS device UDID

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 carries the full behavioral burden, and it delivers by revealing the underlying mechanism (address-bar typing + submit) and the verification through Web Inspector, explicitly avoiding false success reports. It also discloses the auto-start session behavior, going well beyond a generic 'navigate to URL' 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?

Three compact sentences cover the core action, verification behavior, the preferred alternative, and prerequisites. There is no filler, and the most important purpose information is front-loaded.

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?

The description is largely complete given the absence of annotations and output schema: it covers purpose, mechanism, verification, the sibling alternative, and session prerequisites. It could be slightly more explicit about when exactly to fall back to this tool if ios_safari_navigate is unavailable, but the guidance is strong overall.

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%: url is described as 'URL to navigate to (include https://)' and udid as 'iOS device UDID'. The description adds no further parameter-level nuance, so the baseline of 3 is appropriate.

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

Purpose5/5

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

The description states a precise action — navigate Safari to a URL on an iOS device — plus the mechanism (address-bar type + submit) and a verification step via Web Inspector. It also differentiates itself from the sibling ios_safari_navigate by describing that alternative as CDP-based, so an agent can tell them apart.

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?

It explicitly says to prefer ios_safari_navigate for Safari and gives the reason (CDP-based, also cold-opens Safari), which effectively tells the agent when not to use this tool. It also states the prerequisite of an active iOS automation session and notes that one auto-starts if needed.

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

ios_notifications_captureAInspect

Watch which notifications an iOS device receives and return them. Use this to confirm an app actually got a push or alert — for example waiting for a one-time passcode to arrive after triggering a login. Reports WHICH app was notified, WHEN, whether the notification contained a one-time code, and whether it was actually shown or silently suppressed. It CANNOT return the notification text: the device keeps the title and body private. To read the words, capture while the banner is on screen and use ios_page_source. By default it returns as soon as the first notification arrives, so trigger the action first and call this straight after (or run it while the action happens). No automation session required.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID
secondsNoHow long to wait at most (default 30, max 45)
bundleIdNoOnly notifications for this app, e.g. "com.example.app" (exact match)
oneTimeCodeNoDetect whether each notification contains a one-time passcode. Off by default because it makes the device report far more detail and costs noticeably more; turn it on for OTP tests.
waitForFirstNoReturn as soon as the first matching notification arrives (default true). Set false to collect everything for the whole window.
oneTimeCodeOnlyNoOnly return notifications containing a one-time code. Implies oneTimeCode.

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 carries the full burden and meets it: it discloses what is reported (app, time, OTC presence, shown/silently suppressed), the hard limitation (no text), the default early-return behavior, and that no automation session is required. This goes well beyond the name and schema.

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 dense but every sentence earns its place: purpose, motivating example, output contents, explicit limitation, alternative, and timing. The most important scoping details are 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?

Given there is no output schema and no annotations, the description is unusually complete: it states the returned data categories, the key limitation, the alternative path, the default wait behavior, and session requirements. An agent can decide when to call it and what to expect.

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?

All six parameters already have descriptive schema text, so the baseline is 3. The description's mention of returning as soon as the first notification arrives merely restates waitForFirst's documented default and adds usage timing rather than new parameter meaning.

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 opening sentence names a specific action (watch/return notifications), a concrete resource (iOS device notifications), and an explicit use case (confirming an app received a push/OTP). It also draws a clear boundary by warning it cannot return notification text and pointing to ios_page_source for that, so an agent can tell it apart from capture/read tools.

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?

Gives explicit when-to-use context ('confirm an app actually got a push or alert', OTP arrival after login) and precise timing instructions (trigger action first, call immediately or run while action happens). It also states what the tool cannot do and names the alternative, covering both selection and invocation.

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

ios_orientationBInspect

Set the screen orientation of an iOS device. Requires an active iOS automation session.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID
orientationYesOrientation: PORTRAIT or LANDSCAPE

TDQS

B3.4/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions the requirement of an active session but does not specify whether the orientation change affects the device's UI orientation immediately, whether a rotation animation is involved, or if any side effects occur. It also doesn't state error conditions (e.g., becomes a no-op in landscape-only apps) or interaction with other orientation-related tools.

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 a single sentence that efficiently states the purpose and a key prerequisite. It is front-loaded with the action and resource, and there is no filler. The only minor deduction is for the lack of any additional useful behavioral context that could be added without much length.

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 two well-documented parameters and no output schema, the description covers the basics: what it does and a key prerequisite. However, it lacks guidance on typical use cases (e.g., testing landscape layout) and doesn't mention whether it restores orientation or handles multiple sessions, which could be relevant. Overall, it's adequate but not fully complete for an agent with no other context.

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?

The schema already documents both parameters with 100% coverage (udid and orientation enum). The description adds no new meaning beyond what the schema provides, so it receives the baseline score of 3. The enum values are self-explanatory; the description's mention of 'screen orientation' aligns with the 'orientation' parameter without adding syntax details.

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 ('Set'), the resource ('screen orientation of an iOS device'), and the target platform. It distinguishes the tool from generic 'device_orientation' and 'ios_rotate' siblings by specifying it sets the screen orientation to PORTRAIT or LANDSCAPE, not arbitrary rotation angles.

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 by stating 'Requires an active iOS automation session', indicating it must be used in that context. However, it does not explicitly state when to use this vs. alternatives like ios_rotate_hid or device_rotate, nor when not to use it. The guidance is clear but not differentiated from siblings.

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

ios_page_sourceAInspect

Get the UI hierarchy (page source) of an iOS device — THE single source of truth for element coordinates (physical screen points). Default format is "description": a compact list of visible named elements as Type: "name" @ (cx,cy) WxH, where (cx,cy) is the element CENTER and the exact tap point; when the visible text differs from the name (an app that sets accessibility identifiers) it is appended as label="…", and the element holding focus is flagged [focused] — on an Apple TV that is the element tvos_select/tvos_focus acts on. Prefer acting on these labels via ios_tap_by_label rather than tapping raw coordinates. Elements with 0-width/height bounds (e.g. bottom-tab labels) are flagged [zero-area] — they cannot be tapped by coordinate; use ios_tap_by_label instead. FINDING THINGS IN LONG LISTS: pass search to grep the WHOLE hierarchy (including elements scrolled off-screen) — matches below the fold are flagged [off-screen]; bring them into view with ios_scroll_to_element, don't swipe blindly. To disambiguate duplicate labels, filter by type or use ios_find_element (strategy "accessibility id"). Use format "xml" to JUDGE FROM THE TREE instead of trusting a coordinate: with label it returns the COMPLETE SUBTREE of that element (a sign-in dialog is ~15 lines, where the whole tree is ~185k characters and will not fit in a response), and without it the tree comes back with anonymous layout containers pruned — nothing findable is ever hidden behind a pruned ancestor. Reach for the subtree whenever you need attributes the compact format omits: value, placeholderValue, focused, enabled. Requires an active iOS automation session (auto-starts if needed).

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoFilter (description format): only this element type, prefix optional e.g. "Button" or "XCUIElementTypeButton".
udidYesiOS device UDID
labelNoFilter: only return elements matching this label/name
formatNoOutput format: "description" (default, compact readable summary) or "xml" (full hierarchy)
searchNoCase-insensitive substring searched across the WHOLE hierarchy — type AND label — INCLUDING elements scrolled off-screen. Use this to locate an item in a long list (e.g. "Safari" in Settings) without swiping; off-screen hits are flagged [off-screen] so you can ios_scroll_to_element to them. Overrides visibleOnly.
visibleOnlyNoFilter: exclude elements outside the current viewport (default: true; ignored when search is set)
tappableOnlyNoFilter (description format): only interactive control types (Button, Cell, Link, TextField, Switch, Tab, etc). Default false.

TDQS

A5/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure, and it is extraordinarily complete. It covers output semantics (format 'description' vs 'xml'), coordinate meaning (element CENTER as exact tap point), flag conventions ([focused], [zero-area], [off-screen]), pruning behavior for anonymous containers, output size limits (~185k characters), and the auto-start session requirement. Every notable side effect or format nuance an agent would need is disclosed upfront.

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?

Despite being long, every sentence carries actionable information that would otherwise require separate lookups or trial-and-error. The core purpose and the most critical coordinate semantics are front-loaded, followed by usage heuristics and specific format behaviors. There is no filler, no repetition of schema text, and the structure (defaults → flags → search → xml → session) follows a natural decision flow.

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?

For a tool with 7 parameters, no annotations, no output schema, and a complex output model, the description leaves nothing essential uncovered. It explains the output format, the meaning of every flag, the relationship to companion tools, the trade-offs between formats, and the conditions required to run. An agent could confidently invoke this tool correctly in almost any scenario without further exploration.

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?

Though schema coverage is 100%, the description adds substantial semantic depth beyond the schema. For example, the `search` parameter is explained as grepping the 'WHOLE hierarchy — including elements scrolled off-screen' with flags, the `label` parameter is tied to returning 'the COMPLETE SUBTREE', and `type` is linked to description-format filtering and prefix flexibility. The schema gives names; the description gives the behavioral meaning needed to choose the right 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 opens with a precise verb-object pair: 'Get the UI hierarchy (page source) of an iOS device' and immediately positions it as 'THE single source of truth for element coordinates (physical screen points).' This clearly differentiates it from page-source tools on other platforms, and the rest of the description references specific iOS sibling tools (ios_tap_by_label, ios_scroll_to_element), so any ambiguity with generic page-source tools is removed.

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 gives explicit directives on when to use companion tools: 'Prefer acting on these labels via ios_tap_by_label rather than tapping raw coordinates', 'bring them into view with ios_scroll_to_element, don't swipe blindly', 'use ios_find_element (strategy "accessibility id")' for duplicate labels, and 'Reach for the subtree whenever you need attributes the compact format omits.' It also states when to prefer 'xml' over 'description' and when to use `search`. This is actionable, context-specific guidance with no vague phrasing.

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

ios_pcap_startAInspect

Start a device-wide NATIVE network packet capture on an iOS device. Captures REAL packets at the network layer, mostly TLS-encrypted, so there are NO HTTP bodies — the result is a Wireshark .pcapng for packet-level analysis. One capture per device. Optionally filter by process (process name, e.g. mobilesafari / backboardd) or interfaceName (e.g. en0), and auto-stop after packets frames. End with ios_pcap_stop. (For Safari HTTP traffic with bodies, use ios_safari_capture_network instead.)

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID
packetsNoStop automatically after N packets (optional; default: until ios_pcap_stop)
processNoOnly capture packets for this process name (optional)
interfaceNameNoOnly capture this interface, e.g. en0 (optional)

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and is largely successful: it discloses network-layer capture, TLS encryption/no HTTP bodies, pcapng output, one-capture-per-device constraint, and auto-stop behavior. It does not explicitly state what happens if a capture is already running, but the constraint is implied.

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?

All four sentences contribute distinct value: purpose, output caveat, optional filters, and workflow/alternative. Front-loaded with the core action and no redundant filler.

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 capture-start tool with no output schema and no annotations, the description covers purpose, output format, filters, lifecycle, and alternatives. It could mention the return/status payload, but it gives enough for an agent to invoke and manage the capture correctly.

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 the baseline is 3. The description adds value beyond the schema by explaining process and interfaceName filters, giving examples, and tying packets to auto-stop behavior.

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 a specific verb and resource: 'Start a device-wide NATIVE network packet capture on an iOS device.' It also names the output format and clearly differentiates from ios_safari_capture_network by contrasting packet-level TLS-encrypted capture with HTTP-body capture.

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 guidance: use for packet-level Wireshark analysis, pair with ios_pcap_stop, and for Safari HTTP traffic with bodies use ios_safari_capture_network instead. This clearly routes an agent between otherwise similar capture tools.

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

ios_pcap_statusAInspect

Report the active native packet capture on an iOS device: whether it is running and how many bytes have been captured so far.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It does state that it reports whether capture is running and byte count, implying a read-only operation, but it does not explicitly confirm no side effects, mention error cases (e.g., no active capture), or describe the output format. It adds some value beyond the schema but leaves gaps in 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?

The description is a single, well-structured sentence that front-loads the primary purpose (report active capture) and then details what is reported (running status, bytes). There is no redundancy or unnecessary information. It is appropriately concise and scannable.

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 status tool with one parameter and no output schema, the description is reasonably complete. It specifies what the tool reports, and the lack of an output schema is somewhat compensated by the description of the return content. However, it does not mention prerequisites (e.g., an active capture) or any error handling, which could be useful but are not critical for a status query. Overall, it is adequate for an agent to understand its function.

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% (the udid parameter is described as 'iOS device UDID'). The tool description adds no additional meaning about the parameter, such as format, source, or constraints. Given the high schema coverage, the baseline of 3 applies; the description does not compensate or enhance the 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 states a clear and specific purpose: reporting the active native packet capture status on an iOS device, including running state and byte count. It identifies the resource (packet capture) and the action (report) unambiguously, and the output is described. It distinguishes itself from sibling start/stop tools by focusing on status rather than action.

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 checking status of an ongoing capture, but it does not explicitly mention when to use it versus ios_pcap_start or ios_pcap_stop, nor does it state prerequisites like an active capture session. The context from sibling names helps, but the description itself offers no direct guidance or exclusions.

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

ios_pcap_stopAInspect

Stop the active native packet capture on an iOS device and return the capture as a pcapng. Small captures (<1 MB) are returned inline as base64; larger ones are written to a .pcapng file on the RDS host and the path is returned. Open the pcapng in Wireshark.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID

TDQS

A4.2/5.0
Behavior4/5

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

The description discloses important behavioral details: the size threshold (<1 MB) that determines whether the capture is returned inline or written to a file, and the file format (.pcapng). It also mentions opening in Wireshark, which helps the agent understand the output. No annotations are provided, so the description carries the burden, and it does so well.

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 and well-structured, with the core action stated first, followed by the output behavior and a practical tip. Every sentence adds value without unnecessary 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?

The description covers the essential information an agent needs: what the tool does, how the output is delivered, and the file format. It doesn't mention prerequisites like needing an active capture, but that's implied by the tool name and the sibling ios_pcap_start. The lack of an output schema is compensated by the clear description of return behavior.

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?

The schema has 100% description coverage for the single parameter (udid), so the description doesn't need to add much. The description doesn't elaborate on the udid parameter, but the schema already documents it as 'iOS device UDID'. Baseline 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 action (stop the active native packet capture), the target (iOS device), and the result (return capture as pcapng). It also distinguishes itself from related tools like ios_pcap_start and ios_pcap_status by focusing on stopping and returning the capture.

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 implies this tool is used after starting a capture with ios_pcap_start, and it explains the output behavior (inline base64 for small captures, file path for larger ones). It doesn't explicitly state when not to use it or name alternatives, but the context of stopping an active capture is clear.

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

ios_performance_record_startAInspect

Start recording per-process CPU/memory over time (like screen recording, for metrics). Drive the app, then call ios_performance_record_stop with the returned sessionId to get the full time-series + summary. Focus one app with bundleId, else records the top processes by CPU.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID
bundleIdNoFocus one app (bundle id / name); else top processes by CPU
intervalMsNoSample interval ms (default 1000)

TDQS

A4.4/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 behavioral disclosure burden. It does this well by explaining the recording lifecycle, the need to call the stop sibling, and the default 'top processes' behavior. It could be more explicit about side effects like whether only one recording can run at a time, but the essentials are covered.

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 with no filler. The core action is front-loaded, followed by the workflow and parameter behavior. Every sentence contributes useful information.

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 start-recording tool with one required parameter and no output schema, the description covers the necessary steps and the stop callback. It could be slightly more explicit about the start call's own return value, but 'the returned sessionId' makes this reasonably clear.

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 the baseline is 3. The description adds meaningful semantics beyond the schema by explaining that bundleId focuses recording on one app and that omitting it records top processes by CPU, and by referencing the sessionId needed for the stop call.

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 states a specific action — 'Start recording per-process CPU/memory over time' — with a clear resource and scope. It also distinguishes this tool from its paired sibling ios_performance_record_stop and nearby ios_performance_snapshot by framing it as the start of a time-series workflow.

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 gives a clear workflow: start recording, drive the app, then call the stop tool with the returned sessionId. It also explains the optional bundleId behavior and the fallback to top processes, but it doesn't explicitly discuss when to prefer ios_performance_snapshot or mention exclusions.

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

ios_performance_record_stopAInspect

Stop a performance recording started with ios_performance_record_start and return the full time-series + a per-process summary (avg/peak CPU, peak memory).

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIdYesSession id from ios_performance_record_start

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It discloses that the tool stops a recording and returns data, which is the core behavior. However, it does not disclose side effects such as whether stopping is idempotent, what happens if the sessionId is invalid, or whether resources are cleaned up. For a stop operation, this is a moderate gap but not misleading.

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?

One sentence, front-loaded with the action and resource, and it packs in the return-value summary without waste. Every word earns its place.

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 single-parameter stop tool with no output schema, the description is nearly complete. It explains what it stops, what it returns, and where the parameter comes from. The only missing piece is error/edge-case behavior, which is minor for this tool's simplicity.

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% and the single parameter sessionId is described as 'Session id from ios_performance_record_start'. The description reinforces this by referencing the start tool, giving the agent confidence about where the value comes from. This adds meaningful context beyond the schema's bare 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 states a specific verb ('stop'), a specific resource ('performance recording'), and explicitly ties it to its start counterpart (ios_performance_record_start). It also names the return payload (time-series + per-process summary), which distinguishes it from sibling tools like ios_performance_snapshot and android_performance_record_stop.

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 clearly implies this tool is the stop counterpart to ios_performance_record_start, which is the primary usage context. It does not explicitly state when not to use it or name alternatives like ios_performance_snapshot, but the pairing with the start tool is strong enough guidance for an agent to select it correctly.

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

ios_performance_snapshotAInspect

Snapshot per-process CPU %% and memory for a physical iOS device. Returns the top processes by CPU, or just one app when bundleId is given. No automation session required.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNNoLimit to the top-N processes by CPU (default 15)
udidYesiOS device UDID
bundleIdNoFocus a single app by bundle id (or app/process name), e.g. com.apple.mobilesafari

TDQS

A4/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 usefully states that no automation session is required and explains the return behavior, but it does not explicitly confirm that the operation is read-only/non-destructive or describe any prerequisites beyond a UDID. This is adequate but has room to be more explicit.

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 with no filler. The first sentence defines the resource, and the second explains output modes and the no-session prerequisite. Every sentence earns its place and the most important information is front-loaded.

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

Completeness4/5

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

For a relatively simple snapshot tool, the description covers platform, purpose, output shape, and key prerequisite. It lacks an explicit output schema or detailed return-format description, but the combination of the schema and description gives an agent enough to call it correctly.

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 already documents all three parameters. The description adds a small clarification that bundleId switches to a single-app snapshot, but it does not meaningfully extend the parameter guidance 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 uses a specific verb ('Snapshot') with a clear resource ('per-process CPU % and memory for a physical iOS device'). It also states the two output modes: top processes by CPU, or a single app when bundleId is provided, which distinguishes it from related tools like android_performance_snapshot and ios_ps.

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 clear context: it is for physical iOS devices, requires no automation session, and can focus on one app. It does not explicitly name alternatives or exclusions, but the platform and snapshot-vs-recording distinction is clear enough for an agent to choose this tool appropriately.

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

ios_pinchAInspect

Two-finger pinch-to-zoom centred at (x,y) on an iOS device. scale > 1 zooms IN (fingers spread), scale < 1 zooms OUT (fingers converge); ~2 doubles, ~0.5 halves. Both fingers ride a vertical axis through the centre and are auto-clamped on-screen. Use on Maps, Photos, Safari, camera. Coordinates are screen points. Requires an active iOS automation session.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesPinch centre X (screen points)
yYesPinch centre Y (screen points)
normNoIf true, x/y (and path points) are 0..1 FRACTIONS of the screen — pass `pixelInScreenshot ÷ screenshotSize` directly (scale-free, matches the frontend, avoids point-guessing). Default false = iOS screen points.
udidYesiOS device UDID
inputNoInput path. 'auto' (default) drives the gesture through the automation session. 'hid' drives it through the direct input path instead, which needs no automation session — it reports 'no HID available' on iOS 17.x or with no tunnel.
scaleYesEnd/start finger-separation ratio: >1 zoom in, <1 zoom out (0.2–5)
durationMsNoGesture duration in ms (default: 250)

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It discloses several behavioral traits: fingers ride a vertical axis, auto-clamped on-screen, requires an active iOS automation session, and the input path behavior is partially covered in the schema. It doesn't mention what happens on failure or whether the gesture is blocking, but the disclosed details are meaningful and go beyond the schema.

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 compact and front-loaded: it opens with the core action and center point, then explains scale direction, then finger behavior, then use cases, then coordinate system, then session requirement. Every sentence carries information and there is no filler.

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 gesture tool with 7 parameters and no output schema, the description covers the essential behavioral context: scale direction, coordinate system, clamping, and session requirement. It doesn't explain the 'norm' parameter's relationship to screenshots or the 'input' parameter's HID caveat in the description, but the schema already documents those. The description is complete enough for an agent to invoke it correctly.

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 the baseline is 3. The description adds value by explaining the scale semantics ('~2 doubles, ~0.5 halves') and the coordinate system ('screen points'), which reinforces and clarifies the schema. It doesn't add much beyond that, but the scale explanation is genuinely useful for correct invocation.

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 states a specific verb ('pinch-to-zoom'), the resource (iOS device), and the exact behavior (centred at x,y, scale >1 zooms in, <1 zooms out). It also names concrete use cases (Maps, Photos, Safari, camera), which distinguishes it from generic gesture tools like device_pinch or ios_swipe.

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 gives clear context on when to use it ('Use on Maps, Photos, Safari, camera') and explains the coordinate system and session requirement. It doesn't explicitly name alternatives or exclusions, but the use-case list plus the iOS-specific scope makes the intended usage clear enough.

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

ios_play_location_routeAInspect

Replay a moving GPS route on an iOS device — the device's location walks the waypoints in order, so an app under test sees travel rather than a teleport. Give waypoints (at least two lat/lon pairs) with secondsPerLeg for the pace, or gpxPath for a GPX file that already exists on the server. Returns as soon as playback starts; poll ios_get_location to watch it advance and call ios_clear_location to stop it (the last point stays simulated until you do). iOS 17+.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID
gpxPathNoPath to an existing GPX file ON THE SERVER. Mutually exclusive with waypoints.
waypointsNoRoute to walk, in order. At least two points. Mutually exclusive with gpxPath.
secondsPerLegNoSeconds spent travelling between consecutive waypoints. Default 2.

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations, the description carries the full behavioral burden. It discloses that playback is asynchronous, returns immediately, advances through waypoints in order, persists the simulated location until ios_clear_location is called, and applies only to iOS 17+. This is strong behavioral disclosure.

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?

Three sentences, each earning its place: purpose and differentiation, input options, and async/stopping behavior. The key differentiator is front-loaded and the structure is clean.

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?

For a tool with no output schema and no annotations, the description covers the essential runtime behavior: how playback works, the two mutually exclusive input modes, return timing, polling progress, stopping, persistence, and the iOS version requirement. No critical calling information is missing.

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 minimal semantics beyond the schema: it explains the 'pace' meaning of secondsPerLeg and that gpxPath is server-side, but these largely restate what the schema already documents.

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 replays a moving GPS route on an iOS device, contrasting it with a teleport. This distinguishes it from related location tools like ios_set_location and route-focused siblings.

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 explains when to use it (continuous movement instead of a single teleport) and names the follow-up tools ios_get_location and ios_clear_location. It does not explicitly name alternative tools like ios_set_location or state when not to use it, but the context is clear enough for correct selection.

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

ios_press_buttonAInspect

Press a hardware or keyboard button on an iOS device. Hardware: home, volumeUp, volumeDown. Keyboard submit: return, go, done, search. Editing: backspace (delete-left), delete (delete-right alias — iOS soft keyboard treats both the same in most contexts). Whitespace: tab. (On an Apple TV, press remote keys with ios_tv_button and change volume with ios_tv_volume — the hardware/keyboard buttons here are unavailable there.) Requires an active iOS automation session. Note: for reliable backspace, ensure the soft keyboard is actually raised (visible) before pressing — a tap that visually focuses a field may not yet have raised the keyboard, in which case key events are dropped.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID
inputNoInput path. 'auto' (default) drives the gesture through the automation session. 'hid' drives it through the direct input path instead, which needs no automation session — it reports 'no HID available' on iOS 17.x or with no tunnel.
buttonYesButton name: home, volumeUp, volumeDown, return, go, done, search, backspace, delete, tab

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations, the description correctly carries the behavioral burden and adds useful detail: key events are dropped if the soft keyboard is not visibly raised, backspace/delete are aliases in most contexts, and Apple TV does not support these buttons. However, the unconditional statement 'Requires an active iOS automation session' contradicts the schema's 'input' parameter, which says 'hid' drives the direct input path and needs no automation session. This overgeneralization prevents a higher score.

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 front-loaded with the core purpose, then quickly enumerates button categories, and finishes with a precise Apple TV routing note and a practical reliability caveat. Every sentence provides useful information and there is no filler.

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?

The schema covers all parameters and the description covers button semantics, platform exclusions, required session context, and a known failure mode. The only meaningful gap is the contradictory session requirement: an agent reading only the prose could believe automation session is always required, even though the 'hid' input path works without one.

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 the baseline is 3. The description adds genuine meaning beyond the schema by grouping button values into semantic categories and explaining the subtle backspace/delete alias and soft-keyboard timing behavior. It does not fully reconcile the session requirement with the 'hid' input path, so it stops short of a 5.

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 opens with a specific verb and resource: 'Press a hardware or keyboard button on an iOS device.' It clearly lists the button families (hardware, keyboard submit, editing, whitespace) and explicitly distinguishes Apple TV remote interactions by naming ios_tv_button and ios_tv_volume as the correct alternatives. An agent can reliably identify what this tool does and what it does not do.

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 clear context for when to use the tool, including a concrete exclusion for Apple TV and explicit routing to sibling tools. It also states the active iOS automation session prerequisite. It does not explicitly compare against nearby siblings like ios_key_hid or ios_send_keys, but the core usage boundary is well defined.

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

ios_psAInspect

List running processes on an iOS device. No automation session required.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It clearly states the action 'list running processes', which implies a read-only operation. But it does not explicitly mention the absence of side effects, permissions, or what the return value contains. For a simple list tool, this is adequate but minimal.

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 zero filler. Every word earns its place, and the key constraint (no session required) is included efficiently.

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 one-parameter list tool with no output schema, the description is mostly complete. It tells the agent what it does and an important prerequisite (no session needed). It does not describe return format, but that is a minor gap given the simplicity and clarity of the purpose.

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% (the only parameter 'udid' has a description). The description adds no parameter information beyond what the schema provides, so the baseline 3 applies.

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 states a specific verb and resource: 'List running processes on an iOS device.' This is clear and distinct from sibling tools, and the added 'No automation session required' further distinguishes it from session-dependent tools like ios_start_session or ios_end_session.

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 gives a clear usage context: it does not require an automation session, which tells the agent when it can invoke this tool versus tools that need a session. However, it does not explicitly name alternatives or provide exclusion criteria, so it stops short of full guidance.

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

ios_rebootAInspect

Reboot an iOS device. DISRUPTIVE and NOT REVERSIBLE: the device is unreachable for roughly a minute, the automation session and the stream go down, and anything in progress on the device is lost. Requires confirm=true — there is no default. Do NOT reach for this to recover from a flaky tool call; try ios_end_session first, which resets the automation session without touching the device. Reboot only when the device itself is wedged and a human has asked for it. No automation session required. The Android counterpart is device_reboot.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID
confirmYesMust be exactly true. Acknowledges the device will restart and the session will be lost.

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 carries full responsibility for behavioral disclosure. It thoroughly warns that the operation is disruptive, non-reversible, causes ~1 minute unreachability, drops the session and stream, and loses in-progress work. It also states the mandatory confirm=true requirement, covering all critical consequences.

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?

Every sentence earns its place: purpose, disruption warning, confirm requirement, anti-pattern, correct usage condition, and sibling differentiation. It is front-loaded with the core action and warning, then context, with no fluff or 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?

For a destructive tool with no annotations and no output schema, the description covers everything an agent needs: when to use, consequences, prerequisite (no session needed), and the alternative. It is fully self-contained and leaves no gap in calling the tool correctly.

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% and both parameters are fully documented in the input schema, including the const: true constraint on confirm. The description reiterates the confirm requirement but adds little beyond the schema—it doesn't clarify udid further. Baseline 3 is appropriate since schema already does the heavy lifting.

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 opens with a specific verb and resource: 'Reboot an iOS device.' It clearly distinguishes itself from siblings by naming ios_end_session as the alternative for session resets and device_reboot as the Android counterpart, making its unique purpose unmistakable.

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 when-to-use and when-not-to-use guidance is provided: 'Do NOT reach for this to recover from a flaky tool call; try ios_end_session first' and 'Reboot only when the device itself is wedged and a human has asked for it.' It also notes that no automation session is required, fully routing the agent.

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

ios_record_cleanupAInspect

Delete a finished iOS recording mp4 from disk. Pass the httpPath returned by ios_record_stop. Idempotent — deleting a non-existent file is not an error. Refuses to delete recordings that are still being written (call ios_record_stop first).

ParametersJSON Schema
NameRequiredDescriptionDefault
httpPathYeshttpPath returned by ios_record_stop (e.g. /recordings/rec-ios-<uuid>.mp4)

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It clearly states that the deletion is idempotent (deleting a non-existent file is not an error) and that it refuses to delete recordings that are still being written. These are non-obvious behaviors that help an agent understand side effects and failure modes, though it could also mention what happens on refusal (e.g., error vs. no-op).

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?

Three sentences, each with a distinct purpose: the action, the input source, and two key behavioral constraints (idempotency and refusal condition). No fluff; the most important information is front-loaded.

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

Completeness4/5

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

For a single-parameter, idempotent delete operation with no output schema, the description covers the essential context: what it deletes, where the input comes from, and the critical precondition (stop first). It does not describe the return value or error handling, but that is a minor gap given the simple nature of the operation and the behavioral clues already 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 description coverage is 100%, so the schema already documents httpPath with an example. The description repeats the source ('httpPath returned by ios_record_stop') but adds no new meaning; it merely echoes what the schema says. Thus the baseline of 3 applies.

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 states a specific verb ('Delete'), a precise resource ('finished iOS recording mp4 from disk'), and clarifies the input source ('httpPath returned by ios_record_stop'). This clearly distinguishes it from general file deletion tools like ios_file_delete and from recording start/stop tools like ios_record_start/stop.

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 explains exactly what input to pass and from where ('Pass the httpPath returned by ios_record_stop'), and includes a clear precondition: 'call ios_record_stop first' for recordings still being written. It does not explicitly name alternative tools to consider, but the context is unambiguous enough for an agent to select it for cleaning up finished recordings.

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

ios_record_startAInspect

Start a screen recording on an iOS device. Captures the per-device MJPEG broadcast and remuxes server-side into an H.264 mp4 written under /recordings/. An iOS session must already be running (call ios_start_session first). The recording auto-stops after maxDurationSec (default 300, max 600) so a forgotten stop call cannot fill the disk. Returns a recordingId to pass to ios_record_stop. Only one recording per device at a time.

ParametersJSON Schema
NameRequiredDescriptionDefault
fpsNoInput MJPEG framerate hint (default 24). Higher = smoother but larger files.
udidYesiOS device UDID
maxDurationSecNoHard cap on recording duration in seconds (default 300, max 600). Recording auto-stops if exceeded.

TDQS

A4.4/5.0
Behavior5/5

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

With no annotations to rely on, the description fully discloses key behaviors: the MJPEG-to-H.264 remuxing, server-side file output under /recordings/, the auto-stop mechanism (maxDurationSec) to prevent disk overflow, and the single-recording-per-device constraint. This gives the agent a complete mental model of side effects and safety without needing annotations.

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 a compact paragraph of five sentences, each adding essential information without redundancy. It front-loads the primary purpose and then covers technical details, prerequisites, and constraints. Slightly dense but efficient; no wasted words.

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 there is no output schema, the description explicitly states the return value (recordingId) and its intended usage (pass to ios_record_stop). It covers the required prerequisite (session start), parameter behavior (auto-stop), and a key constraint (single recording). Everything an agent needs to call the tool correctly is present.

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 description only needs to add value beyond parameter labels. It reinforces the maxDurationSec auto-stop behavior and mentions defaults (300/600), but adds little else for fps or udid that the schema already explains. This meets the baseline 3 but does not exceed 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 action ('Start a screen recording'), the target resource ('on an iOS device'), and adds specificity by explaining it captures the MJPEG broadcast and remuxes to H.264 mp4. This distinguishes it from sibling tools like ios_performance_record_start and device_record_start, which have different recording purposes. The constraint 'Only one recording per device at a time' further clarifies its scope.

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

Usage Guidelines4/5

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

It provides explicit prerequisites ('An iOS session must already be running (call ios_start_session first)') and explains the workflow ('Returns a recordingId to pass to ios_record_stop'). However, it does not explicitly contrast with alternative recording tools (e.g., ios_performance_record_start) or state when to prefer this over them, relying instead on the intrinsic 'screen recording' context.

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

ios_record_stopAInspect

Stop an iOS screen recording started by ios_record_start. Sends SIGTERM to the remux pipeline so the mp4 has a valid moov atom. Returns hostPath, sizeBytes, durationMs, and codec.

ParametersJSON Schema
NameRequiredDescriptionDefault
recordingIdYesrecordingId returned by ios_record_start

TDQS

A4.2/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. It discloses the SIGTERM-to-remux-pipeline behavior and the reason (valid moov atom), plus lists return fields. This goes beyond a simple 'stops recording' and gives operational 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?

Two sentences, no filler. The action, mechanism, and return payload are all stated efficiently.

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 single-parameter stop tool with no output schema and no annotations, the description covers input provenance, operational side effect, and return fields. However, it does not clarify how it differs from related sibling tools ios_record_cleanup or ios_actions_record_stop, leaving some ambiguity in a large sibling set.

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 already documents the sole parameter as 'recordingId returned by ios_record_start' (100% coverage). Description echoes this relationship but adds no new format or syntax details, so baseline 3 applies.

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 'Stop' with resource 'iOS screen recording' and explicitly references pairing with ios_record_start. It clearly identifies what the tool does and distinguishes from other start/stop pairs.

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?

States the tool stops a recording 'started by ios_record_start', establishing the precondition and when to use it. However, it does not explicitly exclude alternatives like ios_record_cleanup or ios_actions_record_stop.

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

ios_release_contacts_hidAInspect

Lift held contacts placed by ios_contacts_hid. Every finger lifts in ONE frame — releasing them one at a time would leave the others down between reports, which the device reads as the gesture continuing. Coordinates are where each finger ends. Returns "no HID available" on iOS 17.x / no-tunnel.

ParametersJSON Schema
NameRequiredDescriptionDefault
normNoIf true, x/y (and path points) are 0..1 FRACTIONS of the screen — pass `pixelInScreenshot ÷ screenshotSize` directly (scale-free, matches the frontend, avoids point-guessing). Default false = iOS screen points.
udidYesiOS device UDID
pointsYesWhere each finger is when it lifts, in the same order as ios_contacts_hid

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations, the description carries the full burden. It discloses atomic release behavior (one frame), the meaning of coordinates (where each finger ends), and an important failure mode (returns 'no HID available' on iOS 17.x / no-tunnel). This gives the agent a realistic picture of runtime behavior and edge cases.

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 three terse sentences, all information-dense. The purpose and key behavioral caveat are front-loaded, with the error condition appended as a discrete fact. No filler or redundant restatement of the tool name.

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?

For a tool with 3 params, 100% schema coverage, and no output schema, the description covers everything needed to invoke it correctly: what it does, what the inputs mean, the critical timing rule, and the known error scenario. The pairing with ios_contacts_hid and ordering constraint are explicitly addressed.

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%, and the points parameter schema already states 'Where each finger is when it lifts, in the same order as ios_contacts_hid'. The description repeats that same information ('Coordinates are where each finger ends') without adding new detail about udid or norm. Baseline 3 is appropriate because the schema already documents the semantics.

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 first sentence is a specific verb-resource pair: 'Lift held contacts placed by ios_contacts_hid.' It distinctly identifies this as the release counterpart to ios_contacts_hid Henshaw, separating it from generic ios_release_hid and the broader HID family.

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 gives clear context for when to use the tool: after ios_contacts_hid, to lift all held fingers. It explains a critical usage constraint ('Every finger lifts in ONE frame') and why ('the device reads as the gesture continuing'). However, it doesn't explicitly name alternatives like ios_release_hid or state when not to use this tool, so it stops short of full when/when-not guidance.

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

ios_release_hidAInspect

Lift the held contact at (x,y) via direct HID input (no automation session needed) — mouse-button-up / touch-up. Pairs with ios_contact_hid. Coordinates are iOS screen points. Returns "no HID available" on iOS 17.x / no-tunnel.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesX coordinate (screen points, or 0..1 fraction if norm=true)
yYesY coordinate (screen points, or 0..1 fraction if norm=true)
normNoIf true, x/y (and path points) are 0..1 FRACTIONS of the screen — pass `pixelInScreenshot ÷ screenshotSize` directly (scale-free, matches the frontend, avoids point-guessing). Default false = iOS screen points.
udidYesiOS device UDID

TDQS

A4.2/5.0
Behavior4/5

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

No annotations are present, so the description carries the behavioral burden. It discloses the input mechanism, event type, coordinate space, and the 'no HID available' failure on iOS 17.x/no-tunnel. Missing minor edge-case behavior, but strong coverage overall.

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?

Three compact sentences with no filler. The key action is front-loaded, and the pairing and compatibility caveat are delivered efficiently.

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 release action, the description plus fully documented schema gives enough to call the tool correctly: event semantics, pairing, coordinate meaning, and known failure condition. No output schema exists, but the main error return is disclosed.

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 already documents all parameters. The description adds only a repeated statement that coordinates are iOS screen points and does not meaningfully extend parameter understanding 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?

States a specific verb and resource: 'Lift the held contact at (x,y) via direct HID input' with event semantics 'mouse-button-up / touch-up.' Explicitly pairs with ios_contact_hid, which distinguishes it from sibling HID gesture tools.

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?

Clearly implies the use case by pairing with ios_contact_hid and noting 'no automation session needed.' It gives good context but does not explicitly state when to prefer this over alternatives or when not to use it.

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

ios_rotateAInspect

Two-finger rotation (twist) about (x,y) on an iOS device — the gesture maps, photo editors and canvas apps listen for. Positive degrees turns clockwise on screen, negative anticlockwise. The fingers follow the ARC of a circle rather than a straight line, which is what a rotation recogniser needs. Coordinates are screen points. IN HID MODE (iOS 18+) the rotation is centred exactly on (x,y) and any angle up to 360° works. OTHERWISE it falls back to the native rotate gesture, which turns the ACTIVE APP about its own centre: (x,y) is ignored there. Any angle works on both paths. Fine for a full-screen map or canvas; check ios_hid_status first if you need the rotation centred on a specific control. Requires an active iOS automation session.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesRotation centre X (screen points)
yYesRotation centre Y (screen points)
normNoIf true, x/y (and path points) are 0..1 FRACTIONS of the screen — pass `pixelInScreenshot ÷ screenshotSize` directly (scale-free, matches the frontend, avoids point-guessing). Default false = iOS screen points.
udidYesiOS device UDID
inputNoInput path. 'auto' (default) drives the gesture through the automation session. 'hid' drives it through the direct input path instead, which needs no automation session — it reports 'no HID available' on iOS 17.x or with no tunnel.
degreesYesTurn in degrees; positive is clockwise on screen
durationMsNoGesture duration in ms (default: 400)

TDQS

A4.8/5.0
Behavior5/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 of behavioral disclosure, and it does so thoroughly. It states positive degrees turn clockwise, negative anticlockwise, fingers follow an arc (not a straight line), coordinates are screen points, and explains the two execution paths (HID vs native) with their respective behaviors and limitations. It also notes the requirement for an active iOS automation session. All relevant behavioral traits are disclosed without ambiguity.

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 lengthy but well-structured and front-loaded with the core purpose. It organizes the behavioral differences (HID vs native) clearly, and every sentence contributes useful information. While not brief, the density is justified by the tool's complexity; the structure aids comprehension. A slightly more compact phrasing would be possible, but the current format is efficient for the information conveyed.

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 (two modes, fallback behavior, coordinate semantics, norm scaling, and session requirement), the description is remarkably complete. It covers all critical aspects: what the gesture does, the coordinate system, the HID vs native distinction, the norm parameter, the input path options, and the prerequisite of an active session. No output schema exists, but for a gesture tool, the return is likely a status or void, and the description adequately prepares the agent to invoke it correctly. Nothing essential is missing.

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 input schema has 100% description coverage, so the baseline is 3. The description adds meaningful context beyond the schema: it explains the norm parameter as scale-free fractions matching the frontend, and clarifies the 'auto' vs 'hid' input paths and their implications (HID needs no automation session but reports 'no HID available' on iOS 17.x). This adds value beyond the schema's terse descriptions, justifying a score above baseline.

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 two-finger rotation (twist) gesture on an iOS device at a specified (x,y) coordinate, and explicitly mentions the use cases (maps, photo editors, canvas apps). It distinguishes itself from sibling gesture tools like ios_pinch and ios_two_finger_swipe by specifying rotation and the coordinate-centering behavior. The verb is specific ('rotate') and the resource is clearly identified (iOS device).

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 when-to-use guidance: it explains the HID mode (iOS 18+) centers on (x,y) and allows any angle, while the native fallback ignores (x,y) and rotates the active app about its own center. It advises checking ios_hid_status first when centering on a specific control is needed, effectively routing the agent to an alternative tool. This is clear, actionable guidance that covers when and when-not 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.

ios_safari_capture_networkAInspect

Capture network requests made by a Safari page on an iOS device over a time window. Collects Network.requestWillBeSent, Network.responseReceived, Network.loadingFinished, and Network.loadingFailed events and returns merged records. Returns { records, bodiesOmitted? } in summary format, or a HAR 1.2 document when format="har". Each record: { requestId, method, url, requestHeaders?, status?, statusText?, mimeType?, resourceType?, responseHeaders?, encodedDataLength?, state, errorText?, startTimestamp?, endTimestamp?, body?, bodyTruncated?, bodyError? }. Set includeBodies=true to fetch response bodies for completed text-like responses (json|text|xml|javascript|html|css|svg|x-www-form-urlencoded); per-body cap: 10 000 chars (bodyTruncated=true when hit); total cap: 200 000 chars (excess records counted in bodiesOmitted). Body fetch failures set bodyError on that record. Set throttle to emulate bandwidth for the capture window only (best-effort; cleared afterwards): slow-3g (51 200 B/s) or fast-3g (209 715 B/s). NOTE: throttle="offline" is NOT supported on iOS — WebKit only has bandwidth throttling; use android_devtools_capture_network for offline. When throttle was active, a top-level throttle field appears in the output. Returns at most limit records (default 100, most-recent first) so heavy pages stay within the token budget — filter with urlSubstring / onlyErrors; total/returned appear when records were dropped. Default window: 5 000 ms. Maximum: 30 000 ms. Omit pageId to auto-pick the active page. Pass url to navigate inside the capture session and record the full page-load waterfall (pass the current URL to reload). NOTE: some iOS versions report no request timings to a remote inspector. The result then says timestamped=false, startTimestamp/endTimestamp are omitted and no duration can be derived — what each request was and how it answered is still accurate, so do not read speed from a capture that reports it.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoNavigate the page to this URL inside the capture session to record the full page-load waterfall (pass the current URL to reload)
udidYesiOS device UDID
limitNoMax records to return, most-recent first (default 100). Heavy pages make hundreds of requests; the default keeps the response within the MCP token budget. total/returned are included when records were dropped.
formatNoOutput format: "summary" (default) returns { records, bodiesOmitted? }; "har" returns a HAR 1.2 document
pageIdNoCDP target id from ios_safari_list_pages. Omit it to use the page ios_safari_navigate last landed on (or, failing that, the first loaded page) — only pass it to target a DIFFERENT tab
throttleNoEmulate bandwidth for the capture window only (best-effort; cleared afterwards). slow-3g: 51 200 B/s. fast-3g: 209 715 B/s. offline is NOT supported on iOS — use android_devtools_capture_network instead.
triggerJsNoJavaScript run INSIDE the capture window (after the collector attaches) to trigger requests race-free — e.g. "fetch('/api/x')" or a click. For a full-page navigation prefer the `url` param. Both avoid the attach-race of triggering from a separate call.
durationMsNoCollection window in milliseconds (default: 5000, max: 30000)
onlyErrorsNoOnly failed / 5xx records
urlSubstringNoOnly records whose URL contains this substring — target the requests you care about
includeBodiesNoFetch response body for completed text-like responses (default: true). Request bodies (postData) are always captured. Set false to skip response bodies for a lighter payload. Per-body cap: 10 000 chars. Total cap: 200 000 chars.
platformVersionNoIgnored (kept for compatibility)

TDQS

A5/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and delivers: it discloses body truncation caps, bodiesOmitted, bodyError on failures, that throttle is best-effort and cleared afterwards, that offline is unsupported, that records are limited to 100 to protect token budget, that dropped records surface total/returned, and the timestamped=false limitation on some iOS versions. No behavioral trait is left to guesswork.

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 lengthy but dense and well sequenced: purpose, event collection, output shape, body limits, throttle caveat, record limit, timing caveat. Every sentence carries operational information; there is no filler.

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?

For a 12-parameter tool with no annotations and no output schema, the description covers the output contract, default behavior, edge cases, unsupported platform behavior, and failure modes. An agent has enough context to invoke it correctly for a wide range of capture scenarios.

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?

While schema description coverage is 100%, the description adds substantial meaning beyond the schema: text-like MIME types eligible for body capture, byte caps, filter advice (urlSubstring/onlyErrors), default and max window times, and semantics for url/pageId/triggerJs interactions. It enriches the parameter model rather than repeating 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 first sentence states a specific action and resource: 'Capture network requests made by a Safari page on an iOS device over a time window.' The description further specifies exact CDP events collected, output formats, and record shape, making the tool's function unmistakable and distinguishing it from the android_devtools_capture_network sibling.

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 gives explicit usage guidance and alternatives: it says to use android_devtools_capture_network for offline throttling since 'throttle="offline" is NOT supported on iOS,' explains when to pass url vs triggerJs ('Both avoid the attach-race'), and tells the agent to omit pageId to auto-pick the active page. This routes the agent to the right tool and invocation pattern.

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

ios_safari_close_tabAInspect

Close Safari tabs on an iOS device by title, or list what is open. Safari's tab overview is the only way to close a tab — the Web Inspector protocol behind ios_safari_list_pages cannot do it — so this drives the native UI. Call with no title to list the open tabs and close nothing. Titles match case-insensitively on any part of the title. Note this sees MORE tabs than ios_safari_list_pages, which only reports pages that are loaded and inspectable. Requires Safari in the foreground and an active iOS automation session.

ParametersJSON Schema
NameRequiredDescriptionDefault
allNoClose every tab matching `title` instead of only the first. Default false.
udidYesiOS device UDID
titleNoClose tabs whose title contains this text. Omit to just list the open tabs.

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral burden. It discloses that the tool drives native UI, explains the limitation of Web Inspector, and reveals that it sees more tabs than ios_safari_list_pages. It also covers matching behavior (case-insensitive, partial) and the no-title listing behavior. It doesn't mention side effects or output format, but the core behavioral traits are well documented.

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 five sentences with no filler. The main purpose is front-loaded, followed by a necessary technical context, usage nuance, and prerequisites. Every sentence contributes new information, and the structure makes the tool's behavior easy to parse.

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?

The description is thorough for a tool with this complexity: it covers the core action, list-vs-close behavior, matching semantics, comparison with sibling tools, and environmental prerequisites. The only notable gap is the absence of return value or output details, but with no output schema defined, this is a minor omission rather than a critical flaw.

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 description coverage is 100%, so baseline is 3. The description adds significant semantic value beyond the schema: it clarifies that omitting `title` triggers a list-only mode, specifies case-insensitive partial matching, and implicitly explains that `all` affects how many matching tabs are closed. This elevates it above the baseline.

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 opens with a specific verb-resource pair: "Close Safari tabs on an iOS device by title, or list what is open." It explicitly differentiates from ios_safari_list_pages by noting that the Web Inspector protocol cannot close tabs, making the tool's scope unmistakable.

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 states exactly when to use this tool versus ios_safari_list_pages and provides the selection criterion: closing tabs requires native UI, while listing inspectable pages goes through Web Inspector. It also gives concrete usage instructions: call with no title to list, and notes prerequisites (Safari foreground, active automation session).

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

ios_safari_console_logsAInspect

Collect console logs, exceptions, and log entries from a Safari page on an iOS device over a time window. Enables the Runtime and Log domains, then listens for Runtime.consoleAPICalled, Runtime.exceptionThrown, and Log.entryAdded events, and returns an array of { level, text, url?, line?, source? }. This is a LIVE-WINDOW collector: it only captures events fired AFTER it attaches (plus the buffered history WebKit replays on enable), so triggering the logging from a SEPARATE tool call races the attach and is missed. To capture logs from an action, pass triggerJs (run inside the window). Default window: 5 000 ms. Maximum: 15 000 ms. Omit pageId to auto-pick the active page.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID
pageIdNoCDP target id from ios_safari_list_pages. Omit it to use the page ios_safari_navigate last landed on (or, failing that, the first loaded page) — only pass it to target a DIFFERENT tab
triggerJsNoJavaScript run INSIDE the collection window (after the listeners attach) so the logs it produces are captured race-free — e.g. "location.reload()" or "document.querySelector('#go').click()". Prefer this over triggering from a separate call.
durationMsNoCollection window in milliseconds (default: 5000, max: 15000)
platformVersionNoIgnored (kept for compatibility)

TDQS

A4.7/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 and does so thoroughly: it discloses the live-window semantics, buffered history caveat, enabled domains, and return format. The race condition warning is especially valuable. No contradiction with annotations because none exist.

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 longer than average, but every sentence earns its place: core action, event mechanics, live-window warning, trigger guidance, defaults, and page selection. No filler or redundancy; it front-loads the most important 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?

Everything needed to call correctly is present: return shape, page targeting, trigger mechanism, duration limits, and the critical live-window behavior. Without an output schema, the description appropriately fills in what the agent will receive.

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 baseline applies. The description confirms triggerJs, durationMs bounds, and pageId auto-picking, but does not add parameter-level meaning beyond what the schema already provides.

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?

Begins with a concrete verb and resource ('Collect console logs... Safari page'), names the specific event listeners, and describes the return shape. It is clearly distinct from siblings like ios_safari_capture_network or ios_safari_evaluate.

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?

Gives explicit guidance: pass triggerJs inside the window, warns that a separate tool call races the attach and misses events, states default/max window, and explains when to omit pageId. This prevents a common, subtle misuse.

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

ios_safari_cookiesAInspect

Get cookies for a Safari page on an iOS device via the Web Inspector (Page.getCookies), including httpOnly / secure / sameSite / domain / path / expiry — useful for debugging auth/session state. Falls back to document.cookie (non-httpOnly only) if the CDP call is unavailable. Omit pageId to auto-pick the active Safari page.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID
pageIdNoCDP target id from ios_safari_list_pages. Omit it to use the page ios_safari_navigate last landed on (or, failing that, the first loaded page) — only pass it to target a DIFFERENT tab
platformVersionNoIgnored (kept for compatibility)

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations provided, the description carries the full behavioral burden and succeeds: it discloses the primary CDP mechanism, the fallback to document.cookie, the limitation that the fallback only returns non-httpOnly cookies, and the auto-pick behavior for omitted pageId. This gives an agent an accurate mental model of execution and limitations.

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 deliver the tool's purpose, returned fields, fallback behavior, and page-selection semantics with no filler. The most decision-relevant information is front-loaded.

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

Completeness5/5

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

Despite having no annotations and no output schema, the description is self-sufficient: an agent knows what the tool returns, how it behaves under failure/fallback, when to use it, and how page selection works. Nothing critical is missing for correct invocation.

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?

The input schema already has 100% parameter coverage with rich descriptions, especially for pageId. The description adds framing about page auto-selection and the Web Inspector path, but it does not materially add parameter meaning beyond what the schema already provides, so the baseline of 3 is appropriate.

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

Purpose5/5

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

The description uses a specific verb and resource: 'Get cookies for a Safari page on an iOS device via the Web Inspector (Page.getCookies)'. It enumerates the returned cookie fields, making the tool's scope unmistakable and clearly distinct from cookie-writing or cookie-clearing siblings.

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 identifies a concrete use case ('useful for debugging auth/session state') and explains the automatic page selection behavior when pageId is omitted. It does not explicitly state when not to use the tool or name alternative cookie tools, so it stops short of full exclusion guidance.

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

ios_safari_elementsAInspect

Extract locator-friendly element data from a Safari page for building Playwright/Selenium locators. For each element (interactive/meaningful elements by default, or those matching selector) returns: tag, trimmed text, key attributes (id/name/type/role/aria-label/placeholder/href/value/data-testid + any data-*), classes, bounding box {x,y,w,h} and a visibility flag. USE suggested — the locator worth writing (id, then test-id, name, aria-label, placeholder), each verified unique before it is offered, with playwright giving the same target in getByRole/getByTestId form. css and xpath are diagnostic fallbacks, not recommendations: the CSS path is an nth-of-type chain over layout classes and does not belong in a page object. When suggested is null nothing stable exists — act via ref and treat the missing test-id as the real finding. Set includeStyles=true to also return a curated set of computed styles per element. Omit pageId to auto-pick the active Safari page.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID
limitNoMax elements to return (default 150)
pageIdNoCDP target id from ios_safari_list_pages. Omit it to use the page ios_safari_navigate last landed on (or, failing that, the first loaded page) — only pass it to target a DIFFERENT tab
selectorNoCSS selector to scope extraction (default: interactive/meaningful elements)
includeStylesNoInclude a curated set of computed styles per element (default false)
platformVersionNoIgnored (kept for compatibility)

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 carries the full burden and it delivers: it discloses default element selection ('interactive/meaningful elements by default, or those matching `selector`'), output shape, the uniqueness verification of `suggested`, the null behavior ('act via `ref`'), and optional style data via `includeStyles`. No annotations are present to contradict it.

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 definition is dense but front-loaded: purpose and return shape come first, followed by prioritized output guidance and one line for optional style/auto-pick behavior. Every sentence adds useful information and there is no filler or repetition of schema text.

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?

The description is complete despite lacking an output schema: it enumerates the return fields, explains the `suggested`/`playwright`/`css`/`xpath` field semantics, covers default and optional behavior, and gives fallback guidance for `suggested === null`. An agent has enough to call it correctly and interpret results.

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%, giving a baseline of 3. The description adds value by explaining the `selector` default, the `pageId` auto-pick behavior, and the semantics of `includeStyles` and `suggested`; it also flags `platformVersion` as ignored. These extras justify one point above baseline.

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 opens with a specific verb-resource combination: 'Extract locator-friendly element data from a Safari page for building Playwright/Selenium locators.' It details what is returned (tag, text, attributes, bounding box, visibility) and distinguishes itself from sibling DOM/page tools by focusing on locator-friendly extraction.

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 strong context: use this when you need Playwright/Selenium locators, and it explicitly tells the agent to prefer `suggested` with `playwright` form and to treat `css`/`xpath` as diagnostic fallbacks. It does not explicitly name alternative sibling tools like ios_locators_for or ios_safari_get_dom, so it falls short of a full when-vs-alternatives statement.

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

ios_safari_evaluateAInspect

Evaluate a JavaScript expression in the context of a Safari page on an iOS device via the Web Inspector. Uses Runtime.evaluate internally. Returns the result as a string (JSON-stringified for objects), followed by a second block naming the tab it actually ran on, read live from that page — check it if a result looks like it came from the wrong page. Omit pageId to auto-pick the frontmost Safari tab. An expression that evaluates to a promise IS awaited, so fetch(...).then(r => r.json()) returns the parsed body rather than an empty object; a promise still pending when the call times out is reported as such instead of being silently returned empty. WAITING: UI frameworks paint a frame or two AFTER the click that triggers them, so an evaluate fired immediately can read the DOM before the menu/overlay/row exists. Use waitForSelector to block until an element appears (and waitMs to let it settle) INSTEAD of splitting the work into a separate poll call — both wait inside this same call on the same tab. DO NOT CLICK WITH THIS TOOL. A click dispatched from JavaScript — .click(), or dispatchEvent of a MouseEvent — is an untrusted event (isTrusted false). Component frameworks and anything gated on a real user gesture (file pickers, clipboard, autoplay, anti-bot checks) may ignore it, so the evaluate SUCCEEDS and the page does nothing — a failure that looks like a passing call. Use webpage_click instead: it has the device tap its own screen at the element, delivering a real trusted touch (pointerdown, touchstart, mousedown, click). Same for typing — webpage_type.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID
pageIdNoCDP target id from ios_safari_list_pages. Omit it to use the page ios_safari_navigate last landed on (or, failing that, the first loaded page) — only pass it to target a DIFFERENT tab
waitMsNoSettle delay applied just before evaluating (and AFTER waitForSelector matches, when both are given). Use for animations that have started but not finished. Maximum 10000 ms
expressionYesJavaScript expression to evaluate
waitTimeoutMsNoHow long waitForSelector may poll. Default 5000 ms, maximum 15000 ms
platformVersionNoIgnored (kept for compatibility)
waitForSelectorNoCSS selector to wait for BEFORE evaluating. Polls until it matches, then runs the expression. Errors if it never appears within waitTimeoutMs — it will not evaluate anyway and hand back a null that reads like a real answer

TDQS

A4.9/5.0
Behavior5/5

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

No annotations exist, so the description carries the full behavioral burden, and it pays off: it discloses Runtime.evaluate backing, the string/JSON-stringified return plus a second tab-name block, promise awaiting and timeout reporting, and the untrusted-event pitfall for programmatic clicks. This is unusually rich behavioral disclosure for an evaluate 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?

The description is long but every block earns its place: WAITING and DO NOT CLICK are front-loaded warning sections, and the promise/return details are dense rather than padded. It is appropriately structured for the number of important caveats.

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?

With no output schema and no annotations, the description still provides all essential calling context: return shape, tab targeting, promise/timeout behavior, waiting semantics, and the click/type trap. Nothing critical for safe and correct invocation is missing.

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 the baseline is 3, but the description meaningfully enriches parameters: waitForSelector blocks before evaluating and errors on timeout, waitMs is a settle delay applied after the selector matches, and omitted pageId auto-selects a tab. However, it says 'frontmost Safari tab' while the schema's pageId description says the omitted default is the page ios_safari_navigate last landed on, a minor conflict that prevents a top score.

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?

Opens with a precise verb+resource: 'Evaluate a JavaScript expression in the context of a Safari page on an iOS device via the Web Inspector,' which immediately distinguishes it from web_evaluate and android_devtools_evaluate. It also explicitly warns against using it for clicking, further scoping its purpose.

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 routing: use waitForSelector/waitMs 'INSTEAD of splitting the work into a separate poll call,' and 'DO NOT CLICK WITH THIS TOOL' with 'Use webpage_click instead' plus 'Same for typing — webpage_type.' This tells an agent exactly when to use this tool and when to switch to an alternative.

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

ios_safari_get_domAInspect

Get the outer HTML of a Safari page (or a CSS-selector-matched element) on an iOS device via the Web Inspector. Executes document.documentElement.outerHTML, or document.querySelector(selector)?.outerHTML when a selector is provided. Output is capped at 100 000 characters; a truncation notice is appended when the limit is hit. Omit pageId to auto-pick the active Safari page.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID
pageIdNoCDP target id from ios_safari_list_pages. Omit it to use the page ios_safari_navigate last landed on (or, failing that, the first loaded page) — only pass it to target a DIFFERENT tab
selectorNoOptional CSS selector — returns outerHTML of the first matching element, or null if not found
platformVersionNoIgnored (kept for compatibility)

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral burden and does a solid job: it discloses the exact read-only JS executed, the 100,000-character output cap, the truncation notice, and the pageId auto-pick behavior. It does not explicitly address failure modes or permissions, but for a read-only getter the key behavioral details are present.

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

Conciseness5/5

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

Three tight sentences are front-loaded with purpose, then implementation, then critical output limits, with zero filler. Every sentence serves a distinct job: what it returns, how it computes it, and what caveats apply.

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 read-only tool with no output schema and no annotations, the description is nearly complete: it explains the return value, selector behavior, truncation, and pageId semantics. It falls just short of mentioning error conditions and explicit return type/null behavior when a selector matches nothing, though the schema partially covers those.

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% and the parameter descriptions are already rich (pageId target selection, selector null behavior, ignored platformVersion). The tool description adds some implementation color but does not meaningfully go beyond what the schema already documents, so the baseline of 3 is appropriate.

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

Purpose5/5

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

The description opens with a specific action and resource: 'Get the outer HTML of a Safari page (or a CSS-selector-matched element) on an iOS device via the Web Inspector.' It also names the exact JavaScript calls, which makes it easy to distinguish from generic get-dom or evaluate tools.

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 use case is implied by 'Get the outer HTML of a Safari page' and 'via the Web Inspector,' so an agent can infer when to reach for it. However, it never explicitly contrasts this with nearby siblings like ios_safari_elements, ios_safari_evaluate, or webpage_get_dom, and there is no when-not-to-use guidance.

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

ios_safari_heap_snapshotAInspect

Take a JavaScript heap snapshot of a Safari page on an iOS device and write it to a file on the RDS host, returning { nodeCount, edgeCount, bytes, path }. The file is a V8-format .heapsnapshot that loads directly in Chrome DevTools → Memory → "Load profile", so it can be handed to a human to open. Snapshots are multi-MB, which is why the content is never returned inline. Use it to find what a page is retaining: take one, exercise the leak, take another, and compare nodeCount/edgeCount — a count that climbs and never comes back down across repetitions of the same interaction is the signal. Garbage is collected first by default so unreachable objects do not read as a leak; pass collectGarbage=false only when you deliberately want to measure uncollected garbage. Omit pageId to use the active tab. Requires Web Inspector enabled: Settings → Safari → Advanced → Web Inspector.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID
pageIdNoTarget page id from ios_safari_list_pages (default: active tab)
collectGarbageNoRun garbage collection before snapshotting (default: true)

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure, and it does so thoroughly. It reveals that the tool writes a file to the RDS host (a side effect), never returns content inline due to multi-MB size, runs garbage collection by default and how to override it, and requires Web Inspector to be enabled. It also specifies the exact return fields. This is exemplary transparency for a tool with zero annotations.

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 dense but not wasteful; every sentence adds operational value. It front-loads the core purpose and outcome, then provides usage guidance, behavior details, and a prerequisite. It is slightly long, but for a tool of this complexity, the length is justified. It could be tightened slightly, but overall it is well-structured.

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?

For a tool that writes a file, returns structured data, has a default garbage-collection behavior, and requires a specific device setting, the description covers all essential aspects: what it does, where the output goes, how to interpret the return values for leak detection, the default and override for collectGarbage, the pageId default, and the Web Inspector prerequisite. Nothing an agent needs to call it correctly is missing.

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 already provides descriptions for all three parameters (100% coverage), so the baseline is 3. The description adds meaningful semantics beyond the schema: it explains why collectGarbage should be set to false (to measure uncollected garbage) and reiterates the pageId default (active tab). It also clarifies the return structure. This added value justifies a 4.

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 states a specific verb (take), a resource (JavaScript heap snapshot of a Safari page on an iOS device), and the outcome (write to a file and return nodeCount/edgeCount/bytes/path). It clearly distinguishes this tool from the many iOS Safari siblings by its unique function (heap snapshotting). No ambiguity about what the tool does.

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 gives a concrete usage pattern: take a snapshot, exercise the leak, take another, and compare counts to detect retention. It also explains when to set collectGarbage=false and notes that omitting pageId uses the active tab. It does not explicitly mention alternatives or exclusions, but the guidance is clear and actionable, so it earns a 4 rather than a 5.

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

ios_safari_list_pagesAInspect

List inspectable Safari pages on an iOS device via the Web Inspector CDP bridge. Returns index, pageId (the CDP target id), url, title, type, active, and state per page, plus a top-level currentActiveTab (the pageId on screen, or null when none is). index is positional within THIS listing and is not stable across calls — resolve it to a pageId here, then pass that pageId. iOS shows exactly ONE tab at a time, so every ios_safari_* tool called WITHOUT pageId drives the active tab and refuses a backgrounded one — you do NOT need to list pages and thread an id just to act on the current tab, only to target a DIFFERENT one. state says what each page is doing, and the distinction matters because the fixes are opposite: "foreground" = the tab on screen (at most one, and it is the active: true one); "background" = alive but not visible, because another tab or another app is in front — pass its pageId explicitly to drive it anyway; "unresponsive" = the page answers nothing, either because it is suspended (device asleep or locked) or because a dialog (alert/confirm/prompt) is open and blocking the page — those look identical from here, so take a screenshot to tell them apart rather than assuming the device is asleep; "unprobed" = past the probe cap, nothing was measured. Pages "background" with no foreground means Safari is not frontmost. safariFrontmost answers that directly when the device can be asked: false means Safari is NOT the app on screen, so NO tab here is what the device is showing — the tabs are still alive and drivable, but do not read one as "what the user sees", and do not mistake a tab left over from earlier work for the one you just opened. It is omitted when it could not be determined, never guessed. Confirming state costs one bounded check per page (run in parallel), so this is a little slower than a bare listing and never fails the whole call just because nothing is in the foreground. Requires Web Inspector enabled: Settings → Safari → Advanced → Web Inspector.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID
platformVersionNoIgnored (kept for compatibility)

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 carries the full burden. It discloses that confirming state costs a bounded check per page, that the call never fails solely due to no foreground page, that safariFrontmost is omitted when undetermined (never guessed), and the ambiguity of 'unresponsive' states. It also explains the instability of index and the requirement for Web Inspector, all beyond what annotations would typically provide.

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 long but dense with essential information, and the main purpose is front-loaded. It is structured logically with clear sections (return values, index caveat, state explanations, safariFrontmost, cost). While it could be trimmed slightly, the length is justified by the tool's complexity, so it earns a 4 rather than a 5.

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 there is no output schema, the description comprehensively explains all return fields, the state machine, and how to interpret the results. It also covers prerequisites and the relationship to other tools, leaving nothing an agent needs to know to call it correctly.

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?

The input schema already fully describes both parameters (udid and platformVersion, with platformVersion marked as ignored). The description does not add additional parameter-level semantics beyond what the schema provides, so the baseline score of 3 applies.

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

Purpose5/5

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

The description clearly states the verb 'List' and the resource 'inspectable Safari pages on an iOS device', and specifies the exact return fields. It differentiates from other ios_safari_* tools by explaining that listing is only needed to target a non-active tab, which is a distinct purpose.

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?

It explicitly states when to use this tool ('only to target a DIFFERENT one') and when not to ('you do NOT need to list pages... just to act on the current tab'). It also provides detailed guidance on interpreting states and when to use screenshots to disambiguate unresponsive pages, which directly informs whether to call this tool.

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

ios_safari_mock_addAInspect

Add (or update in place, when id matches an existing route) a mock/abort rule for Safari/WKWebView requests on this device. mode "mock" (default) serves the given status/headers/body without the request leaving the device; mode "abort" fails it so the page sees a network error. Routes apply immediately and survive navigation. WEB CONTENT ONLY: this intercepts requests made by browser/WebView pages. Requests made by native app code are NOT intercepted and never will be by this tool. Nothing device-wide is changed and no certificate is installed — the effect is scoped to the page. For requests made by native app code use ios_traffic_mock_add instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoRoute id to update in place; omit to auto-generate a new one
bodyNoResponse body for mode "mock" (text, or base64 when bodyEncoding is "base64")
modeNo"mock" serves a canned response (default); "abort" fails the request
udidYesDevice id (Android serial or iOS UDID)
methodNoOptional HTTP method filter (e.g. "GET"/"POST"); matches any method when omitted
pageIdNoPin routing to a specific page id (from the *_list_pages tool). Omit to follow the active page automatically across navigations and new tabs — recommended.
statusNoHTTP status to serve for mode "mock" (default 200)
delayMsNoLatency injected before responding/failing, in ms (clamped to 60s)
enabledNoWhether the route is active (default true) — disabled routes are kept but ignored
headersNoResponse headers for mode "mock", as {headerName: value} — e.g. {"content-type": "application/json"}. On iOS a `charset` in content-type is NOT applied to the response: an HTML body with non-ASCII characters must declare it in the document (e.g. <meta charset="utf-8">) or it will be decoded with the default encoding and render as mojibake.
matchUrlYesURL pattern to match against the request's full URL
matchTypeNoHow matchUrl is interpreted against the request URL (default "contains")
bodyEncodingNoEncoding of `body` (default "text")

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden, and it does a strong job: it discloses the update-in-place semantics for matching 'id', the immediate effect, survival across navigation, and the explicit non-goal (native app interception). It also discloses the subtle iOS charset behavior in headers. It falls slightly short of a 5 only because it doesn't specify what the response looks like or address failure modes such as 'what happens if id is missing'.

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 dense but every sentence adds value: scope, modes, defaults, navigation behavior, and an explicit pointer to the sibling tool. It is somewhat long with capitalized emphasis that may be unnecessary, but it remains highly informative and well-organized, leading with the core purpose before caveats.

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 13-parameter tool with no output schema, the description covers the conceptual model, the update semantics, and the critical scope limitation, which is enough for an agent to know when and how to use it. Minor gaps remain—there is no mention of how to verify a route was added or how to remove it—but the sibling list and parameter descriptions already cover removal. Overall it is complete for selection and invocability.

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 description coverage is 100%, so the schema already documents each parameter thoroughly. The tool description adds important semantic context beyond that: it explains 'mock' vs 'abort' behavior, clarifies the default mode, and notes that routes apply immediately and survive navigation. It also clarifies that the tool covers only WebView/browser content, which affects how matchUrl and pageId parameters are interpreted.

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 begins with a specific verb ('Add (or update in place)') and clearly identifies the resource: a mock/abort rule for Safari/WKWebView requests on this device. It distinguishes itself from related tools by explicitly stating the native-scope sibling tool to use instead, and the named modes 'mock' and 'abort' precisely define the behavior.

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 explicitly states when to use this tool versus alternatives, saying 'For requests made by native app code use ios_traffic_mock_add instead.' It also explains the WEB CONTENT ONLY scope, provides default behavior, and clears up that no device-wide changes or certificates are installed. This gives the agent clear selection guidance.

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

ios_safari_mock_clearAInspect

Remove ALL Safari/WKWebView routes for this device and un-arm interception. Call this when finished — it restores completely normal networking for the browser on that device.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice id (Android serial or iOS UDID)

TDQS

A4.5/5.0
Behavior5/5

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

There are no annotations, so the description carries the full burden. It clearly discloses the destructive scope ('Remove ALL routes'), the disarm action ('un-arm interception'), and the resulting state ('restores completely normal networking'). This is strong behavioral disclosure.

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 with no filler. The action is front-loaded, followed by a clear usage directive and outcome. Every phrase 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?

For a simple single-parameter teardown tool, the description is complete: it states what is removed, what is un-armed, when to call it, and what the final network state will be. No output schema exists, so return-value detail is not required.

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?

The schema already documents the single required parameter, udid, at 100% coverage. The description only reinforces that the operation targets 'this device,' adding no new semantic detail, so the baseline score of 3 is appropriate.

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

Purpose5/5

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

The description names a specific action ('Remove ALL Safari/WKWebView routes'), the scope ('for this device'), and the secondary effect ('un-arm interception'). This clearly differentiates it from selective tools like ios_safari_mock_remove and from similar clear tools on other platforms.

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 usage trigger: 'Call this when finished.' It does not explicitly name alternatives or when-not-to-use, but the cleanup intent and the 'Remove ALL' phrasing make selection straightforward.

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

ios_safari_mock_listAInspect

List the Safari/WKWebView mock/abort routes currently registered for this device, in match order (first match wins). WEB CONTENT ONLY: this intercepts requests made by browser/WebView pages. Requests made by native app code are NOT intercepted and never will be by this tool. Nothing device-wide is changed and no certificate is installed — the effect is scoped to the page.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice id (Android serial or iOS UDID)

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations, the description carries the full behavioral burden and does so thoroughly. It discloses that nothing device-wide is changed, no certificate is installed, and the effect is scoped to the page. It also reveals match-order behavior, making side-effects and semantics 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?

Two sentences with no filler. The core function and ordering are front-loaded, and the scope clarifications are packed into a second concise sentence. 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?

For a one-parameter list tool with no output schema, the description is complete. It explains scope, ordering, side-effect profile, and platform specificity. No critical information needed to call or interpret the tool is missing.

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 baseline is 3. The description adds no parameter-specific detail beyond the schema's 'Device id (Android serial or iOS UDID)', which is adequate for a single simple parameter.

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 states a specific action (List) on a specific resource (Safari/WKWebView mock/abort routes) and defines ordering semantics (match order, first match wins). It clearly distinguishes from sibling mock operations (add, clear, remove, status) and from other platforms' mock list tools by naming Safari/WKWebView exactly.

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 gives clear context: WEB CONTENT ONLY and explicitly states that native app code requests are not intercepted. This tells the agent when the tool applies, though it doesn't name an alternative tool for native traffic. The boundary is clear enough to avoid misuse.

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

ios_safari_mock_removeAInspect

Remove one Safari/WKWebView route by id. When the last route is removed the device is automatically un-armed, so no traffic is paused for nothing.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesRoute id to remove (from *_mock_list)
udidYesDevice id (Android serial or iOS UDID)

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations provided, the description must carry the burden of behavioral disclosure. It does add a useful behavioral detail: removing the last route auto-un-arms the device, preventing unnecessary traffic pausing. However, it does not disclose error handling, idempotency, or what happens if the route id does not exist. The description covers the primary side effect but is not exhaustive.

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 two concise sentences, front-loaded with the core purpose, followed by a useful behavioral note. No redundant or irrelevant information. Every sentence earns its place.

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 removal tool with two well-documented parameters and no output schema, the description is largely complete. It explains the key side effect (auto un-arm) and implies that the id comes from the mock list (via schema). It does not describe failure modes or prerequisites, but these are minor given the tool's simplicity and the family context.

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 already documents both parameters (id and udid) clearly. The description adds minimal additional meaning beyond confirming that the operation removes by id, which is already implied by the schema's field description. Baseline of 3 is appropriate since the schema handles parameter documentation.

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 'Remove' and the resource 'Safari/WKWebView route by id', distinguishing it from sibling tools like add, list, clear, and status. It is unambiguous about the operation and target.

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. It implies usage by naming the operation and the side effect of auto-un-arming, but lacks explicit guidance like 'Use this to remove a single route; use ios_safari_mock_clear to remove all routes.' The auto-un-arm note gives context but not explicit selection criteria.

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

ios_safari_mock_statusAInspect

Report whether Safari/WKWebView interception is currently armed on this device, which page target it is attached to, the active routes, and live hit counters (paused/mocked/aborted/passedThrough/errors). Check the counters to confirm a mock is actually firing — a route that never matches shows mocked: 0.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice id (Android serial or iOS UDID)

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the behavioral burden. It discloses what the tool reports, that counters are live, and that a non-matching route yields mocked: 0. 'Report' also implies a read-only operation, though it does not explicitly guarantee no side effects.

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

Conciseness5/5

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

Two sentences with no filler: the first states the tool's purpose and outputs, and the second provides operational guidance. Every clause adds value, and the most important information is front-loaded.

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

Completeness4/5

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

Despite having no output schema, the description enumerates the key returned dimensions: armed status, page target, active routes, and the counter categories (paused/mocked/aborted/passedThrough/errors). It could add details about the exact response shape or behavior when interception is not armed, but for a single-parameter status tool this is nearly 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% and the sole parameter udid is already documented as 'Device id (Android serial or iOS UDID)'. The description adds no parameter-specific detail, but none is needed since the schema fully covers the single parameter.

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 uses a specific verb ('Report') and names the exact resource (Safari/WKWebView interception), then lists what is reported: armed state, page target, active routes, and hit counters. This clearly distinguishes it from android_devtools_mock_status and webpage_mock_status by platform, and from mock_list tools by the status/counter focus.

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 final sentence gives an explicit use case: check the hit counters to confirm a mock is actually firing, with the concrete 'mocked: 0' signal for a route that never matches. It does not spell out when to prefer this over ios_safari_mock_list, but the status-checking intent is clear.

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

ios_safari_navigateAInspect

Navigate Safari to a URL on an iOS device. If a page is already inspectable, navigates the active tab in place; if Safari has no inspectable page (closed), cold-opens it to the URL (needs Settings → Safari → Advanced → Remote Automation). VERIFIES the resulting URL and returns { navigated, requestedUrl, finalUrl, pageId, method } — never a silent no-op. On success the page it landed on becomes this device's current page, so you can call ios_safari_get_dom / _evaluate / _elements / _console_logs / _capture_network / _cookies straight afterwards WITHOUT pageId and stay on this tab — no ios_safari_list_pages round trip needed. The returned pageId is only needed to come back to this tab after driving a different one. Prefer this over ios_navigate_url for Safari.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesURL to open (https:// is prepended if no scheme is given)
udidYesiOS device UDID
pageIdNoCDP target id from ios_safari_list_pages. Omit it to use the page ios_safari_navigate last landed on (or, failing that, the first loaded page) — only pass it to target a DIFFERENT tab
platformVersionNoIgnored (kept for compatibility)

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden and does so admirably. It discloses the conditional behavior (in-place navigation vs. cold-open), states that it verifies the resulting URL and never silently no-ops, and explains the side effect of making the landed page the current page for subsequent ios_safari calls.

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 dense but every sentence earns its place, covering purpose, conditional behavior, prerequisites, return contract, and downstream tool context. It is front-loaded with the core action and packs significant operational nuance without becoming unstructured.

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?

There is no output schema, but the description clearly enumerates the return fields { navigated, requestedUrl, finalUrl, pageId, method }. It also covers prerequisite setup, pageId usage, subsequent tool calls, and when a list_pages round trip is unnecessary, making it highly complete for agent invocation.

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 already fully documents all four parameters. The description reinforces pageId semantics but adds little parameter-level meaning beyond what the schema already states, keeping this at the baseline score.

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 states a specific verb and resource: 'Navigate Safari to a URL on an iOS device.' It also differentiates itself from the sibling ios_navigate_url by explicitly saying 'Prefer this over ios_navigate_url for Safari,' making the tool's scope unmistakable.

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 gives explicit when-to-use guidance: use it for Safari navigation, prefer it over ios_navigate_url for Safari, and it explains the two operational modes (active tab navigation vs. cold-open). It also mentions the required Remote Automation setting, giving concrete context for correct invocation.

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

ios_safari_set_input_filesAInspect

Set the files on a file-upload input () in Safari on an iOS device, WITHOUT opening the device's file picker. This is the only way to test an upload flow end to end on iOS: tapping an upload control opens a native sheet that automation cannot drive. Provide file content inline, or name a file already on the device (see ios_file_push / ios_upload_targets) to have it read from there. Fires the input and change events afterwards so framework bindings and validation run, then reads the input back and reports the file names and sizes the PAGE actually sees — so a silent no-op can't pass as success. Total content limit 2 MB.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID
filesYesFiles to attach. Pass several only for a multiple-file input
indexNoWhich match to use when the selector matches several (0-based, default 0)
pageIdNoCDP target id. Omit to use the page ios_safari_navigate last landed on
selectorYesCSS selector for the file input. Must resolve to an <input type="file"> element

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations provided, the description carries the full behavioral burden and does so thoroughly. It discloses that the tool bypasses the picker, fires input and change events, reads back the page-visible file names and sizes to catch silent no-ops, and enforces a 2 MB total content limit.

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 longer than typical but every sentence carries distinct operational value: the iOS-specific rationale, the file-provisioning options, event firing, post-set verification, and the size limit. It is front-loaded with the core purpose and constraint, so an agent can quickly decide relevance.

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?

For a tool with no annotations and no output schema, the description covers the critical operational context: why native automation fails, how to provide files, what events fire, how success is verified, and the 2 MB limit. Parameter-specific details not in the description are fully covered by the 100%-covered 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?

Schema coverage is 100%, so the baseline is 3. The description adds value above that by explaining the strategic choice between inline content and device-side files, referencing ios_file_push and ios_upload_targets, and stating the 2 MB aggregate limit that applies across the files array.

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 states exactly what the tool does: set files on an <input type="file"> element in Safari on iOS without opening the native file picker. It also differentiates it from naive tapping of upload controls and from related file staging tools like ios_file_push and ios_upload_targets.

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 clearly explains when this tool is necessary: tapping an upload control on iOS opens a native sheet automation cannot drive, making this the only way to test upload flows end to end. It also points to ios_file_push and ios_upload_targets for files already on the device, but does not explicitly enumerate exclusions such as web_upload_file or playwright_upload_file.

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

ios_safari_traceAInspect

Record a Performance trace of a Safari page on an iOS device over a time window and write it to a file on the RDS host, returning { eventCount, durationMs, bytes, path }. The file loads directly in Chrome DevTools → Performance → "Load profile", so it can be handed to a human to read the flame chart. Traces are multi-MB, so the content is never returned inline. Captures main-thread work (tasks, script execution, style, layout, paint) together with a JavaScript CPU sample run, so the flame chart shows which functions the time went to. Use it for "why is this page slow/janky" — long tasks and repeated layout show up as wide bars. Pass url to navigate INSIDE the recording and capture the full page load, or triggerJs to fire an interaction inside the window (both are the usual way to trace something specific rather than idle time). Set screenshots=true to include a filmstrip (roughly doubles the file size). Default window: 5 000 ms. Maximum: 30 000 ms. Omit pageId to use the active tab. NOTE: on some iOS versions WebKit reports no elapsed time to a remote inspector, and every event is then stamped 0. The recorded work and its nesting are still real, but durations and the flame chart timeline are not; the result says timestamped=false when this happens, so do not read timings from a trace that reports it. Requires Web Inspector enabled: Settings → Safari → Advanced → Web Inspector.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoNavigate the page to this URL inside the recording to capture the full page load
udidYesiOS device UDID
pageIdNoTarget page id from ios_safari_list_pages (default: active tab)
triggerJsNoJavaScript to evaluate inside the recording window to trigger the work being traced
durationMsNoRecording window in milliseconds (default: 5000, max: 30000)
screenshotsNoInclude a filmstrip (default: false)

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 carries the full disclosure burden and meets it thoroughly: it discloses the on-disk write, that content is never returned inline, that captures include main-thread work and JS CPU samples, that screenshots roughly double file size, the duration defaults, the active-tab fallback, the WebKit zero-timestamp caveat, and the Web Inspector prerequisite.

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 long but appropriately so for a complex tool. It front-loads the core action and return shape, then logically covers file format, captured data, use case, parameter guidance, defaults, the timestamp caveat, and setup requirement. Every sentence carries operational information; there is no filler.

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?

There is no output schema, so the description supplies the return contract and also covers file size behavior, capture scope, the known WebKit timestamp failure, parameter defaults, and the required Web Inspector setting. The timestamped=false warning is exactly the kind of non-obvious context an agent cannot infer from schema alone.

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 the baseline is 3. The description adds meaningful context beyond the schema: url/triggerJs are the usual way to capture specific work rather than idle time, screenshots roughly double file size, and durationMs has a documented default/max in prose. It supplements rather than re-documents 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 opening sentence states a specific verb (Record), a specific resource (Safari page on an iOS device), a time window, and a concrete side effect (write to file on RDS host) with a return contract. The description also distinguishes this from general performance tools by scoping it to Safari/Web Inspector and explaining the file is a Chrome DevTools-loadable profile.

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 an explicit use case ('why is this page slow/janky') and concrete invocation patterns: pass url for page loads, triggerJs for interactions, set screenshots for a filmstrip. It does not name alternatives or state when not to use this tool, so it stops short of full when/when-not coverage.

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

ios_screenshotAInspect

Take a HIGH-FIDELITY screenshot of an iOS device (slow full-fidelity path). Returns base64 PNG image. For routine per-action screen checks prefer ios_mjpeg_screenshot — it is much faster; reserve ios_screenshot for when you need a crisp, full-fidelity frame. If the device is asleep (black frame) it auto-wakes and retries once. Requires an active iOS automation session (auto-starts if needed) — when no session is running and you do not want to start one, ios_fast_screenshot captures without one, at a higher per-call cost.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden, and it delivers: it discloses the slow path, base64 PNG return format, auto-wake and single retry behavior, and the active-session requirement with auto-start behavior. These are beyond what the schema could express.

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 compact and front-loaded with the core purpose, then moves to alternatives and behavioral caveats. Each sentence adds necessary information, though a little redundancy exists between 'slow full-fidelity path' and 'full-fidelity frame', which prevents a perfect score.

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?

For a screenshot tool with no output schema, the description covers the return format, speed trade-off, alternative tools, device-sleep behavior, and session prerequisites. The single parameter is fully documented in the schema, so nothing needed to call it correctly is missing.

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% and the only parameter, udid, is documented as 'iOS device UDID'. The description does not add meaning about the parameter, but it does not need to because the schema already fully explains it, matching the baseline for high schema 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 names a specific verb and resource: take a HIGH-FIDELITY screenshot of an iOS device. It also distinguishes itself from the sibling ios_mjpeg_screenshot by calling itself the slow full-fidelity path, so an agent can tell them apart immediately.

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?

It explicitly says to prefer ios_mjpeg_screenshot for routine per-action checks and to reserve ios_screenshot for crisp full-fidelity frames. It also gives conditions for using ios_fast_screenshot when no session is running and one should not be started, making the routing decision unambiguous.

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

ios_scroll_to_elementAInspect

Scroll the screen until a UI element with the given label becomes visible, then return its coordinates. Eliminates multi-swipe guesswork for off-screen content. Requires an active iOS automation session (auto-starts if needed).

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID
labelYesAccessibility label or text of the element to scroll to
directionNoScroll direction (default: down)

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses the active session requirement and auto-start behavior, states that it scrolls until visible, and returns coordinates. It does not cover failure scenarios (e.g., element not found) but provides solid context for a non-destructive scroll operation.

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 deliver the action, the benefit, and the requirement with no fluff. The primary action is front-loaded, and every phrase adds value. It is an exemplary concise definition.

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 3-parameter tool with no output schema, the description covers purpose, session requirement, and outcome. It lacks explicit failure/timeout behavior, but that is a minor gap. Overall, it is sufficiently complete for an agent to invoke correctly.

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 parameters are fully described. The description adds contextual meaning by linking the label to the scroll target and noting the coordinate return, which reinforces the purpose. However, it does not add significant new parameter details beyond the schema, so a baseline 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 a specific verb (scroll), a resource (screen), and an outcome (element visible and coordinates returned). It also mentions the benefit of eliminating multi-swipe guesswork, and the iOS-specific session requirement distinguishes it from generic alternatives. The purpose is unambiguous and well-defined.

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 locating off-screen elements by label ('Eliminates multi-swipe guesswork'), but it does not explicitly contrast with sibling tools like ios_swipe or device_scroll_to_element. It mentions the session prerequisite but offers no exclusions or alternative selection criteria, leaving the when-not-to-use case unstated.

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

ios_send_keysAInspect

Type text into the FOCUSED field on an iOS device — tap a text field first. Use \n in text to press the Return/Go key (e.g. "user@example.com\n" to submit). Refuses when nothing is focused instead of reporting a success it cannot back: the device accepts the keystrokes either way, so with no focused field the text goes nowhere and the old behaviour still said it was typed. Pass force:true to send anyway (rare — for surfaces where the active element is not reported). Requires an active iOS automation session.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesText to type. Use \n to press Return/Go key.
udidYesiOS device UDID
forceNoSend even when no focused field is reported (default: false)

TDQS

A4.6/5.0
Behavior5/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 explicitly discloses that the tool refuses when nothing is focused, explains the rationale (device accepts keystrokes regardless), and describes the force option as an override. This goes beyond basic expectations and is highly 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 dense but not overly verbose. It front-loads the core purpose, then adds essential usage details and the refusal behavior. The explanation of the old behavior adds length but provides valuable context. Each sentence earns its place, though a slightly tighter version could be possible.

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?

For a tool with three parameters and no output schema, the description covers all necessary aspects: the action, prerequisites, special key handling, refusal behavior, force override, and session requirement. It is fully sufficient for an agent to call the tool correctly.

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% with descriptions for all three parameters. The description adds meaningful context for 'text' (\n for Return/Go with an example) and 'force' (rare, for surfaces where active element isn't reported), going beyond the schema's brief descriptions. This justifies a score above 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 the action ('Type text into the FOCUSED field on an iOS device') with a specific verb and resource. It also includes a prerequisite ('tap a text field first') that distinguishes it from other input tools, and the iOS-specific naming helps differentiate from session_send_keys or device_type.

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 clear usage instructions: tap the field first, use \n for Return/Go, and force:true as a rare override. It also notes the requirement of an active iOS automation session. While it doesn't explicitly name alternative tools, the usage context and prerequisites are well articulated, earning a 4.

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

ios_set_device_languageAInspect

Change the iOS device's system language and / or locale (persistent, affects every app). iOS may relaunch SpringBoard to apply the change — expect a 5-10s flicker, and the value can take a few seconds to read back. Pass a BASE language code ("fr", not "fr-CA"): iOS reports a region-qualified language but refuses to set one, so a regional code is split into its base language plus a locale automatically. For per-app testing without changing the whole device, prefer ios_launch_app_in_language.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID
localeNoPOSIX locale, e.g. "fr_FR", "es_US"
languageNoISO 639-1 language code, e.g. "fr", "es", "en"

TDQS

A5/5.0
Behavior5/5

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

With no annotations, the description carries the full burden, and it delivers: it discloses persistence, system-wide effect, SpringBoard relaunch, a 5–10s flicker, delayed read-back, and iOS's refusal to accept region-qualified language codes with automatic splitting. This is rich behavioral context well beyond the bare operation.

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?

Four sentences, each earning its place: purpose/scope, side effects, parameter rule, and alternative routing. The most important information is front-loaded, and there is no filler or repetition of schema details.

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?

For a state-changing tool with no annotations and no output schema, the description covers purpose, side effects, timing, parameter constraints, and alternatives. It is complete enough for an agent to select and invoke the tool correctly without further investigation.

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 critical nuance: use a BASE language code ('fr', not 'fr-CA'), and if a regional code is passed, it is split into base language plus locale automatically. This clarifies the interplay between language and locale in a way the schema alone does not.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Change the iOS device's system language and / or locale'. It immediately adds scope ('persistent, affects every app') and explicitly distinguishes itself from the per-app alternative, ios_launch_app_in_language, making its purpose unmistakable.

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 gives an explicit when-not: 'For per-app testing without changing the whole device, prefer ios_launch_app_in_language.' It also makes clear this tool is for whole-device, persistent changes, which tells an agent exactly when to choose it over the sibling per-app tool.

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

ios_set_locationAInspect

Set the iOS device's GPS location for testing location-aware apps. Needs no automation session: it drives the device's own developer location-simulation service, and falls back to the automation agent's route only if that is unavailable. Stays in effect until ios_clear_location, a device reboot, or a restart of the device service (the simulation is a held connection on iOS 17+ — the reply's transport says which route ran). SCOPE: only affects apps that read CoreLocation (CLLocationManager, Safari navigator.geolocation). Does NOT affect apps using IP-based geolocation, Wi-Fi/cell-tower triangulation, or anti-fraud detection paths.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID
latitudeYesLatitude in decimal degrees, e.g. 37.7749
longitudeYesLongitude in decimal degrees, e.g. -122.4194

TDQS

A4.4/5.0
Behavior5/5

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

With no annotations provided, the description carries the full behavioral burden and delivers thoroughly: no session required, route fallback, persistence semantics, iOS 17+ held-connection behavior, the reply's `transport` field, and explicit scope limits. This lets an agent anticipate side effects and avoid misuse (e.g., IP-based geolocation apps).

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 dense but efficient: purpose is front-loaded, behavioral details are grouped logically, and the SCOPE sentence clearly bounds applicability. There is no filler or redundant repetition of schema content.

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?

The description covers invocation prerequisites, persistence, route fallback, and affected software paths, which is strong given no output schema and no annotations. It does omit some operational details like device/service prerequisites or explicit error/return structures beyond the transport note, so it is not fully exhaustive.

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%, and the schema already documents udid, latitude, and longitude with clear examples. The tool description adds little parameter-level meaning beyond 'GPS location,' so the baseline of 3 applies.

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?

Opens with a specific verb and resource: 'Set the iOS device's GPS location for testing location-aware apps.' It further distinguishes itself from related tools by detailing the mechanism (developer location-simulation service vs. automation agent fallback) and the scope, making it clearly different from ios_get_location, ios_clear_location, and ios_play_location_route.

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 gives clear context: when to use it (testing location-aware apps), that no automation session is needed, how fallback works, and when the effect ends (until ios_clear_location, reboot, or service restart). It does not explicitly name sibling alternatives such as ios_play_location_route for route playback, so it falls just short of full alternative routing.

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

ios_set_pasteboardBInspect

Set the clipboard (pasteboard) content on an iOS device. Requires an active iOS automation session.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID
contentYesText content to set on clipboard

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations present, the description carries the full behavioral burden. It does disclose a meaningful operational constraint ('Requires an active iOS automation session'), which is useful context. However, it does not mention side effects, failure modes, or whether the operation overwrites existing pasteboard content beyond what is obvious from 'Set.'

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 two short sentences with no filler. The core action is front-loaded, and the operational prerequisite is stated efficiently.

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 two-parameter setter with full schema coverage, the description is mostly adequate: it states what it does and the required session. The main gap is failing to clarify how this tool relates to the sibling ios_clipboard_set_hid, which could lead an agent to pick the wrong clipboard method.

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 already documents 'udid' and 'content' fully. The description adds no parameter-level meaning beyond what the input schema provides, so the baseline score of 3 is appropriate.

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

Purpose4/5

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

The description clearly states a specific action ('Set the clipboard/pasteboard content') and targets a specific resource (an iOS device). It distinguishes itself from read-style siblings like ios_get_pasteboard and device_clipboard_get, but it does not differentiate from similar setters such as ios_clipboard_set_hid or device_clipboard_set.

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 a prerequisite ('Requires an active iOS automation session') but gives no guidance on when to choose this tool over closely related alternatives like ios_clipboard_set_hid or device_clipboard_set. There is no mention of exclusions or criteria for selecting the non-HID vs HID clipboard setter.

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

ios_settingsAInspect

Get or update iOS automation settings on an iOS device. Call without settings to get current values. Pass settings object to update. Requires an active iOS automation session.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID
settingsNoSettings to update (e.g. {"mjpegServerScreenshotQuality": 25}). Omit to get current settings.

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It discloses the session prerequisite, which is genuinely useful behavioral context. However, it doesn't disclose what an update does to a running session, whether changes are reversible, or what the get response looks like. It adds some value but not rich disclosure for a mutation-capable tool.

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?

Three sentences with no filler. The core purpose and get/update distinction are front-loaded, the prerequisite is stated last. Every sentence earns its place and the structure is easy to scan.

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 2-param tool with a required udid, the description covers both call modes and the session prerequisite. However, with no output schema present, the agent is left guessing what the get operation returns and what settings keys are valid beyond the one example. This is a moderate gap for a settings 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 description coverage is 100%, so both parameters (udid, settings) are already documented in the schema, including the example format for settings. The description adds no parameter detail beyond what the schema provides, matching the baseline 3 for full-coverage schemas.

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?

States a clear dual-mode verb+resource: 'Get or update iOS automation settings on an iOS device.' The get/update split is explicitly spelled out, and the iOS scope separates it from the broad device/session family. It lacks a named sibling contrast, but no other settings tool exists in the sibling list, so the purpose stands on its own.

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?

Gives explicit invocation guidance for both modes: 'Call without settings to get current values. Pass settings object to update.' It also states the prerequisite 'Requires an active iOS automation session.' It doesn't name alternatives or when-not-to-use cases, but with no obvious sibling for settings this is adequate context.

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

ios_shellBInspect

Run a low-level iOS device-management command. Pass the subcommand and optional arguments. No automation session required. Example: subcommand="syslog", args=["--parse"]

ParametersJSON Schema
NameRequiredDescriptionDefault
argsNoAdditional arguments for the subcommand
udidYesiOS device UDID
subcommandYesDevice-management subcommand (e.g. "info", "syslog", "diskspace", "ip", "devicename")

TDQS

B3.2/5.0
Behavior2/5

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

There are no annotations, so the description carries the full burden of behavioral disclosure. It mentions a key non-obvious trait—no automation session required—but does not disclose output behavior, side effects, permissions, or the fact that running arbitrary low-level commands can be destructive. For a generic shell-like tool, this is a significant safety and transparency gap.

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

Conciseness5/5

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

The description is compact and front-loaded: it states the action first, then parameter expectations, then the key prerequisite, then a useful example. There is no filler or redundant restatement of the tool name or schema.

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?

Without annotations or an output schema, the description is not complete enough for a low-level command runner. It does not explain what the command output looks like, whether commands run on the device or through a management channel, what failure modes exist, or that some subcommands may alter device state. The example helps, but important operational context is missing.

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 already documents all three parameters. The description adds a clear invocation example and clarifies that args are optional, which is helpful, but it does not add much semantic meaning beyond what the schema already provides. Baseline 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 a specific verb and resource: 'Run a low-level iOS device-management command.' It also gives concrete example subcommands ('syslog') and notes that no automation session is required, which helps separate it from high-level ios_* tools. It does not explicitly name sibling tools, but the 'iOS' and 'low-level' framing is enough to distinguish it from device_shell and the many dedicated iOS tools.

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 phrase 'No automation session required' is a useful context signal about prerequisites. However, the description does not explicitly say when to use this raw low-level tool instead of a more specific ios_* sibling, nor does it give exclusions or mention when not to use it. The usage guidance is mostly implied by 'low-level.'

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

ios_start_sessionAInspect

Start a iOS automation session on an iOS device . Must be called before any iOS control commands. Takes ~10-30s to launch.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID

TDQS

A3.8/5.0
Behavior3/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 that the tool takes 10-30 seconds to launch, which is useful behavioral context, and implies it initiates a persistent session. However, it does not disclose what happens on failure, or how to cleanup (though the sibling ios_end_session exists).

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 short sentences with no filler. The critical sequencing constraint is front-loaded, and the latency note is a useful addition. Very efficient.

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 session-start tool with a single parameter, the description is adequate. It covers the prerequisite, the latency, and implicitly the need for a session before other commands. The only gap is not describing the session handle output, but since there is no output schema, the agent may infer it from the tool's success.

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 description does not need to add parameter meaning. The udid parameter is adequately described in the schema, and the description does not add extra syntax or format details. Baseline 3 is correct.

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 starts an iOS automation session on a deviceaine, which is a specific verb and resource. It distinguishes itself from siblings by being a session lifecycle tool, but does not explicitly differentiate from ios_end_session or other session-related tools like automation_session_create.

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 explicitly states it must be called before any iOS control commands, providing a clear precondition. It implies the alternative is ios_end_session, but no exclusions are given, so a 4 is appropriate.

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

ios_supported_languagesAInspect

List the languages and locales this iOS device accepts, plus what it is set to now. Read this before ios_set_device_language rather than guessing a code: an unsupported value is rejected with a bare "SetProhibited" that names no reason. Note the asymmetry — the current language reads back region-qualified (e.g. "en-CA") but only the BASE codes listed in languages can be set; the region belongs in the locale.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It reveals an important asymmetry: the current language reads back region-qualified (e.g. 'en-CA') but only base codes can be set, and it warns about the error message. This is valuable behavioral context beyond a simple 'list' operation. It doesn't explicitly state that the operation is read-only, but 'List' implies it, and no side effects are expected. It could mention permissions or exact return format, but the disclosed behavior is sufficient for safe 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?

The description is concise, with three sentences that each add essential value: the main purpose, the usage guidance with a warning, and the critical asymmetry note. It is front-loaded with the primary function and no extraneous words. Every sentence earns its place.

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 read tool with one parameter and no output schema, the description provides enough for an agent to call it correctly. It explains what the tool returns (languages, locales, current setting) and the key behavioral nuance. However, it doesn't explicitly outline the return structure (e.g., field names or format), which an agent might need to parse results. Since there's no output schema, a brief note on return format would make it fully complete, but the current description is 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?

The single parameter (udid) is fully documented in the schema with 'iOS device UDID' (100% schema coverage). The description adds no additional information about the parameter itself, which is acceptable given the schema's completeness. Per the rubric, baseline is 3 when schema coverage is high and description doesn't need to compensate.

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: 'List the languages and locales this iOS device accepts, plus what it is set to now.' It uses a specific verb (List) and resource, and distinguishes itself from the sibling ios_set_device_language by positioning this as the prerequisite read tool. An agent can immediately understand what it does and how it differs from the setter.

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 explicitly instructs when to use this tool: 'Read this before ios_set_device_language rather than guessing a code.' It also explains the consequence of not doing so (an unsupported value is rejected with a bare SetProhibited). This is a clear usage guideline that routes the agent correctly and prevents errors.

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

ios_swipeAInspect

Swipe from (x1,y1) to (x2,y2) on an iOS device screen. Coordinates are in physical screen points. (On an Apple TV, use ios_tv_button arrows or ios_tv_swipe to move focus — a coordinate swipe is unavailable there.) Requires an active iOS automation session.

ParametersJSON Schema
NameRequiredDescriptionDefault
x1YesStart X coordinate
x2YesEnd X coordinate
y1YesStart Y coordinate
y2YesEnd Y coordinate
normNoIf true, x/y (and path points) are 0..1 FRACTIONS of the screen — pass `pixelInScreenshot ÷ screenshotSize` directly (scale-free, matches the frontend, avoids point-guessing). Default false = iOS screen points.
udidYesiOS device UDID
inputNoInput path. 'auto' (default) drives the gesture through the automation session. 'hid' drives it through the direct input path instead, which needs no automation session — it reports 'no HID available' on iOS 17.x or with no tunnel.
durationNoSwipe duration in ms (default: 500)

TDQS

A4.4/5.0
Behavior3/5

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

With no annotations, the description carries the disclosure burden; it usefully reveals the coordinate system ('physical screen points'), the Apple TV limitation, and the session prerequisite. However, it is not complete: it states an active session is required without mentioning the input='hid' path that can bypass the automation session, and it says nothing about default duration or failure behavior.

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

Conciseness5/5

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

Three compact sentences front-load the action, then coordinate semantics, platform caveat, and prerequisite. Every sentence contributes either a decision rule or a required precondition, with no repetition of schema content.

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?

The description plus exhaustive parameter descriptions cover the main call decisions: gesture type, coordinate semantics, Apple TV alternative, and session prerequisite. It omits the HID input exception and any return/result info, but for an action tool with a well-documented schema this is a minor gap.

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 the baseline is 3, and the description adds value by explaining that x/y values are in physical screen points, clarifying the coordinate params and the norm param's default context. It doesn't restate each parameter, but it supplies meaning the schema doesn't fully convey for default behavior.

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?

States a specific gesture ('Swipe') and target ('iOS device screen') with start/end coordinates, so the action is unambiguous. It also distinguishes itself from ios_tv_swipe by noting coordinate swipes are unavailable on Apple TV, which separates it from an otherwise similar sibling.

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?

Includes an explicit when-not: on Apple TV, use ios_tv_button arrows or ios_tv_swipe instead. Adds a hard prerequisite ('Requires an active iOS automation session') that tells the agent when the call is executable. This is stronger guidance than most sibling definitions.

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

ios_syslog_captureAInspect

Capture the iOS device's live system log for a few seconds and return the lines. This is the device log (os_log/syslog) — where crashes on launch, permission denials and app startup failures appear. Not app console logs: for a web page use ios_safari_console_logs. Filter with process and/or contains — an idle device produces hundreds of lines per second, so an unfiltered capture is mostly noise. Run the action you want to debug WHILE the capture is running, or capture right after it. No automation session required.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID
levelNoMinimum severity: "error" = Error+Fault only, "notice" excludes Debug/Info. Default all
processNoOnly lines from this process/image, e.g. "SpringBoard" (case-insensitive substring)
secondsNoHow long to collect for (default 5, max 60)
containsNoOnly lines containing this text (case-insensitive)

TDQS

A4.6/5.0
Behavior4/5

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

No annotations exist, so the description carries the full behavioral burden, and it carries it well: it discloses that capture is live and timing-sensitive, that output is voluminous ('hundreds of lines per second,' so unfiltered captures are mostly noise), and what kinds of failures appear (crashes on launch, permission denials, startup failures). It stops short of describing output format, blocking behavior, or resource impact, which keeps it from a 5.

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?

A single dense paragraph with no wasted sentences; purpose, differentiation, filtering guidance, timing, and prerequisite each earn their place. The most important scoping constraint is front-loaded ahead of the parameter guidance.

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 5-parameter tool with no annotations and no output schema, the description covers the critical usage context: what the log contains, how to filter the noise, when to capture, and when to use a sibling. Remaining gaps (return format, truncation, blocking semantics) are minor next to the strong contextual coverage.

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 the baseline is 3; the description adds genuine value by explaining why `process`/`contains` matter (an unfiltered capture is mostly noise) and tying filter use to the volume behavior. It goes beyond the schema's bare field descriptions without duplicating them.

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?

Opens with a specific verb+resource ('Capture the iOS device's live system log...') and states the scope (a few seconds of live capture). Explicitly distinguishes itself from ios_safari_console_logs, so an agent can tell them apart without opening schemas.

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?

Names the alternative (ios_safari_console_logs) and the condition ('for a web page'), and says when NOT to use this tool. Adds timing guidance ('Run the action you want to debug WHILE the capture is running') and a prerequisite ('No automation session required'), leaving no inference to the agent.

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

ios_tapAInspect

Tap at (x,y) on an iOS device screen — the FALLBACK for when an element has no usable label. Prefer ios_tap_by_label (taps by accessibility label via the automation session, no coordinate math, works even on zero-area elements) whenever the target has a name in ios_page_source. Coordinates here are in physical screen points and must come from ios_page_source (the authoritative source), NOT eyeballed from a screenshot. (On an Apple TV, which has no touchscreen, this is unavailable — select an element with tvos_select or tvos_focus instead.) Requires an active iOS automation session.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesX coordinate in screen points (from ios_page_source element center)
yYesY coordinate in screen points (from ios_page_source element center)
normNoIf true, x/y (and path points) are 0..1 FRACTIONS of the screen — pass `pixelInScreenshot ÷ screenshotSize` directly (scale-free, matches the frontend, avoids point-guessing). Default false = iOS screen points.
udidYesiOS device UDID
inputNoInput path. 'auto' (default) drives the gesture through the automation session. 'hid' drives it through the direct input path instead, which needs no automation session — it reports 'no HID available' on iOS 17.x or with no tunnel.
durationNoTap hold duration in ms (default: 100)

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses the session requirement, coordinate source, and platform unavailability (Apple TV), which go beyond the schema. However, it does not mention potential side effects or behavior on failure, which would be useful for a tapping 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 bit long but every sentence contributes: action, fallback status, alternative, coordinate guidance, TV exception, session requirement. It is front-loaded with the core action and the key decision point (fallback vs label). No fluff or repetition.

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 6 parameters, no output schema, and no annotations, this description covers the critical operational constraints: when to use, where to get coordinates, session requirement, and platform exclusion. It does not describe the return value, but that is less critical for a tap action and no output schema exists.

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 explicit warning that coordinates must come from ios_page_source, not eyeballed from a screenshot, which enhances x/y semantics beyond the schema. It does not discuss the norm, input, or duration params, but the schema already covers those well.

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?

States a specific action (tap at coordinates) and resource (iOS device screen), and immediately frames itself as the FALLBACK alternative to ios_tap_by_label. It also clarifies coordinate sourcing, making its purpose distinct from sibling tools without 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?

Explicitly says 'Prefer ios_tap_by_label ... whenever the target has a name in ios_page_source', and names tvos_select/tvos_focus as alternatives on Apple TV. This gives clear when-to-use and when-not-to-use guidance, with precise alternative tool names.

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

ios_tap_by_labelAInspect

PREFERRED way to tap on iOS: find a UI element by its accessibility label and tap it in one call via the automation session. No coordinate math, and it works on zero-area elements (e.g. bottom-tab labels) where ios_tap(x,y) would miss. Use this before falling back to ios_tap with raw coordinates. If the element is off-screen it auto-scrolls to bring it into view first (disable with autoScroll:false). On no match, returns similar labels (incl. off-screen) to retry with. Requires an active iOS automation session (auto-starts if needed).

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID
labelYesAccessibility label or visible text of the element to tap
matchNoHow to match `label`. Default "contains" — strict, and the only modes that act without interpretation. "fuzzy" tolerates typos and word-order drift, and is tried ONLY after strict finds nothing; it REFUSES when two candidates are too close rather than guessing between them (e.g. "Sign" vs Sign In / Sign Out), and reports which attribute it matched.
autoScrollNoScroll the element into view if off-screen before tapping (default: true)

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations provided, the description takes on full behavioral disclosure. It details auto-scrolling behavior (with disable option), the no-match fallback of returning similar labels, the auto-start of the session, and nuanced matching semantics (fuzzy refuses ambiguous matches). It does not explicitly describe side effects of tapping or success return format, but the disclosed traits are substantial.

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 five sentences, front-loaded with the key purpose ('PREFERRED way'), then quickly covers advantages, usage priority, auto-scroll behavior, no-match fallback, and session handling. Every sentence contributes unique information with no redundancy or filler.

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 tool with four parameters, no output schema, and no annotations, the description covers purpose, usage, behavior, and parameter nuances adequately. It names the fallback sibling and explains the session requirement. The only minor gap is not describing the success return value, but given no output schema exists, the guidance is sufficient for correct invocation.

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?

Although schema description coverage is 100%, the description adds meaningful behavioral context beyond the schema, especially for the 'match' parameter: it explains strict vs. fuzzy semantics, the refusal behavior on ambiguous fuzzy matches, and that it reports which attribute matched. It also clarifies autoScroll's behavior. This elevates it above the 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 opens with a clear statement of intent: 'find a UI element by its accessibility label and tap it in one call via the automation session.' It explicitly contrasts with ios_tap by noting it works on zero-area elements where coordinate-based taps would miss, distinguishing it from its primary sibling.

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 explicitly says 'PREFERRED way to tap on iOS' and instructs 'Use this before falling back to ios_tap with raw coordinates,' giving a clear precedence. It also explains why (no coordinate math, works on zero-area elements), making the usage context obvious.

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

ios_terminate_appAInspect

Terminate an app on an iOS device. If no bundleId provided, terminates the current foreground app. Requires an active iOS automation session.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID
bundleIdNoApp bundle ID to terminate (default: current foreground app)

TDQS

A3.8/5.0
Behavior3/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 of behavioral disclosure. It discloses the session requirement, which is a meaningful prerequisite. However, it does not describe potential side effects (e.g., whether the app's state is lost, whether the session remains active, or any error conditions). For a destructive action like termination, more transparency would be expected, but the description covers the core requirement.

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, well-structured sentence that front-loads the primary action and resource, then adds the optional parameter and a key prerequisite. Every word earns its place; there is no redundancy or filler. It is concise yet complete for a simple tool.

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 tool with only two parameters, no output schema, and a clear action, the description covers the essential information an agent needs to call it correctly. It mentions the session requirement and the default behavior. It does not detail error scenarios or post-conditions, but given the simplicity of the tool, this is a minor gap. Overall, it is sufficiently 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?

The schema description coverage is 100%, meaning both parameters (udid and bundleId) are fully documented in the schema. The description does not add any additional meaning beyond what the schema provides; it merely restates the bundleId default behavior that is already in the schema. With full schema coverage, the baseline of 3 is appropriate since the description adds no extra 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?

The description clearly states the action ('Terminate an app') and the resource ('on an iOS device'). It specifies the optional bundleId and default behavior, distinguishing it from other tools like ios_launch_app or ios_kill_app by its explicit scope. The verb and resource are precise, leaving no ambiguity about the tool's 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?

The description mentions a prerequisite ('Requires an active iOS automation session'), which gives context for when the tool can be used. However, it does not explicitly compare with sibling tools like ios_kill_app or device_terminate_app, nor does it state when not to use this tool. The guidance is implied rather than explicit, so it only partially satisfies this dimension.

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

ios_traffic_flowsAInspect

Snapshot recent DECRYPTED HTTPS flows (request/response) captured since ios_traffic_start. Each flow: method, url, host, status, contentType, req/resp sizes, durationMs. Set includeBodies to also return headers + (truncated) request/response bodies. Filter by urlSubstring or onlyErrors. Returns the most recent limit flows.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID
limitNoMax flows to return, most recent first-matched (default 100)
onlyErrorsNoOnly 5xx / connection-error flows
urlSubstringNoOnly flows whose URL contains this substring
includeBodiesNoInclude headers + bodies (each body capped at 32000 chars). Default false.

TDQS

A4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden and does well: it discloses that flows are decrypted, bodies are truncated, only the most recent `limit` flows are returned, and filters are available. It could add explicit behavior when capture is not active, but the core behavioral surface is clearly described.

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?

Five brief, front-loaded sentences cover purpose, returned fields, body inclusion, filtering, and ordering with no filler. Every sentence earns its place and the most important information appears first.

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 tool with no output schema and no annotations, the description is quite complete: it explains what is returned, when it applies, how to include bodies, and how to filter. The only notable gap is lack of explicit failure/error behavior if traffic capture is not active.

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 baseline is 3. The description restates includeBodies, urlSubstring, onlyErrors, and limit, but does not materially add semantics beyond what the input schema already provides.

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

Purpose5/5

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

The description states a specific verb ('Snapshot') and a precise resource ('recent DECRYPTED HTTPS flows') with clear scope ('captured since ios_traffic_start'). It distinguishes itself from raw-pcap or Android counterparts by emphasizing decrypted HTTPS flow data and listing the returned fields.

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 the prerequisite that traffic capture must have been started via ios_traffic_start and mentions filter options. However, it does not explicitly say when to use this tool over siblings like ios_safari_capture_network or ios_pcap_start, nor does it state when not to use it.

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

ios_traffic_mock_addAInspect

Add (or update in place, if id matches an existing route) a mock/abort rule that short-circuits future matching HTTPS requests on this device inside the TLS-inspecting proxy — the request never reaches the real server. mode "mock" (default) returns the given status/headers/body; mode "abort" kills the connection so the app sees a network failure. Requires TLS capture to already be running on this device (ios_traffic_start) — routes are stored per-device and take effect live, no restart needed. Certificate-pinned apps cannot be intercepted at all (same limit as capture itself), so a route targeting pinned traffic will simply never match.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoRoute id to update in place (replaces the existing route); omit to auto-generate a new one
bodyNoResponse body to inject for mode "mock" (text, or base64 when bodyEncoding is "base64")
modeNo"mock" injects a canned response (default); "abort" kills the connection
udidYesiOS device UDID
methodNoOptional HTTP method filter (e.g. "GET"/"POST"); matches any method when omitted
statusNoHTTP status to inject for mode "mock" (default 200)
delayMsNoLatency to inject before responding/aborting, in ms (clamped to 60s server-side)
enabledNoWhether the route is active (default true) — disabled routes are kept but ignored
headersNoResponse headers to inject for mode "mock", as {headerName: value} — e.g. {"content-type": "application/json"}
matchUrlYesURL pattern to match against the request's full URL
matchTypeNoHow matchUrl is interpreted against the request URL (default "contains")
bodyEncodingNoEncoding of `body` (default "text")

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 behavioral burden. It discloses that matching requests never reach the real server, explains update-in-place semantics via id, states that changes take effect live without restart, and clearly identifies the certificate-pinning limitation. This is far beyond typical descriptions.

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?

Four dense, purposeful sentences: the primary action and modes are front-loaded, followed by prerequisites, live behavior, and limitations. Every sentence earns its place, and there is no filler or repetition of schema content.

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

Completeness5/5

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

For a complex 12-parameter mutating tool with no annotations and no output schema, this description is operationally complete. It covers what the tool does, when it can be used, its side effects, update behavior, and unavoidable limitations, while the schema handles the detailed parameter definitions.

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 already documents 100% of the 12 parameters, so the baseline is 3. The description adds meaningful value beyond the schema by explaining what mode 'mock' and 'abort' actually do, clarifying the default mode, and summarizing id-based in-place replacement. It doesn't need to repeat every parameter because the schema already covers them.

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 states a specific action, 'Add (or update in place...)', against a specific resource: a mock/abort rule for HTTPS requests in the TLS-inspecting proxy. It also explains both modes ('mock' returns given status/headers/body; 'abort' kills the connection), making it clearly distinguishable from list/remove sibling tools.

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 gives clear context: it requires TLS capture to already be running (ios_traffic_start), states routes are per-device and take effect live, and warns that certificate-pinned apps can't be intercepted. It does not explicitly contrast with sibling mock-add tools such as ios_safari_mock_add, but the context rules out many misuses.

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

ios_traffic_mock_listAInspect

List the mock/abort routes currently configured for this device (see ios_traffic_mock_add).

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID

TDQS

A3.8/5.0
Behavior3/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 states the operation is a list, which implies read-only, but doesn't explicitly disclose side-effect absence, permission requirements, or what happens when no routes exist. The simple nature of list operations makes this acceptable, but more detail would improve 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?

The description is a single sentence with no filler, front-loaded with the verb and object, and ends with a useful cross-reference to the add tool. Every word earns its place.

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 list tool with one well-documented parameter and no output schema, the description sufficiently conveys what the tool does and its scope. It doesn't describe the return format in detail, but 'List' implies an array of routes, which is sufficient for an agent to call it correctly. Minor gaps around error cases and route structure keep it from a 5.

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?

The input schema already fully describes the only parameter udid as 'iOS device UDID' (100% coverage). The description adds no additional meaning about the parameter, so it stays at the baseline 3 for schema-covered parameters.

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 states a specific action ('List') and a specific resource ('mock/abort routes') with scope ('currently configured for this device'). It also names the companion tool ios_traffic_mock_add, which distinguishes it from the add operation. An agent can clearly tell this is the read-side counterpart to adding mocks.

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 (view current routes, likely after using ios_traffic_mock_add) but provides no explicit when-to-use versus alternatives like ios_traffic_mock_remove or ios_traffic_mock_status. It points to one sibling only, giving a hint but not full guidance.

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

ios_traffic_mock_removeAInspect

Remove one mock/abort route by id, or every route on this device when all is true. Returns the resulting route list.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoRoute id to remove (from ios_traffic_mock_add or ios_traffic_mock_list)
allNoRemove every route configured for this device instead of a single one
udidYesiOS device UDID

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It discloses the destructive effect (removes routes) and the return value, but does not mention whether the operation is irreversible, whether confirmation is needed, or any side effects on active traffic mocking.

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 with clear front-loading of the main action and outcome. No filler or redundant phrasing.

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?

The operation is simple and the return value is stated. However, with no annotations or output schema, details about error conditions, idempotency, or interaction with active traffic mocking are missing. Still adequate for a basic remove operation.

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 all parameters adequately. The description rephrases the `id` and `all` behavior, adding slight clarity but not significant new meaning 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?

Description clearly states the tool removes one mock/abort route by `id` or all routes when `all` is true, and returns the resulting route list. This distinguishes it from sibling tools like ios_traffic_mock_add and ios_traffic_mock_list.

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 specifies the two removal modes (by id or all) and indicates the return value. It does not explicitly discuss when to use this versus alternative tools, but the context is clear from the resource name and sibling set.

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

ios_traffic_startAInspect

Start TLS inspection on a physical iOS device: brings up a per-device TLS-inspecting proxy and installs a CA-trust + HTTP-proxy config profile, so subsequent HTTPS traffic is DECRYPTED and captured (works for native apps too, unlike Safari DevTools). Then drive the app and read flows with ios_traffic_flows. Defaults to the supervised SILENT install (zero on-device interaction); if no supervision keybag is configured it falls back to a prompt install (user taps Install on the device). Certificate-pinned apps will not decrypt.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID
silentNoSupervised silent install (default true). Set false to force the on-device prompt install. Silent requires the device to be supervised and a supervision keybag to be configured on the server.

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden, and it covers the key behavioral traits: starting a per-device TLS-inspecting proxy, installing a CA-trust and HTTP-proxy profile, defaulting to silent supervised install, falling back to an interactive prompt when unsupervised, and warning about certificate-pinned apps.

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 dense but well-structured: main purpose is front-loaded, followed by mechanism, usage guidance, fallback behavior, and a limitation. Every sentence earns its place, with no filler.

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

Completeness5/5

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

For a 2-parameter tool with no output schema and no annotations, the description is complete enough for an agent to invoke it correctly. It explains what will happen on the device, the silent/prompt decision, the limitation with pinned apps, and points to the follow-up tool for reading captured flows.

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 the baseline is 3, but the description adds meaningful semantics beyond the schema: it explains the silent parameter's default, the supervision keybag prerequisite, and the fallback to a prompt install. It does not need to explain udid further, as 'iOS device UDID' is self-explanatory.

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 opens with 'Start TLS inspection on a physical iOS device', giving a specific verb and resource. It details what happens (proxy + CA-trust/HTTP-proxy profile, HTTPS decryption) and explicitly contrasts with Safari DevTools for native apps, making it easy to distinguish from ios_traffic_flows and ios_traffic_status.

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?

It states when this tool is appropriate: inspecting HTTPS traffic on a physical iOS device, especially for native apps where Safari DevTools falls short. It also gives an explicit exclusion ('Certificate-pinned apps will not decrypt') and directs the agent to the next step ('read flows with ios_traffic_flows').

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

ios_traffic_statusAInspect

Report whether TLS inspection is running for a device and how many flows are buffered.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral disclosure burden. It communicates that this is a read-only reporting operation (no mutation implied) and specifies the two pieces of information returned (running state, buffered flow count). However, it does not mention side effects, permissions, or whether the status refers to a session started by ios_traffic_start. This is adequate but minimal.

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?

A single sentence that front-loads the primary action ('Report') and concisely covers the two key outputs. No extra words, no repetition of schema details, and no vague filler.

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 status-check tool with one parameter and no output schema, the description tells the agent what the tool returns (TLS inspection state and buffered flow count). It does not describe the output format or units, but this is a minor gap for a low-complexity query. The essential information needed to invoke it correctly is present.

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?

The schema covers 100% of parameters (udid) with a clear description, so the baseline is 3. The tool description adds no additional semantic context about the parameter beyond what the schema already provides. Since schema description coverage is high, the description does not need to compensate.

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 uses the specific verb 'Report' and names the exact resource: TLS inspection status plus buffered flow count. It clearly distinguishes itself from sibling tools like android_traffic_status (platform-specific) and ios_traffic_flows (which reports flows rather than status). An agent can identify this tool's purpose without inspecting the schema.

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

Usage Guidelines3/5

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

The context of platform-specific siblings (android_traffic_status, ios_traffic_flows) makes the usage somewhat implicit: it is for iOS device traffic inspection status. However, the description does not explicitly state when to use this tool versus alternatives, such as after starting traffic capture or when needing only the buffered flow count. There is no explicit exclusion or alternative naming.

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

ios_traffic_stopAInspect

Stop TLS inspection for a device from THIS (AI) consumer only. If the workspace UI (or another agent) also has capture open on the same device, the TLS-inspecting proxy and CA/proxy profile are left running for them — the response includes stillRunning: true in that case. Only when every consumer has stopped are the profile removed, the proxy killed, and buffered flows discarded.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID

TDQS

A4.4/5.0
Behavior5/5

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

With no annotations provided, the description carries the full behavioral burden, and it succeeds. It discloses the conditional side effects: leaving the proxy and profile running for other consumers, returning stillRunning: true in that case, and only removing/killing/discarding when every consumer has stopped. This is exactly the kind of behavioral context an agent needs.

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 compact and information-dense. The main action is front-loaded, and the multi-consumer behavior is explained in a few purposeful sentences without redundancy. Every sentence adds necessary guidance, especially around the stillRunning response and cleanup semantics.

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?

The description is highly complete for a single-parameter tool with no output schema, covering the critical conditional behavior and side effects. It slightly omits the general response shape for the fully-stopped case and any error scenarios, but these are not essential for correct selection and invocation.

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?

The input schema has one parameter, udid, with a description and 100% coverage. The description adds no new parameter-level detail beyond 'for a device,' but the schema already sufficiently documents the only parameter. This meets the baseline for high schema 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 opens with a specific verb and resource: 'Stop TLS inspection for a device,' and further scopes it to 'THIS (AI) consumer only.' This clearly distinguishes the tool from the broader ios_traffic_start/status/flow siblings and communicates exactly what operation is performed.

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 clearly explains when this tool should be used—to stop this consumer's TLS inspection—and provides important conditional context about shared capture sessions. It does not explicitly name alternatives like ios_traffic_status for checking remaining consumers, but the usage context is still clear enough to guide correct invocation.

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

ios_tv_appsAInspect

List the apps installed on an Apple TV as its remote sees them (bundle id and display name). ios_list_apps reports more about the same TV — versions and sizes — so prefer that unless you specifically want what the remote can address. To bring an app to the foreground use ios_launch_app: the remote protocol has a launch call of its own that reports success and silently does nothing on tvOS 27.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesApple TV UDID or name

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral burden. It explains that the tool only sees what the remote can address, names the returned fields, and warns about the related launch call silently doing nothing on tvOS 27. Minor gaps around error cases and pairing state exist, but the core behavior is well disclosed.

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

Conciseness5/5

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

Three focused sentences with no wasted words: purpose first, then sibling comparison, then actionable warning. Every sentence earns its place and the key scope distinction 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?

For a simple one-parameter list tool with no output schema, the description sufficiently explains the return content, the remote-specific perspective, and the relevant sibling tools. Nothing needed for correct invocation is missing.

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%, and the schema already describes udid as 'Apple TV UDID or name'. The description adds no new parameter-level detail beyond referencing the same TV, so baseline 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 states a specific verb and resource: 'List the apps installed on an Apple TV'. It also clarifies the scope (as the remote sees them) and names the exact return fields (bundle id and display name), and explicitly distinguishes itself from ios_list_apps.

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?

It gives explicit guidance on when to prefer ios_list_apps over this tool, and points to ios_launch_app for foregrounding an app. It even warns about the tvOS 27 launch quirk, leaving no ambiguity about the alternatives.

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

ios_tv_buttonAInspect

Press a button on an Apple TV remote: the d-pad (up/down/left/right), select (the centre click), menu (back), home, or a playback/volume key. action makes it a double tap or a held press. TWO THINGS THAT SURPRISE CALLERS, both measured on tvOS 27: menu pops a navigation stack, so it does NOT leave an app that was launched programmatically — home does. And a press lands on whatever currently has focus, which nothing reports back, so take a screenshot before pressing select: pressing blind on the TV home screen can reach the top shelf, whose rows include purchase flows.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesApple TV UDID or name
wakeNoWake the TV first if it is asleep (default: true). Waking navigates to the home screen.
actionNoHow to press it (default: singletap)
buttonYesWhich remote button to press

TDQS

A4.8/5.0
Behavior5/5

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

Since no annotations are provided, the description carries the full burden. It discloses two surprising behaviors: the `menu` vs `home` semantics on tvOS 27, and the fact that a press lands on whatever has focus without feedback, with the recommendation to screenshot first. This is beyond just 'presses a button' and adds critical behavioral context for correct invocation.

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 a single paragraph but well-structured: starts with the core action, then the parameter explanation, then the behavioral surprises. Each sentence serves a purpose, though it is slightly lengthy. The key warnings are front-loaded within the second sentence, which is acceptable given their importance.

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 moderate complexity (4 params, 2 required), no output schema, and no annotations, the description covers all necessary information: what buttons exist, how action modifies them, and the critical behavioral caveats. An agent can invoke this tool correctly without further clarification, making it complete.

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 the schema already describes all parameters. The description adds value by explaining the semantics of the `button` parameter's enum (e.g., what each button means) and clarifies `action` as a modifier for double tap or hold. It reinforces the default for `action` but doesn't repeat schema details; it adds enough to help an agent pick the right button 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 verb 'press' with the specific resource 'Apple TV remote' and enumerates the buttons (d-pad, select, menu, home, playback/volume). It distinguishes itself from other device input tools (e.g., ios_tv_swipe, ios_tv_volume) by focusing on button presses, so an agent can confidently select this tool over alternatives.

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 explicitly provides usage guidance by contrasting `menu` vs `home` behavior: 'menu pops a navigation stack, so it does NOT leave an app that was launched programmatically — home does.' It also advises taking a screenshot before pressing select due to focus ambiguity, which is a specific when-to-use and caution. No explicit exclusions, but the guidance is clear and actionable.

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

ios_tv_listAInspect

List the Apple TVs reachable from this host, with the name and identifier to address each one by and whether it is already paired. Start here when a remote call reports that a TV could not be found: a TV has to be awake and on this network for its remote to answer, even when the device itself is otherwise reachable. Unpaired TVs need ios_tv_pair_begin first.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral burden. It discloses that only reachable/on-network TVs are listed, that pairing state is included, and that unpaired TVs require pair_begin first. This clearly implies a read-only, discovery-oriented behavior without side effects.

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

Conciseness5/5

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

Three sentences with no filler: the primary action and output are front-loaded, followed by troubleshooting context and a concrete next-step pointer. 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?

For a zero-parameter discovery tool with no output schema, the description is complete: it states what is returned, when to use it, a key operational constraint (network/awake), and the follow-up action for unpaired devices. Nothing essential is missing.

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 the schema provides no semantic content. The description still adds value by specifying exactly what each returned entry provides: name, identifier, and pairing status. Nothing more is needed for 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?

States a specific verb and resource: 'List the Apple TVs reachable from this host' and names the returned attributes (name, identifier, pairing state). It is clearly differentiated from sibling remote-control tools like ios_tv_pair_begin and ios_tv_power, which do not list devices.

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?

Gives explicit when-to-use context: 'Start here when a remote call reports that a TV could not be found' and explains the prerequisite that a TV must be awake and on the network. It also points to the next step for unpaired TVs: ios_tv_pair_begin.

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

ios_tv_pair_beginAInspect

Start pairing with an Apple TV. This puts a 4-digit PIN on the TV's own screen; read it off the screen and pass it to ios_tv_pair_finish to complete the handshake. Pairing is required before any other remote call works, and it persists across restarts, so it is a one-time step per TV.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesApple TV UDID, name, or an identifier from ios_tv_list

TDQS

A4.2/5.0
Behavior4/5

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

No annotations are present, so the description carries the full burden. It discloses that the tool is state-changing (starts pairing), that the TV displays a 4-digit PIN, that pairing persists across restarts, and that it is one-time per TV. This is meaningful behavioral context beyond the name. It does not mention timeouts or what happens if called on an already-paired TV, so not a 5.

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 three sentences with no filler. It opens with the action, immediately explains the visible side effect and next step, then closes with the important persistence/one-time caveat. Every sentence earns its place.

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 one-parameter, no-output-schema tool, the description provides a complete workflow: start pairing, read PIN from TV, pass to the finish tool, and know it is one-time and persistent. The only gap is the absence of return-value information or behavior on re-airing, but the core context an agent needs is covered.

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%, and the udid parameter is already well explained as accepting an Apple TV UDID, name, or identifier from ios_tv_list. The tool description adds no additional parameter-level detail. Since the schema fully documents the parameter, the baseline 3 applies.

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 states a specific verb-resource pair: "Start pairing with an Apple TV," and immediately distinguishes this step from ios_tv_pair_finish by explaining that the PIN is displayed on the TV and must be passed to that sibling tool. It is clear what this tool does and how it differs from the pairing completion step.

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 gives strong usage context: pairing is required before any other remote call works, it persists across restarts, and it is a one-time step per TV. It also routes the agent to ios_tv_pair_finish with the PIN. It does not explicitly state 'when not to use' or enumerate alternatives, but the one-time persistence implicitly tells the agent not to re-pair an already paired TV.

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

ios_tv_pair_finishAInspect

Finish pairing with an Apple TV using the PIN shown on its screen by ios_tv_pair_begin. Pass the SAME identifier that call was given. On success the credentials are stored and every other remote tool starts working for that TV.

ParametersJSON Schema
NameRequiredDescriptionDefault
pinYesThe 4-digit PIN displayed on the TV
udidYesThe same identifier passed to ios_tv_pair_begin

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the behavioral disclosure burden. It does reveal a meaningful side effect: successful pairing stores credentials and enables all other remote tools for that TV. However, it does not explain failure behavior, whether repeated calls can overwrite a pairing, or what happens if the PIN is rejected.

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 with no filler. The first sentence states the action and prerequisite, the second states the required parameter correlation and the postcondition. Every sentence earns its place.

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 two-parameter completion tool, the description covers the prerequisite, the parameter relationship, and the success effect. It is slightly incomplete on failure/return behavior, but the low complexity and schema coverage make the missing pieces minor rather than blocking.

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 already documents both udid and pin. The description adds emphasis on passing the 'SAME identifier' used in ios_tv_pair_begin, but that essentially restates the schema's own parameter description without adding new semantic detail.

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 states a specific verb and resource: 'Finish pairing with an Apple TV.' It also references ios_tv_pair_begin, clearly distinguishing this as the second step of the pairing flow and separating it from the many other TV-related tools like ios_tv_status or ios_tv_button.

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 gives concrete usage context: use the PIN shown by ios_tv_pair_begin and pass the same identifier that pair_begin received. It does not explicitly list exclusions or alternative tools, but the pairing precondition is unambiguous and actionable.

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

ios_tv_powerAInspect

Wake an Apple TV or put it to sleep. "off" is sleep, not a power cut. The reported power state is read back after the call, because the box can already report itself off while its panel is still showing the screensaver.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesApple TV UDID or name
stateYeson = wake, off = sleep

TDQS

A3.8/5.0
Behavior4/5

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

No annotations are present, so the description carries the full burden. It discloses an important behavioral subtlety: the reported power state is read back after the call and may be stale because the box can report off while the screensaver is still showing. This is genuine behavioral transparency beyond the schema.

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 two tight sentences. It front-loads the core action, then adds the critical disambiguation and read-back caveat without any redundant content.

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 two-parameter tool with full schema coverage, the core guidance is present: what the tool does, how 'off' should be interpreted, and that the reported state is read after the call. The description is sufficient for an agent to invoke it correctly, though it does not detail return value shape or pairing prerequisites.

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 udid and state already described ('on = wake, off = sleep'). The description reinforces the off/sleep distinction but adds no meaning beyond what the input schema already provides, so the baseline of 3 is appropriate.

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

Purpose4/5

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

The description opens with a specific action and resource: 'Wake an Apple TV or put it to sleep.' This makes the tool's function unambiguous and clearly separates it from control siblings like ios_tv_button or status tools like ios_tv_status, though it does not explicitly name an alternative.

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

Usage Guidelines3/5

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

The intended when-to-use is reasonably implied by 'Wake an Apple TV or put it to sleep.' The description offers semantic disambiguation ('off' is sleep, not a power cut) but does not mention any exclusion conditions or compare against other TV tools.

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

ios_tv_statusAInspect

Report an Apple TV: whether it is paired, whether it is awake, the foreground app, and what is playing. Cheap, and the right first call — nothing else here works on an unpaired TV. The features block is what the DEVICE claims it supports and is reported as-is including when it is wrong, so treat it as a hint that saves a round trip, not a promise. power_state is whether the BOX is awake and says nothing about whether a display is attached — those come apart, so a screenshot can fail on a TV this reports as On.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesApple TV UDID or name

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It reveals that the `features` block reflects the device's claimed capabilities and may be inaccurate, and that `power_state` only indicates the box's awake state, not display attachment, which can cause screenshots to fail. This goes beyond a simple status report and helps the agent avoid misinterpretation. It doesn't describe the return format, but for a read-only status tool that's acceptable.

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 compact and front-loaded: it states the purpose, then the usage context, then two critical caveats. Every sentence earns its place, and the structure guides the agent from general to specific, making it easy to scan.

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?

For a tool with a single parameter, no output schema, and no annotations, the description provides sufficient context: what it reports, when to use it, and the two key behavioral nuances (features reliability and power_state meaning). An agent has everything needed to call it correctly and interpret the result without additional lookups.

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?

The single parameter `udid` is already documented in the schema as 'Apple TV UDID or name,' and schema description coverage is 100%. The description does not add any additional parameter-specific meaning beyond that, so it earns the baseline 3 for relying on the schema rather than adding extra semantic guidance.

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 the tool reports on an Apple TV's pairing status, wake state, foreground app, and current playback. It uses a specific verb ('Report') and resource ('Apple TV'), and distinguishes it from sibling ios_tv_* tools by framing it as the 'right first call' that works on unpaired TVs, making its role unambiguous.

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?

It gives clear usage guidance: it is the first call to make, and 'nothing else here works on an unpaired TV,' which tells the agent when to use it and why it precedes other operations. It also provides caveats about the `features` and `power_state` fields that affect how results should be interpreted, helping the agent decide next steps.

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

ios_tv_swipeAInspect

Swipe across the Apple TV remote's TOUCHPAD to move focus. Coordinates are the touchpad's own 0-1000 space — they are NOT screen pixels, and there is no coordinate tapping on a TV to scale them to. Verified on both axes: a left-to-right swipe moves focus exactly as the right button does, so prefer ios_tv_button for single steps and use this for longer runs.

ParametersJSON Schema
NameRequiredDescriptionDefault
endXYesEnd X on the touchpad (0-1000)
endYYesEnd Y on the touchpad (0-1000)
udidYesApple TV UDID or name
wakeNoWake the TV first if it is asleep (default: true)
startXYesStart X on the touchpad (0-1000)
startYYesStart Y on the touchpad (0-1000)
durationMsNoSwipe duration in ms (default 300)

TDQS

A4.6/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 the crucial coordinate-space detail and notes that a left-to-right swipe is verified to behave like the `right` button. However, it does not mention potential side effects (e.g., whether the TV wakes, behavior when focus cannot move) or the effect of durationMs. Given the action is a low-risk focus movement, this is a strong disclosure but not exhaustive.

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?

Three sentences, each with a distinct purpose: action, critical caveat, and usage recommendation. No filler or redundancy. The most important information (coordinate space) is front-loaded in the second sentence. Highly efficient.

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 focused swipe tool, the description covers the key aspects: what it does, coordinate system, verification, and when to prefer an alternative. The schema documents all parameters, so the description need not repeat them. Minor gaps include not explicitly mentioning that it is Apple TV–specific (though the name implies it) and not stating the effect of the `wake` parameter, but these are minor given the schema covers them.

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 each parameter is described. The description adds significant value by clarifying that startX/startY/endX/endY are in the touchpad's 0-1000 space, not screen pixels, which is essential for correct use. It also reinforces the purpose of durationMs indirectly by contrasting with single-step button presses. This goes beyond the schema's basic 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 verb ('Swipe'), the resource ('Apple TV remote's TOUCHPAD'), and the purpose ('to move focus'). It also distinguishes itself from ios_tv_button by explicitly mentioning the coordinate space and that it is for longer runs. This leaves no ambiguity about what the tool does.

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 explicitly says 'prefer ios_tv_button for single steps and use this for longer runs', giving clear guidance on when to use this tool versus its sibling. It also warns that coordinates are not screen pixels, preventing a common misuse. This is exemplary usage guidance.

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

ios_tv_textAInspect

Read or write the text field an Apple TV currently has FOCUSED — the on-screen keyboard's buffer, so a field has to actually be focused on the TV first (navigate to it with ios_tv_button). The reply separates two states that look alike: text: "" with focused: true is a focused empty field, while text: null with focused: false means the write went nowhere. A null buffer is usually a DISPLAY problem rather than a keyboard one — a focused field stops existing when the TV has no display attached. Deliberately does not wake the TV, because waking navigates to the home screen and away from the field being typed into.

ParametersJSON Schema
NameRequiredDescriptionDefault
opYesget = read the buffer, set = replace it, append = add to it, clear = empty it
textNoThe text, for set and append
udidYesApple TV UDID or name

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations, the description fully discloses key behaviors: it deliberately does not wake the TV (to avoid navigating away), it explains the distinct states of text: '' vs null, and warns that a null buffer usually indicates a display problem. This goes beyond typical descriptions and equips the agent with critical edge-case knowledge.

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 and front-loaded with the core purpose. Every sentence adds value: the focus prerequisite, the state disambiguation, the display issue, and the no-wake behavior are all relevant. It is concise despite its length, with no filler.

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?

The description covers the tool's purpose, prerequisites, behavioral nuances, and output interpretation (text vs null). Since there is no output schema, it takes on the burden of explaining the reply states, which it does thoroughly. Nothing essential is missing for an agent to invoke it correctly.

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%, with each parameter already explained (op enum meanings, text purpose, udid). The tool description does not add any parameter semantics beyond what the schema provides, so baseline 3 applies.

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 reads or writes the text field an Apple TV currently has focused, specifying the verb and resource precisely. It distinguishes itself from siblings by tying to the on-screen keyboard buffer and the prerequisite of having a focused field via ios_tv_button, making it unmistakable.

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 explicitly states the prerequisite (field must be focused, navigate with ios_tv_button) and explains when the operation goes nowhere. It does not name direct alternatives like ios_send_keys, but the context is clear enough for an agent to decide when to use it.

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

ios_tv_volumeAInspect

Change an Apple TV's volume. Use up and down — they are the remote's volume keys and are the ones that work. get and set address an absolute level that a TV connected over HDMI does not have: audio leaves over HDMI, so the television or receiver owns the volume. Measured on tvOS 27, the box accepts the up/down keys while reporting the absolute controls as unavailable, so get returning 0 and set failing are expected there rather than a fault. Do not build a level slider on get. Does not wake the TV: the key goes to whatever owns the volume, and that television can be on while the box sleeps.

ParametersJSON Schema
NameRequiredDescriptionDefault
opYesup/down press the volume keys; get/set need an absolute level
udidYesApple TV UDID or name
levelNoTarget level 0-100, for set

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 discloses behavior: it explains that the TV or receiver owns the volume, that absolute controls are unavailable, and that 'get' returning 0 and 'set' failing is normal. It also notes the tool doesn't wake the TV, providing critical context for troubleshooting. This exceeds the typical level of 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?

The description is compact and highly informative, front-loading the actionable instruction to use 'up'/'down'. Every sentence adds value, from the HDMI limitation to the tvOS-specific behavior and the warning about the TV wake state. No fluff or repetition.

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 (3 parameters, one enum, no output schema), the description is exceptionally complete. It addresses the why and how of each operation, preempts common pitfalls (like expecting absolute levels to work), and provides the exact environment context (tvOS 27) for reproducibility. Nothing an agent needs is missing.

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?

The schema already covers all parameters with descriptions and an enum for op. The description adds value by explaining the semantics of 'get'/'set' and the expected failure behavior, but the underlying parameter meanings are already clear from the schema, so additional explanation isn't strictly necessary.

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: changing an Apple TV's volume via remote control keys. It explicitly distinguishes between the working operations ('up'/'down') and the non-functional absolute operations ('get'/'set'), and explains why, making it distinct from any sibling tools like ios_tv_button or ios_tv_power.

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 gives explicit guidance on when to use each operation: use 'up'/'down' for volume control, and avoid 'get'/'set' because they don't work with HDMI-connected TVs. It also warns against building a level slider on 'get' and mentions that the tool does not wake the TV, so an agent knows what to expect.

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

ios_two_finger_swipeAInspect

Two-finger swipe from (x1,y1) to (x2,y2) on an iOS device — a two-finger scroll/pan. Both fingers travel the vector in parallel, offset perpendicular to it so one never runs through the other. Use where a one-finger swipe does the wrong thing: tilting a map into 3D, scrolling inside a web view that pans with one finger, or dismissing a two-finger-aware sheet. Coordinates are screen points. Requires an active iOS automation session.

ParametersJSON Schema
NameRequiredDescriptionDefault
x1YesStart X (screen points)
x2YesEnd X (screen points)
y1YesStart Y (screen points)
y2YesEnd Y (screen points)
normNoIf true, x/y (and path points) are 0..1 FRACTIONS of the screen — pass `pixelInScreenshot ÷ screenshotSize` directly (scale-free, matches the frontend, avoids point-guessing). Default false = iOS screen points.
udidYesiOS device UDID
inputNoInput path. 'auto' (default) drives the gesture through the automation session. 'hid' drives it through the direct input path instead, which needs no automation session — it reports 'no HID available' on iOS 17.x or with no tunnel.
durationMsNoGesture duration in ms (default: 400)

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries full disclosure responsibility. It explains the physical gesture behavior (both fingers travel the vector in parallel, offset perpendicular so they don't run through each other), states that coordinates are screen points, and calls out the session prerequisite. It doesn't cover failure modes or return/status behavior, but for a gesture tool the core behavioral traits are transparently documented.

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?

Three sentences carry all essential information: what the tool does, when to use it, coordinate semantics, and prerequisite. There is no filler or repetition, and the most decision-relevant content (purpose and usage conditions) is front-loaded.

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 gesture tool with no output schema, the combination of description and parameter-rich schema covers purpose, usage conditions, prerequisites, and coordinate system. Minor gaps remain: return/status behavior is not described, and there is no direct pointer to the related ios_two_finger_tap sibling, but the name and examples make the tool's role sufficiently clear.

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 baseline is 3. The description adds the coordinate-semantics note 'Coordinates are screen points' and explains finger geometry, but the schema already documents each coordinate and the norm parameter in detail. The description does not materially improve parameter understanding beyond what the schema provides.

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 opens with a precise definition: a two-finger swipe from (x1,y1) to (x2,y2) on an iOS device, explicitly identified with two-finger scroll/pan. It distinguishes itself from one-finger swipes by naming concrete scenarios where a one-finger swipe would be wrong, which effectively separates it from sibling swipe tools without 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?

The description gives explicit when-to-use guidance: 'Use where a one-finger swipe does the wrong thing', followed by three concrete examples (tilting a map into 3D, scrolling inside a one-finger-panning web view, dismissing a two-finger-aware sheet). It also states a hard prerequisite, 'Requires an active iOS automation session', which is essential for correct invocation.

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

ios_two_finger_tapAInspect

Two-finger tap at (x,y) on an iOS device — zooms OUT one step in Maps, acts as a secondary click in web views, and is the accessibility gesture in several Apple apps. Both fingers land either side of the point and lift without moving. holdMs turns it into a two-finger press-and-hold. Coordinates are screen points. Requires an active iOS automation session.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesTap centre X (screen points)
yYesTap centre Y (screen points)
normNoIf true, x/y (and path points) are 0..1 FRACTIONS of the screen — pass `pixelInScreenshot ÷ screenshotSize` directly (scale-free, matches the frontend, avoids point-guessing). Default false = iOS screen points.
udidYesiOS device UDID
inputNoInput path. 'auto' (default) drives the gesture through the automation session. 'hid' drives it through the direct input path instead, which needs no automation session — it reports 'no HID available' on iOS 17.x or with no tunnel.
holdMsNoHold both fingers down this long before lifting (default: 0)

TDQS

A3.5/5.0
Behavior2/5

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

Without annotations, the description carries the full burden of behavioral disclosure. It explains the gesture mechanics, holdMs behavior, and coordinate system, but it makes two inaccurate blanket claims: 'Coordinates are screen points' (ignoring `norm=true` which uses fractions) and 'Requires an active iOS automation session' (ignoring `input='hid'` which needs none). These contradictions undermine transparency and could mislead an agent about preconditions and coordinate handling.

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 compact at four sentences, front-loading the primary purpose, then mechanics, modifier, and requirements. No redundant or irrelevant detail; each sentence contributes useful information and the structure is logical.

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 the tool's moderate complexity (6 params, no output schema, no annotations), the description covers the gesture behavior and prerequisites but misses important exceptions for the `norm` and `input` parameters. The misleading session requirement creates a gap, and a more complete description would mention that `norm=true` changes coordinate interpretation and that `input='hid'` bypasses the session requirement.

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 a slight clarification that holdMs makes it a press-and-hold and that x/y are screen points (already in schema), but it does not explain `norm` or `input` further, and it actually mischaracterizes coordinate semantics by ignoring the norm option. Thus it does not significantly add 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 identifies the tool as a two-finger tap on an iOS device, specifying the verb (tap), resource (iOS device at x,y), and gesture mechanics ('both fingers land either side of the point and lift without moving'). This distinguishes it from single-finger taps (ios_tap) and two-finger swipe (ios_two_finger_swipe), even though it does not explicitly name alternatives.

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 gives contextual examples of when the gesture is used (Maps zoom out, web secondary click, accessibility), which helps an agent infer suitable scenarios. However, it does not explicitly contrast alternatives like ios_tap or ios_two_finger_swipe, and it makes an unconditional statement 'Requires an active iOS automation session' that is contradicted by the schema's `input` parameter allowing 'hid' without a session, making the guidance partially misleading.

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

ios_uninstall_appAInspect

Uninstall an app from an iOS device by bundle ID. No automation session required.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID
bundleIdYesApp bundle ID to uninstall

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the disclosure burden. It adds the useful behavioral context that no automation session is required, but it does not explicitly state that the operation is destructive/irreversible or whether it depends on app installation state. The uninstall semantics are largely implied by the verb itself.

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 short sentences, no fluff. The core action and key prerequisite are front-loaded, making the definition easy to scan and act on.

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 two-parameter destructive tool with no output schema, the description is largely complete. It states what is done, how, and the key precondition. It could be slightly richer by mentioning irreversibility or that the app must already be installed, but these are minor gaps at this complexity level.

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 input schema already documents both parameters. The description reinforces that the operation is 'by bundle ID' but adds no format details or additional semantics beyond what the schema provides.

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?

States a specific action ('Uninstall an app'), a specific platform ('iOS device'), and the method ('by bundle ID'). This is clearly distinguishable from sibling tools like ios_terminate_app or ios_kill_app, and the iOS scope differentiates it from device_uninstall_app.

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 clear and useful usage condition: 'No automation session required.' This tells the agent this is a standalone operation, unlike many other iOS tools that require an active session. It does not explicitly name alternatives or exclusions, but the context is clear enough for correct selection.

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

ios_unlockAInspect

Unlock an iOS device screen. Requires an active iOS automation session.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID

TDQS

A3.6/5.0
Behavior2/5

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

No annotations exist, so the description carries the full burden of behavioral disclosure. It mentions the session prerequisite, but does not describe error conditions, idempotency, or behavior when the device is already unlocked. This is thin for a state-changing operation.

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 two short, purposeful sentences with the action front-loaded and the key prerequisite stated immediately after. There is no redundant wording or unnecessary 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?

For a simple single-parameter action with no output schema, the description provides the essential details: what the tool does and what must be true before calling it. Minor gaps like error behavior do not prevent basic correct invocation.

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?

The input schema already documents the only parameter (udid: iOS device UDID) with 100% coverage. The description adds no extra parameter-level meaning, so the baseline score of 3 is appropriate.

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

Purpose5/5

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

The description states a precise action ('Unlock') and a clear resource ('iOS device screen'), making the tool's purpose immediately understandable. It is distinct from siblings like ios_lock_status and ios_start_session.

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 provides a concrete prerequisite: an active iOS automation session must exist. However, it does not explicitly explain when to use this tool versus alternatives or how to handle a missing session, leaving usage context mostly implicit.

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

ios_upload_targetsAInspect

Find where to push a file so a FILE PICKER on the device can select it — for driving an upload in Safari or in an app under test. Call this before ios_file_push when the file is meant to be chosen by a picker, because writing a file and a picker seeing it are not the same thing: the shared media directory is writable but NO picker reads it (a JPEG pushed to /DCIM does not enter the Photos library, verified on iOS 26.6 even across a reboot, and the media Downloads folder is not the Files app's Downloads). Returns app containers with pickable_from: ["files_app"] means that app declares UIFileSharingEnabled, so its Documents/ is listed under "On My iPad" in the Files app — which is what Safari's "Choose File" browses. An empty pickable_from means the push still works and the app itself can read the file, but no picker will show it. Pickable targets sort first; push to targets[0].push_path. If nothing is pickable, advice says what to change.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID

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 carries the full disclosure burden and meets it thoroughly: it explains that the shared media directory is writable but unreadable by pickers, reports verified behavior on iOS 26.6, and defines the meaning of pickable_from including the empty-list case. It also tells the agent what the output means and what action to take (push to targets[0].push_path).

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 longer than average but every sentence earns its place: purpose, when-to-call, the counterintuitive picker behavior, output semantics, and actionable advice. It front-loads the purpose and usage condition before entering technical detail.

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 single parameter, the absence of an output schema, and the subtlety of the domain, the description is complete: it explains the return fields (pickable_from, targets[0].push_path, advice), what they mean, and how to act on them. An agent has everything needed to call this correctly.

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?

The only parameter, udid, is fully described by the schema ('iOS device UDID'), and schema coverage is 100%, so the baseline of 3 applies. The description does not need to add parameter-level detail; it focuses on the output contract instead.

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 states a specific verb and resource: 'Find where to push a file so a FILE PICKER on the device can select it', and narrows the scope to picker-driven uploads in Safari or an app. It clearly distinguishes this discovery step from the sibling ios_file_push by positioning it as the step to call before pushing.

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?

'Call this before ios_file_push when the file is meant to be chosen by a picker' is an explicit when-to-use with a named sibling alternative. The description also cautions that writing a file and a picker seeing it are not the same, giving the agent a concrete test for when this tool is necessary.

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

ios_video_streamAInspect

Get a LIVE video-stream link for an iOS device that a human can open in a browser to watch the screen in real time (unlike ios_screenshot, which is one frame). Returns a short-lived, single-device viewer URL — open it directly; no login or session required for ~5 minutes. Use this to let a person supervise what the agent is doing on the device.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations provided, the description carries the full behavioral burden. It discloses that the URL is short-lived, single-device, requires no login/session, and lasts ~5 minutes. This is meaningful behavioral context beyond a bare 'get stream' statement, though it does not address failure modes or side effects like whether streaming is stopped or device resources are consumed.

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 three sentences, front-loads the core purpose, and every sentence adds value: what the tool does, the behavior of the returned URL, and when to use it. No filler or redundant restating of the tool name.

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?

For a single-parameter tool with no output schema, the description is complete enough to invoke and interpret the result. It explains what is returned (a viewer URL), how to use it (open directly), the authentication situation, the time limit, and the human-supervision use case. Nothing essential is missing.

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?

The input schema already fully documents the only parameter 'udid' with a description, so the baseline is appropriate. The description adds no new parameter-level meaning, but none is needed because 'udid' is simple and well-covered by 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 a specific action ('Get a LIVE video-stream link') and resource ('an iOS device'), with an explicit contrast to ios_screenshot. The distinction between live video and a single frame makes the tool's purpose unmistakable, even among many iOS siblings.

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 explains the intended use case: letting a human supervise the agent in real time. It also explicitly names ios_screenshot as the alternative for static frames. It does not enumerate all alternatives or edge cases, but the guidance is clear and sufficient for selecting this tool over the most similar sibling.

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

ios_voiceover_previewAInspect

Approximate what VoiceOver would announce for each element on the CURRENT screen, and flag announcements a blind user could not act on — unlabelled controls that speak only as "button", labels that read as code identifiers, tappable elements with no Button/Link trait, controls VoiceOver cannot reach at all, and duplicate labels that cannot be told apart by ear. IMPORTANT: this is a RECONSTRUCTION from element attributes, not a transcript. Real VoiceOver speech can only be read from the device on iOS 27+; below that the system cannot be asked what it would say. The accessibility HINT is never included (Apple does not expose it to XCTest at all), role words are the English defaults, and reading ORDER is document order, which is not VoiceOver's geometric order. Treat the wording as indicative and the flagged issues as real. Complements ios_accessibility_audit, which reports Apple's own findings. Requires an active iOS automation session (auto-starts if needed).

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID
elementNoNarrow to one element by accessibility label, resolved the same way ios_tap_by_label resolves it.
onlyIssuesNoReturn only elements with a flagged problem, skipping ones that announce fine. Default false.

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 the full burden and does so thoroughly. It discloses that this is a reconstruction, not a transcript; that the HINT is never included; that role words are English defaults; that reading order is document order rather than VoiceOver's geometric order; and that flagged issues are real while wording is indicative. This is exactly the kind of behavioral context an agent needs to avoid over-trusting the output.

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 dense but every sentence earns its place: purpose, issue categories, fidelity caveats, sibling differentiation, and prerequisites. It is front-loaded with the core purpose and the most important caveat ('RECONSTRUCTION, not a transcript') appears early. It is long, but the complexity of the tool justifies the length.

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?

For a tool with no output schema and no annotations, the description covers what the tool does, what it flags, its limitations, its relationship to a sibling, and its runtime prerequisite. An agent has enough to decide whether to call it and how to interpret the results. The only minor gap is the exact output shape, but the description's caveats make the output's nature clear enough.

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 the baseline is 3. The description adds value by explaining the 'element' parameter's resolution semantics ('resolved the same way ios_tap_by_label resolves it') and by clarifying that onlyIssues filters to flagged problems. It doesn't detail the udid parameter, but that is self-evident from 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 opens with a specific verb ('Approximate what VoiceOver would announce') and a clear resource (each element on the CURRENT screen), then enumerates the exact classes of issues it flags. It also distinguishes itself from ios_accessibility_audit by name, so an agent can tell them apart without opening schemas.

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 explicitly states when to use it (to approximate VoiceOver announcements and flag actionable issues) and names the complementary sibling (ios_accessibility_audit) that reports Apple's own findings. It also gives a hard platform constraint (iOS 27+ for real speech) and a session prerequisite, so an agent knows the conditions under which this tool is appropriate.

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

ios_wait_for_elementAInspect

Wait until an element appears on screen, polling the accessibility tree. Counterpart of device_wait_for_element. Matches a case-insensitive SUBSTRING against label, name, value and placeholder. Returns { found, waitedMs, element? }. found=false is a normal answer, not an error — it means the element did not appear within the timeout, which is often the assertion you wanted. Matches elements the tree reports whether or not they are on screen, so a hit does NOT prove visibility; check element.visible. Requires an active iOS automation session.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoRestrict to an element type, e.g. Button (XCUIElementType prefix optional)
udidYesiOS device UDID
labelYesSubstring to wait for, matched against label / name / value / placeholder
timeoutNoMax wait in ms (default 10000)
intervalNoPoll interval in ms (default 500)

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It fully discloses polling behavior, substring matching scope, return shape, the non-error semantics of found=false, the visibility limitation, and the requirement for an active iOS session. This is comprehensive and exceeds what annotations would typically provide.

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 information-dense but every sentence adds value. It front-loads the core purpose, then sequentially covers matching, return shape, error semantics, visibility caveat, and prerequisites. No redundancy or fluff; structure guides the reader from high-level intent to operational detail.

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 moderate complexity and lack of an output schema, the description covers everything an agent needs: what it does, how matching works, return shape, error handling, visibility caveat, and session requirement. It is complete for safe and correct invocation.

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 covers 100% of parameters, so baseline is 3. The description adds meaningful context beyond the schema: it explains that label is matched as a case-insensitive substring across multiple fields, and clarifies the meaning of the returned found flag. However, it does not add detail for timeout and interval beyond what the schema already provides, so it doesn't fully merit a 5.

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 states a specific verb and resource ('Wait until an element appears on screen') and clearly distinguishes itself from its sibling device_wait_for_element by naming it as the counterpart. It also clarifies the matching semantics (case-insensitive substring against label/name/value/placeholder), making the tool's purpose unambiguous.

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?

It explicitly names the alternative (device_wait_for_element) and implies when to use this iOS-specific variant. It provides crucial usage guidance: found=false is a normal assertion result, not an error, and warns that a hit does not prove visibility, directing the user to check element.visible. This tells the agent exactly when and how to use the tool correctly.

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

ios_window_sizeAInspect

Get the screen width of an iOS device from the iOS automation session. Use these dimensions for tap/swipe coordinates. Requires an active iOS automation session.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations provided, the description carries the burden. It discloses the prerequisite of an active iOS automation session, which is useful. However, it does not mention the exact return format (whether width and height are included), or whether orientation changes affect the value, leaving gaps for an agent.

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

Conciseness5/5

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

Two sentences with no fluff. The primary purpose is front-loaded, and the requirement of an active session is placed at the end as a necessary prerequisite. Every word serves a function.

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 the tool's simplicity (one parameter, no output schema), the description is adequate but not complete. It lacks details about the output format (e.g., does it return width only or a dict with width/height?) and any caveats like orientation changes, which an agent might need for accurate coordinate mapping.

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 description coverage is 100% (only 'udid'), and the description adds context that the UDID identifies the device whose screen width is retrieved. This supplements the schema's minimal 'iOS device UDID' with the purpose of the parameter.

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 screen width'), the resource ('iOS device'), and the purpose ('Use these dimensions for tap/swipe coordinates'). It is distinct from sibling tools like ios_device_info and ios_swipe, indicating it returns dimensions for coordinate calculations.

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 clearly implies usage for tap/swipe coordinate determination and explicitly requires an active iOS automation session. However, it does not explicitly state when NOT to use it or name alternative tools, but given the uniqueness of 'screen width', the usage context is clear enough.

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

jira_create_issueAInspect

Create a new Jira issue. Returns the new issue key and browse URL. ALWAYS confirm with the user before calling — this is a mutating operation. If the user mentions "PROJ-X" they want a comment, not a new issue. Use jira_get_issue first to ensure you have the right project context. Defaults issueType to "Task" if not specified.

ParametersJSON Schema
NameRequiredDescriptionDefault
labelsNoOptional labels to attach. Each label must be a single token (no spaces).
summaryYesShort issue title. Keep under 200 chars; longer summaries get truncated by Jira.
issueTypeNoIssue type name (e.g. "Bug", "Task", "Story"). Defaults to "Task" if omitted. Must match a type available in the target project.
projectKeyYesJira project key (e.g. "ACME", "PROJ"). All uppercase letters/digits/underscore.
descriptionNoIssue body. Plain text — markdown is not interpreted. Convert markdown to plain prose before passing.

TDQS

A4.5/5.0
Behavior4/5

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

No annotations are present, so the description carries the full disclosure burden. It discloses the mutating nature, the return value, the defaulting behavior, and a mandatory user-confirmation step. While error behavior and permission requirements are not covered, the essential behavioral traits are clearly stated.

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?

Four short sentences with the action first, followed by return value, mutating warning, and routing exclusions. Every sentence earns its place and there is no filler or redundancy.

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

Completeness5/5

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

For a create tool with fully documented parameters and no output schema, the description closes the main gaps: it states what the tool returns and recommends a pre-call check using jira_get_issue. The combination of schema and description gives an agent everything needed to invoke it correctly.

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 every parameter is already documented in the input schema. The description only re-states the issueType default that also appears in the schema and adds no additional parameter-level detail. A baseline score of 3 is appropriate.

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

Purpose5/5

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

States the exact action and resource: 'Create a new Jira issue.' It also names the return value (issue key and browse URL) and explicitly contrasts the tool with comment-creation and jira_get_issue, making it easy to tell apart from sibling Jira tools.

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?

Gives explicit when-to-use and when-not-to-use guidance: 'ALWAYS confirm with the user before calling' and 'If the user mentions "PROJ-X" they want a comment, not a new issue.' It also instructs the agent to call jira_get_issue first to establish project context and documents the issueType default. This leaves nothing to inference.

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

jira_get_issueAInspect

Fetch a single Jira issue by key (e.g. "ACME-123"). Returns key, browse URL, summary, description, issue type, status, priority, assignee, reporter, labels, project, and timestamps. Uses the calling user's stored Jira credential — does not accept inline credentials. Returns an actionable error if Jira is not configured.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesJira issue key in the form PROJECT-NUMBER (e.g. "ACME-123" or "PROJ-4567")

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the disclosure burden and does it well: it names auth requirements, explicitly says no inline credentials are accepted, and promises an actionable error when Jira is not configured. It also enumerates the returned fields. It does not explicitly state the absence of side effects or invalid-issue handling, but 'Fetch' plus the field list implies a read-only operation.

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

Conciseness5/5

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

Three focused sentences front-load the operation and example, then cover return values, auth, and error behavior. No filler words or redundant restatements of the tool name.

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?

For a one-parameter read tool with no output schema, this covers the full invocation contract: what is fetched, what fields come back, which credential is used, and what error occurs on misconfiguration. Nothing essential is missing for an agent to call it correctly.

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

Parameters3/5

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

The input schema already documents the only parameter with format and examples at 100% coverage, so baseline 3 applies. The description repeats the key example but adds no new parameter 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 opens with 'Fetch a single Jira issue by key', a specific verb-resource pair with a concrete example, and clearly differentiates this from siblings like jira_search or jira_create_issue by restricting to a single issue lookup.

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 states the intended use (retrieve one issue by key) and adds a meaningful constraint: the call relies on the caller's stored Jira credential and rejects inline credentials. It does not explicitly name alternative tools or state when not to use it, so it stops short of full routing guidance.

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

list_visual_reviewsAInspect

List AI Visual Review candidates — flow-replay steps where the perceptual pixel-diff flagged a change against the approved baseline. Returns summaries with image URLs/refs only (not the images themselves — use get_visual_review for that). Defaults to pending (unreviewed) candidates. Owner-scoped to your account.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNoReview status to filter by. Defaults to "pending".
replay_idNoOptional — narrow to candidates from one specific replay run only. Use this when you were asked to review a particular replay so you never touch pending candidates from other runs.

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It covers key behaviors: it returns only summaries with image URLs, is owner-scoped to the account, and defaults to pending candidates. It does not mention ordering, pagination, or explicit read-only status, but for a listing tool the disclosed behaviors are useful and accurate.

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 concise and front-loaded with the main purpose, followed by a behavioral note and a default. All three sentences carry meaningful information and no filler. It uses a dash to separate the core definition from the elaboration, making it efficient, though slightly denser than the bare-minimum style.

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 only two optional parameters and no output schema, the description provides enough context for an agent to call it correctly: it defines candidates, clarifies what is returned, points to the alternative for images, and notes the default filter and account scoping. Minor gaps (e.g., ordering, pagination) are not critical for correct invocation.

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 both parameters, so the baseline is 3. The description adds no new meaning about status or replay_id beyond what the schema already provides; it only restates the default in prose. The schema itself documents the enum values and the replay_id narrowing purpose, so the description is not needed to compensate.

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 a specific verb and resource: 'List AI Visual Review candidates' and defines them as 'flow-replay steps where the perceptual pixel-diff flagged a change against the approved baseline.' It also distinguishes itself from the sibling tool get_visual_review by explicitly noting it returns summaries only and directing users to get_visual_review for images.

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: it names the alternative tool (get_visual_review) for fetching images, explains when to use the replay_id param ('when you were asked to review a particular replay'), and clarifies the default status filter. This tells an agent when to use this tool versus alternatives and reduces the chance of picking the wrong one.

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

resolve_visual_reviewAInspect

Resolve an AI Visual Review candidate after inspecting it (via get_visual_review): "approve" means the change is expected/benign — it promotes the live capture to the new approved baseline for future comparisons. "reject" means it is a confirmed visual regression — it fails the owning replay run. Owner-scoped to your account.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNoOptional short rationale for your decision — logged for traceability, not stored on the record.
decisionYesYour verdict on this candidate.
review_idYesReview id from list_visual_reviews

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It transparently explains the side effects of both decisions: approving promotes the live capture to the new baseline, and rejecting fails the owning replay run. It also notes that the operation is owner-scoped. However, it does not mention reversibility, permission requirements, or what the response object contains, which are minor gaps 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?

The description is concise, consisting of three sentences with no redundancy. It front-loads the core purpose, then clarifies the two decision outcomes, and finishes with a scoping note. Every sentence contributes value and the structure is logical.

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?

The description provides sufficient context for an agent to invoke the tool correctly: it explains the workflow (inspect via get_visual_review before resolving), the meaning of each decision, and the ownership scope. Since there is no output schema, the description does not need to describe return values, but it could mention the response format or confirmation details. Overall, it is nearly complete for this action-oriented 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 description coverage is 100%, so the schema already documents all three parameters (review_id, decision, note) with adequate descriptions. The tool description does not add extra semantic detail beyond what the schema provides, so the baseline of 3 is appropriate.

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

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 with a specific verb ('Resolve') and a specific resource ('AI Visual Review candidate'), and distinguishes the two decision outcomes ('approve' and 'reject') with concrete consequences. It also references the prerequisite inspection step via get_visual_review, making its role unambiguous relative to sibling tools like list_visual_reviews and get_visual_review.

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 explicitly instructs the agent to inspect the candidate first via get_visual_review, establishing a clear workflow for when to call this tool. It explains the implications of each decision (promoting baseline vs. failing replay run) but does not mention when not to use it or alternative actions for unresolved cases. It gives strong 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.

secret_variables_listAInspect

List the names of secret variables the user has stored for this account. Returns NAMES + updated timestamps — never the values. Use this BEFORE asking the user for any URL, credential, or API key to see if a relevant one is already saved (e.g. "alice-test-account", "staging-url"). The actual values are substituted at tool-call execution time.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral burden. It discloses a critical privacy trait: 'never the values,' and adds that actual values are 'substituted at tool-call execution time.' This goes beyond the basic list semantics and helps an agent understand what the tool will and will not expose.

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 compact and front-loaded: the first sentence states the core purpose, the second specifies return contents and the key privacy guarantee, and the third provides practical usage timing. Every sentence contributes value without 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?

For a zero-parameter list tool, the description is complete. It explains what is returned (names + timestamps), what is not returned (values), when to use it, and the execution-time substitution behavior. An agent has enough context to decide when to call it and what to expect.

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 there is no parameter ambiguity. The description adds context around the kinds of stored values it refers to by giving examples like 'alice-test-account' and 'staging-url,' which helps the agent understand the domain without needing parameter documentation.

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 states a specific action and resource: 'List the names of secret variables the user has stored for this account.' It also clarifies what is returned ('NAMES + updated timestamps') and explicitly distinguishes itself by noting 'never the values.' This is a precise, unambiguous purpose.

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 gives explicit when-to-use guidance: 'Use this BEFORE asking the user for any URL, credential, or API key to see if a relevant one is already saved.' It does not identify alternatives or when not to use it, but the context is clear and actionable.

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

session_backAInspect

Go back one entry in the history of a WebDriver session — the browser's Back for a browser session, the platform back action for a mobile session. Addressed by sessionId. There is no forward counterpart on this surface: for a desktop grid page use web_back and web_forward (by pageId), and on a real device use webpage_back or device_key (by udid).

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIdYesSession ID

TDQS

A4.5/5.0
Behavior4/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 explains the action's nature ('browser's Back' or 'platform back action') and the absence of a forward counterpart. While it doesn't detail error handling or edge cases (e.g., empty history), for a simple navigation operation this is adequate. It lacks explicit side effects but does not contradict any known behavior.

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, three sentences, with the core purpose front-loaded in the first sentence. It efficiently includes context about mobile vs. browser and alternatives without unnecessary words. Every sentence contributes to understanding.

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?

For a tool with a single parameter and no output schema, the description is complete. It explains the action, the parameter's role, and provides routing to alternatives. No additional information is needed for an agent to call this tool correctly.

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% since sessionId has a description ('Session ID'), and the tool description only mentions 'Addressed by sessionId' without adding further detail beyond the schema. The baseline is 3 for full coverage; the description does not enhance parameter meaning beyond confirming the parameter's role.

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 specific action ('Go back one entry in the history of a WebDriver session'), distinguishes between browser and mobile contexts, and explicitly names alternatives (web_back, web_forward, webpage_back, device_key) for other surfaces. This makes it unambiguous and easily differentiated from siblings.

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 when-to-use guidance: it specifies that this tool is for 'WebDriver session' and that there is no forward counterpart. It then directs the user to use web_back/web_forward for desktop grid pages and webpage_back/device_key for real devices, effectively covering alternative scenarios.

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

session_clickAInspect

Click an element found by session_find_element, addressed by its elementId together with the sessionId that found it. The click goes through the WebDriver protocol, so it lands where the element is — no coordinates and no scrolling to arrange first. Works on browser and mobile sessions alike. Errors when the element is not interactable, or has gone stale because the page changed since it was found: re-find it and retry. The coordinate-based equivalents on a real device are device_tap and ios_tap (by udid).

ParametersJSON Schema
NameRequiredDescriptionDefault
elementIdYesElement ID from session_find_element
sessionIdYesSession ID

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description effectively communicates the non-interactive behavior (no coordinates, no scrolling) and error conditions (non-interactable or stale elements). It covers the key behavioral traits an agent needs to know.

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 the core action and requirements front-loaded. Each sentence adds value: identifies the element source, clarifies the protocol behavior, notes cross-platform support, and lists failure modes with remediation. No fluff.

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 tool with a simple schema (2 params) and no output schema, the description covers the essential context: what it does, how it behaves, and how to handle errors. It could add information about the return value (e.g., success status) but that's a minor gap.

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?

The schema already has 100% description coverage for both parameters (elementId and sessionId), so the description adds minimal extra meaning. It reinforces the origin of elementId (from session_find_element) but doesn't provide new semantic details.

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 clicks an element found by session_find_element, specifying the required identifiers (elementId and sessionId) and the mechanism (WebDriver protocol). It distinguishes itself from coordinate-based taps on real devices (device_tap, ios_tap).

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?

It explicitly states when to use this tool (for browser and mobile sessions via WebDriver) and when not to (for coordinate-based taps on real devices, pointing to alternatives). It also provides error handling guidance, advising to re-find the element and retry if stale.

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

session_console_logsAInspect

Read the browser CONSOLE logs for a browser session (DevTools console — JS errors, warnings, console.log output). Captured automatically; returns the most recent entries. Use this to diagnose page errors the user is seeing. Takes the same sessionId as the rest of this family. (Browser sessions only; returns nothing for mobile/native device sessions.)

ParametersJSON Schema
NameRequiredDescriptionDefault
levelNoFilter to a single level. Pass "error" to see only errors.
limitNoMax entries to return (most recent first-shown). Default 50, max 500.
sessionIdYesBrowser session ID (same id used by the other session_* tools)

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. It discloses that logs are 'Captured automatically' and 'returns the most recent entries', implying no side effects and a limited window. It also notes it returns nothing for non-browser sessions. But it does not state what happens with an invalid sessionId, empty logs, or the exact return structure.

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 compact—four sentences with no filler. It front-loads the core purpose, then gives usage context, family consistency, and scope exclusion. Every sentence contributes value.

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?

The tool is simple and the schema covers parameters, but there is no output schema and the description does not describe the return format (e.g., array of objects with message, level, timestamp). It also omits error behavior or pagination details beyond the limit parameter. For a diagnostic tool, this is a notable gap, though not critical given the sibling context.

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 all three parameters, so the schema already documents level, limit, and sessionId thoroughly. The description adds minimal parameter-specific value—it only implicitly ties 'most recent entries' to the limit parameter. Since the schema is complete, baseline 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 verb 'Read' and the resource 'browser CONSOLE logs', and specifies it covers JS errors, warnings, and console.log output. It also distinguishes itself from mobile/native sessions and from other sibling tools like ios_safari_console_logs and android_devtools_console_logs by explicitly limiting to browser sessions.

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 provides a clear use case: 'Use this to diagnose page errors the user is seeing.' It also gives an explicit exclusion: 'Browser sessions only; returns nothing for mobile/native device sessions.' However, it does not explicitly compare against other console-log tools like web_console_messages or session_network_logs, so it lacks a full when-not-to-use guide.

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

session_createAInspect

Open a W3C WebDriver session on the testing grid — a browser session (Selenium) or a mobile session (Appium), decided by what you pass: a browserName such as chrome, firefox or MicrosoftEdge for a browser; an empty browserName plus platformName ANDROID or IOS and a device UDID in capabilities for a device. Returns the sessionId every other session_* tool takes, and the capabilities the grid actually negotiated. This is the automation-protocol surface — reach for it when the work needs element handles or mirrors existing Selenium/Appium code. To drive a desktop browser page without a WebDriver session use the web_* tools (addressed by pageId); to drive the browser on a real phone use the webpage_* tools (addressed by udid). Leave platformName and browserVersion off unless you must pin them: literal 'any' or 'latest' is strict-matched against node stereotypes, which advertise concrete values, and fails to match anything.

ParametersJSON Schema
NameRequiredDescriptionDefault
browserNameYesBrowser name (chrome, firefox, MicrosoftEdge) or empty for a mobile session
capabilitiesNoAdditional W3C capabilities (e.g. automation-engine settings, device UDID)
platformNameNoPlatform (ANDROID, IOS, linux, etc.)
browserVersionNoBrowser version

TDQS

A4.7/5.0
Behavior4/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 and does a good job: it explains conditional behavior based on parameters, states that it returns sessionId and negotiated capabilities, and warns about strict matching of 'any' or 'latest'. It does not mention resource lifecycle, cleanup obligations, or failure/side-effect behavior, which would have made it fully transparent for a session-creating operation.

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 long but every sentence contributes: purpose, mode selection, return value, use case, alternatives, and a parameter warning. It is dense and could be slightly restructured for readability, but it avoids filler and front-loads the core purpose.

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?

For a tool with no output schema, the description adequately covers what is returned (sessionId and negotiated capabilities) and how the two distinct invocation modes work. It also addresses the sibling-tool landscape and the strict-matching pitfall, making it complete enough for an agent to invoke correctly.

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?

Although schema coverage is 100%, the description adds essential conditional semantics: empty browserName plus platformName ANDROID/IOS and a device UDID for mobile sessions. It also cautions against literal 'any' or 'latest' values for platformName/browserVersion, which is non-obvious and not present in 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 opens with a specific verb and resource: "Open a W3C WebDriver session on the testing grid." It clearly distinguishes browser sessions (Selenium) from mobile sessions (Appium) and positions this tool as the automation-protocol surface versus the web_* and webpage_* siblings. An agent can immediately tell what this tool does and how it differs from related tools.

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?

Usage guidance is explicit: "reach for it when the work needs element handles or mirrors existing Selenium/Appium code," and it names concrete alternatives for non-WebDriver cases (web_* tools for desktop pages, webpage_* tools for real phones). It also gives a strong conditional instruction to omit platformName and browserVersion unless pinning is required, explaining the strict-matching failure mode.

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

session_executeAInspect

Run JavaScript in the page of a browser session and return its value. The script runs as a FUNCTION BODY, so it must return what you want back — a script with no return yields null, which is the usual reason this looks like it did nothing. args are passed through as the script's arguments. Browser sessions only. Addressed by sessionId. Use it for what the protocol has no verb for: reading a computed style, clearing an input before session_send_keys, scrolling an element into view. The equivalents elsewhere are web_evaluate (desktop grid page, by pageId) and ios_safari_evaluate / android_devtools_evaluate (real device browser, by udid).

ParametersJSON Schema
NameRequiredDescriptionDefault
argsNoArguments to pass to the script
scriptYesJavaScript code to execute (e.g. "return document.title")
sessionIdYesSession ID

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it explains the function-body execution model, the requirement to return a value, the null-result pitfall, and args passing. It does not cover async/Promise behavior or potential side effects of arbitrary JS, but the disclosed gotchas are valuable.

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?

Every sentence earns its place: main purpose first, then behavioral gotcha, then scope and sibling routing. No filler or redundancy despite the length.

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 tool with no annotations and no output schema, this is unusually complete: it covers what it does, how scripts must be written, a common failure mode, scope restrictions, and alternatives. A brief note on serialization of return values would make it fully complete, but nothing critical is missing.

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 real meaning beyond the schema: script must be a function body containing return, and args are passed through to that function. This clarifies what would otherwise be ambiguous.

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?

States a specific verb and resource: 'Run JavaScript in the page of a browser session and return its value.' It also differentiates from sibling evaluate tools by naming equivalents and its intended niche, so an agent can distinguish it from web_evaluate and ios/android evaluate.

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 says when to use it: 'Use it for what the protocol has no verb for', gives concrete examples, and names alternative tools across contexts. Also constrains scope with 'Browser sessions only.'

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

session_find_elementAInspect

Find one element in a WebDriver session and return the elementId that session_click and session_send_keys take. using selects the strategy — "css selector", "xpath", "id", "name", "link text", "partial link text", "tag name" or "class name" — and value is the query for it. Returns the FIRST match only, and errors rather than returning empty when nothing matches, so treat an error as 'not on the page yet' and retry after the page settles. Works on browser sessions and on mobile sessions, where the same strategies address native elements. Addressed by sessionId; the coordinate-free equivalents on a real device are device_find_element / ios_find_element (by udid).

ParametersJSON Schema
NameRequiredDescriptionDefault
usingYesLocator strategy (e.g. "css selector", "xpath", "id")
valueYesLocator value (e.g. "#login-btn", "//button[@id='submit']")
sessionIdYesSession ID

TDQS

A4.5/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 that it returns only the FIRST match, that it errors rather than returning empty when nothing matches, and advises treating an error as 'not on the page yet' and retrying after the page settles. This is meaningful behavioral context beyond the schema.

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 dense but well-organized: it opens with the core purpose, then explains parameters, then behavior, then scope and alternatives. Every sentence adds information; the only minor issue is that the strategy list is long, but it is necessary for correct invocation.

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 3-parameter tool with no output schema, the description covers the purpose, parameter semantics, return value, error behavior, and scope. It does not describe the exact shape of the returned elementId or the error format, but the description explicitly says the return is an elementId consumed by sibling tools, which is sufficient for an agent to invoke it correctly.

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 the baseline is 3. The description adds value by explaining the relationship between `using` and `value` ('`using` selects the strategy... and `value` is the query for it') and by listing the exact allowed strategy strings, which the schema only gives examples of. It also clarifies the output's role as input to session_click and session_send_keys.

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 states a specific verb ('Find'), a resource ('one element in a WebDriver session'), and the output ('elementId that session_click and session_send_keys take'). It also enumerates the locator strategies, which distinguishes it from sibling find tools like device_find_element and ios_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 explicitly says it works on browser and mobile sessions, and names the coordinate-free alternatives (device_find_element / ios_find_element by udid) for real devices. It also gives a clear when-to-use signal: use this when you have a sessionId and need an elementId for session_click/session_send_keys.

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

session_get_titleAInspect

Return the title of what a WebDriver session is currently showing — the document title for a browser session, the foreground activity name for a mobile session. Cheap, and the usual way to confirm a navigation landed where you expected before reading the whole page with session_page_source. Addressed by sessionId; on a real device the same question is device_current_app or ios_active_app (by udid).

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIdYesSession ID

TDQS

A4.5/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 the read-only nature, cost ('cheap'), and the fact that it requires a sessionId. It doesn't cover error cases or return format, but for a simple getter this is adequate. No contradictions with annotations (none exist).

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 purpose front-loaded, followed by usage context and alternatives. Every sentence earns its place with no redundancy.

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

Completeness5/5

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

For a simple one-parameter getter with no output schema, the description is complete: it defines what it returns for both browser and mobile, explains when to use it, and points to related tools. Nothing an agent needs to call it correctly is missing.

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?

The schema has 100% coverage for the single parameter sessionId with a description 'Session ID'. The description mentions 'Addressed by sessionId' but adds no extra meaning beyond the schema, so baseline 3 is appropriate.

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

Purpose5/5

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

States the specific verb 'Return' and resource 'title of what a WebDriver session is currently showing', and distinguishes between browser and mobile. It names sibling tools (session_page_source, device_current_app, ios_active_app) so an agent can immediately differentiate it from alternatives.

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 says when to use it ('confirm a navigation landed where you expected') and when not ('before reading the whole page with session_page_source'). It also names alternatives for real devices, giving clear context and exclusions.

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

session_listAInspect

List the WebDriver sessions currently open on the testing grid, with their ids and negotiated capabilities. Use it to recover a sessionId you lost track of, or to see what is still holding a node before opening another session. Covers browser and mobile sessions alike. This is not a device list — for the phones and tablets available to drive, use device_list.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It discloses that it returns ids and negotiated capabilities and covers browser and mobile sessions. It implies a read-only operation without explicitly stating it, and does not mention potential limitations like pagination or staleness, but for a simple list tool this is adequate.

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 three concise sentences: the first states the core function and output, the second gives concrete use cases, and the third clarifies a key distinction from a sibling tool. Every sentence contributes value without 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?

Given the simplicity (no params, no output schema), the description is sufficiently complete. It tells an agent exactly when to call it, what it returns, and what it is not. An agent can confidently decide to invoke it without additional context.

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?

There are zero parameters, so schema coverage is trivially 100%. Per the baseline for 0 params, a score of 4 is appropriate. The description adds no parameter info because none exist, which is fine.

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 'list' and the resource 'WebDriver sessions' on the testing grid, and explicitly distinguishes itself from device_list. It also mentions coverage of both browser and mobile sessions, making the purpose unambiguous.

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?

It provides explicit when-to-use scenarios: recovering a lost sessionId or checking node occupancy before opening another session. It also gives an explicit alternative (device_list) and states what this tool is not for, leaving no ambiguity.

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

session_navigateAInspect

Drive a browser session to a URL and wait for the load to finish. Browser sessions only — a native mobile session has no address bar and this errors there. Returns confirmation that it navigated, not the page: follow with session_get_title to check where it landed, or session_page_source / session_find_element to read it. Addressed by sessionId, which is what separates it from the neighbours — web_navigate opens a desktop grid page by pageId, and ios_safari_navigate / device_navigate_url drive the browser on a real device by udid. Callable as session_url, its former name.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesAbsolute URL to open, including the scheme (e.g. https://example.com)
sessionIdYesSession ID from session_create

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses that the tool waits for load completion, errors on native mobile sessions, and returns only a confirmation rather than page content, even suggesting follow-up tools. This is strong behavioral disclosure, though it omits potential side effects like whether cookies or history are cleared (unlikely but unstated).

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 five sentences, but each delivers critical information: purpose, limitation, return type, sibling differentiation, and alias. It is front-loaded with the core purpose and avoids filler. Slightly dense but well-organized.

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?

For a two-parameter tool with no output schema, the description covers all necessary context: what it does, when it fails, what it returns, how to proceed afterward, how it differs from siblings, and even its historical alias. Nothing essential is missing.

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% and both parameters have descriptions. The description adds minimal semantic value beyond the schema: it reiterates that sessionId is the addressing mechanism, which is a mild reinforcement. Since the schema already explains the parameters fully, this is a baseline score.

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: 'Drive a browser session to a URL and wait for the load to finish.' It specifies the resource (browser session) and the verb, and it explicitly differentiates from siblings by naming web_navigate, ios_safari_navigate, and device_navigate_url, clarifying the distinguishing parameter (sessionId vs pageId vs udid). This leaves no ambiguity about what the tool does.

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?

It provides explicit when-to-use and when-not-to-use guidance: 'Browser sessions only — a native mobile session has no address bar and this errors there.' It also names the exact alternatives and the criteria for choosing them, making the selection logic transparent.

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

session_network_logsAInspect

Read the NETWORK requests for a browser session (DevTools Network tab — method, URL, status, type, timing, size). Captured automatically; returns the most recent requests. Use to find failing (4xx/5xx) or slow requests. Takes the same sessionId as the rest of this family. Response/request BODIES are not available. (Browser sessions only.)

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoFilter by resource type, e.g. "xhr", "fetch", "document", "script", "stylesheet", "image".
limitNoMax requests to return (most recent). Default 50, max 500.
sessionIdYesBrowser session ID (same id used by the other session_* tools)
failuresOnlyNoWhen true, only show requests that failed or returned status >= 400.

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the behavioral disclosure burden. It covers read-only semantics, automatic capture, recent-request scoping, unavailable request/response bodies, and the browser-only limitation. It does not mention auth, rate limits, or side effects, but for a read tool the disclosed constraints are substantial.

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 front-loaded with the primary action and output fields, then adds only high-value behavioral caveats (automatic capture, most-recent behavior, no bodies, browser-only). Every sentence earns its place and there is no filler or restatement of the schema.

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 four-parameter tool with no output schema and no annotations, the description compensates well by listing returned fields, the failure-slow-use case, the family sessionId convention, and the absence of bodies. It omits some details like pagination beyond limit, but an agent has enough to invoke it correctly.

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 input schema already documents all four parameters individually. The description adds minimal semantic value beyond reinforcing 'most recent' for limit and 'same sessionId' for the session family, which the schema also states.

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 opens with a specific verb and resource: 'Read the NETWORK requests for a browser session,' and enumerates the exact fields returned (method, URL, status, type, timing, size). It conveys scope explicitly with 'Browser sessions only' and ties the sessionId to the session_* family, distinguishing it from broader network capture tools.

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 explicitly states when to use the tool: 'Use to find failing (4xx/5xx) or slow requests.' It implies the correct context by noting browser-session scope and automatic capture, but it does not name alternative sibling tools or state when not to use it.

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

session_page_sourceAInspect

Return what a WebDriver session is currently showing as markup: the rendered DOM as HTML for a browser session, the native view hierarchy as XML for a mobile session. This is the WHOLE document — it can be very large, so prefer session_find_element when you only need one element, and reach for this when you need to see the structure or search it yourself. Addressed by sessionId; the device-side equivalents are device_page_source and ios_page_source (by udid), which return the on-screen hierarchy without a WebDriver session.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIdYesSession ID

TDQS

A4.5/5.0
Behavior4/5

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

No annotations are present, so the description carries the burden of behavioral disclosure. It warns that the result is the WHOLE document and can be very large, and frames the operation as read-only by using "Return what ... is currently showing." It does not cover failure modes or session-not-found behavior, but for a simple read tool this is reasonable coverage.

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?

Three sentences deliver the core purpose, return-type distinction, size warning, usage preference, and sibling alternatives. No filler; the most important scope and size information 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?

For a single-parameter read tool with no output schema, the description fully covers what is returned, in what formats, how large it may be, when to avoid it, and which siblings to use instead. Nothing essential is missing.

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?

The input schema already documents sessionId with 100% coverage. The description only repeats that the tool is "Addressed by sessionId" and adds no format, source, or syntax detail beyond the schema, so it meets the baseline but does not exceed 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 states a specific verb and resource: "Return what a WebDriver session is currently showing as markup," and clarifies output formats (HTML DOM vs XML native hierarchy). It also distinguishes itself from session_find_element, device_page_source, and ios_page_source, so an agent can tell it apart without opening schemas.

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 guidance: prefer session_find_element for a single element, use this when needing the whole structure or self-directed search. It also names device-side equivalents and the condition under which they apply, making routing unambiguous.

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

session_quitAInspect

End a session created by session_create and release the browser or device it holds. Takes the sessionId, not a udid. Always call it when finished — an abandoned session keeps its grid node until the grid times it out, which blocks the next caller. Calling it twice on the same id returns the grid's 'no such session' error rather than a silent success, so it is safe to confirm.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIdYesSession ID to quit

TDQS

A4.7/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 the lifecycle effect (releases grid node), the side-effect of not calling it, and the idempotency behavior (second call yields 'no such session' error). This goes beyond basic mutation disclosure, though it doesn't detail what the success response looks like (no output schema).

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

Conciseness5/5

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

Every sentence earns its place. The description is compact but covers the essential behavior, usage guidance, and edge-case handling. It is well-structured: action, parameter clarification, when to use, consequence of misuse, and idempotency guarantee.

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?

For a single-parameter tool with no output schema, the description covers all necessary information: what it does, what it takes, when to call, and what happens in edge cases. No missing information for an agent to invoke it correctly.

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% and the parameter is self-descriptive ('sessionId'). The description adds meaning by emphasizing it must be the sessionId, not a udid, which is critical for correct invocation. This clarifies potential confusion that could arise from similar device-related tools that use udid.

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 it ends a session created by session_create and releases the held resource. Specifies it takes a sessionId, not a udid, distinguishing it from similar session-related tools. The resource (browser/device) and action (release) are explicit.

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 guidance: always call when finished. Explains the consequence of not calling it (abandoned session blocks next caller). Mentions that it is safe to confirm with a second call, as it returns an error rather than silent success. No ambiguity about when to use.

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

session_screenshotAInspect

Capture what a WebDriver session is currently showing — the browser viewport for a browser session, the device screen for a mobile session — as a base64 PNG. Addressed by sessionId, which is what separates it from its neighbours: web_screenshot takes a desktop grid page by pageId, webpage_screenshot takes the browser on a real device by udid, and device_screenshot / ios_screenshot take the device screen itself by udid.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIdYesSession ID

TDQS

A4.5/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full disclosure burden. It does reveal the capture source, the base64 PNG output, and the addressing mechanism, but it does not mention prerequisites like an active session, side effects, or error behavior. For a simple read-only screenshot operation, the core behavior is nonetheless disclosed.

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 definition is compact and purposeful: the first clause defines the action and result, and the second clause handles sibling differentiation. There is no filler, and 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?

Given a single required parameter and no output schema, the description covers what is captured, in what format, and how the target is identified. An agent has enough information to select and invoke this tool correctly without additional context.

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 only describes sessionId as 'Session ID', so the description adds meaningful semantics by explaining that sessionId is the addressing key that distinguishes this tool from pageId- and udid-based siblings. This is useful context beyond the schema and helps an agent populate the parameter correctly.

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 names a specific verb ('Capture'), resource ('WebDriver session currently showing'), and output format ('base64 PNG'). It also explicitly distinguishes the tool from nearby screenshot siblings by identifier type, so an agent can tell exactly what this tool does.

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 gives a concrete selection rule: use this when the target is addressed by sessionId. It explicitly contrasts this with web_screenshot (pageId), webpage_screenshot (udid), and device_screenshot/ios_screenshot (udid), making the when-to-use and when-not-to-use decision clear.

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

session_send_keysAInspect

Type text into an element found by session_find_element, addressed by its elementId. It APPENDS — W3C Element Send Keys does not clear the field first, so a second call on the same input concatenates rather than replaces. Clear it yourself (session_execute setting value to an empty string, or a select-all before typing) when you mean to replace. Takes the sessionId that found the element. Works on browser and mobile sessions. Errors when the element is not editable, or when it has gone stale because the page navigated since it was found — re-find it and retry.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesText to type into the element
elementIdYesElement ID from session_find_element
sessionIdYesSession ID

TDQS

A4.5/5.0
Behavior4/5

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

No annotations are provided, so the description must carry the full burden. It discloses the appending behavior (non-obvious W3C trait), the need for manual clearing, and error conditions (non-editable element, staleness due to navigation). It stops short of detailing exact error handling or whether typing is atomic, but the key behavioral traits are well covered.

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

Conciseness4/5

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

The description is efficiently written, with the core action and critical caveat front-loaded. It packs several important points (append behavior, clearing advice, session context, error conditions) into three sentences without redundancy. Minor length but high information density.

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 3 simple parameters, no output schema, and no annotations, the description covers the necessary aspects: what it does, how to use it correctly (clearing), and failure modes. It could mention return values or exact error messages, but for an agent to invoke correctly, it is sufficient.

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 the schema already documents the parameters. The description adds meaning by explaining the role of elementId (linking to session_find_element) and text (typed, not cleared), which goes beyond simple schema descriptions. It compensates well for the lack of enum or additional parameter hints.

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 types text into an element identified by elementId from session_find_element. It is distinct from siblings like session_click and device_type by explicitly naming the element-finding prerequisite and the W3C behavior.

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 explicitly warns about the appending behavior and instructs to clear the field first when replacement is intended, providing concrete alternatives (session_execute setting empty string or select-all). It also specifies the sessionId context and that it works on both browser and mobile sessions, which is more specific than generic siblings.

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

submit_tool_feedbackAInspect

Report feedback about the robot-actions MCP device-control tools THEMSELVES (not about the app under test). Use this to tell the maintainers when a tool was confusing, missing a capability you needed, behaved like a bug, or worked well and confirmed something you were unsure about. Be specific and actionable: name the tool_name, describe the concrete situation/inputs, and what you expected vs. what happened. This call is fire-and-forget — it is not shown to the end user, it only records feedback for maintainers to triage later.

ParametersJSON Schema
NameRequiredDescriptionDefault
messageYesThe feedback itself — be specific and actionable about what happened and why it mattered.
categoryYesKind of feedback being reported.
severityNoHow much this impacted the task, if applicable.
tool_nameNoName of the MCP tool this feedback concerns, e.g. "device_tap".
reproductionNoSteps/inputs that reproduce the issue, if this is a bug report.
suggested_fixNoA concrete suggestion for how the tool could be improved.

TDQS

A4.6/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 behavioral burden. It discloses that the call is fire-and-forget, not shown to the end user, and only records feedback for maintainers. This is important behavioral context. It doesn't mention error handling or rate limits, but for a simple feedback submission that's acceptable. No contradictions with annotations (none exist).

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 a single paragraph but front-loaded with the primary purpose and exclusions. It provides actionable guidance without excessive length. It's slightly verbose but every sentence contributes meaning. It could be trimmed slightly, but it's well-structured.

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?

For a feedback submission tool with no output schema, it fully explains what happens (fire-and-forget, recorded for maintainers), when to use it, and what to include. There are no hidden behaviors or expectations an agent would need beyond what's described. It's complete for its purpose.

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% with descriptions for all six parameters. The description adds value by instructing the agent to be specific and actionable, naming the tool_name, and describing expected vs actual outcomes — which guides how to fill the parameters. This is more than just repeating schema fields, so it earns a 4 above the 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 a specific verb and resource: 'Report feedback about the robot-actions MCP device-control tools THEMSELVES.' It explicitly distinguishes from app-under-test feedback and is unambiguous about its purpose. It's a meta-tool among many device-control siblings, and the description makes that distinction obvious.

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?

It explicitly tells when to use it ('when a tool was confusing, missing a capability you needed, behaved like a bug, or worked well and confirmed something'), and explicitly excludes the app under test. It also gives concrete guidance on what to include (tool_name, situation, expected vs actual). No alternatives are needed since this is a unique feedback channel.

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

testrail_add_attachment_to_caseAInspect

Attach a file from your /workspace to a TestRail case. The file must already exist at the given workspace path (write it first if needed). ALWAYS confirm with the user via a chat bubble before calling — this writes to the customer's TestRail. Returns the new attachment_id on success.

ParametersJSON Schema
NameRequiredDescriptionDefault
caseIdYesTestRail case id
workspacePathYesPath INSIDE your /workspace mount, e.g. "/workspace/screenshots/step4.png". The file must exist.
displayFilenameNoOverride the filename shown in TestRail. Defaults to the basename of workspacePath.

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries full behavioral disclosure. It states that calling this tool writes to the customer's TestRail (a side effect) and returns an attachment_id. It also enforces user confirmation. It doesn't detail failure modes or error handling, but for a simple attachment tool, the key behaviors are 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?

Two sentences, both functional. The first states the action and key constraint; the second covers mandatory confirmation and the return value. No wasted words, front-loaded with the primary action. Perfectly concise.

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?

For a simple tool with three parameters and no output schema, the description covers the essential context: what it does, the prerequisite (file must exist), the side effect (writes to customer's TestRail), the required confirmation, and the return value. Nothing an agent needs to call it correctly is missing.

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 already documents all three parameters (caseId, workspacePath, displayFilename) including the requirement that the file exist. The description reiterates the existence requirement and adds context about the workspace path but doesn't introduce new meaning beyond what the schema provides. Baseline 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 states a specific verb ('Attach') with a clear resource ('a file from your /workspace to a TestRail case'), and the scope is explicit. It distinguishes itself from sibling tools like testrail_list_attachments or testrail_get_attachment by focusing on the add action. No ambiguity.

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 usage instructions: the file must already exist, and it mandates confirmation with the user before calling. This gives clear context on when to use it (after writing a file) and the required permission step. It doesn't explicitly name alternative tools or when not to use it, but the prerequisites and confirmation are strong guidance.

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

testrail_create_caseAInspect

Create a new TestRail test case under the given sectionId. Returns the new case id + browse URL. ALWAYS confirm with the user via a chat bubble before calling — this writes to the customer's TestRail project. Use customStepsSeparated for BDD-shaped tests (each step gets action + expected result), customSteps for plain-text. Set refs to the originating Jira/AzDO story key (e.g. 'PROJ-123') so TestRail shows the linkback chip.

ParametersJSON Schema
NameRequiredDescriptionDefault
refsNoComma-separated reference keys (e.g. "PROJ-123,PROJ-124") shown as chips
titleYesCase title (max 250 chars, will be trimmed)
typeIdNoCase type_id (tenant-specific; omit for default)
sectionIdYesTestRail section id to create the case under
priorityIdNoPriority id (1-4 in stock TestRail; tenants may customise)
customStepsNoPlain-text steps (TestRail "Text" template)
customPrecondsNoPreconditions text
customStepsSeparatedNoStructured steps (TestRail "Steps + Expected Result" template) — preferred for BDD

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral burden. It explicitly discloses the mutation side effect ('writes to the customer's TestRail project'), mandates user confirmation, and reports the return value. It does not discuss duplicate handling, permissions, or rate limits, but those are less critical for a create operation.

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?

Four sentences, front-loaded with purpose, then return value, confirmation requirement, and parameter guidance. No filler; the most critical write-side-effect warning is placed early.

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 8 parameters, no annotations, and no output schema, the description covers the essentials: what it does, what it returns, and the required confirmation. Combined with the well-described input schema, an agent has enough to call it correctly; only provenance of sectionId and fully optional parameter details are left to the schema/siblings.

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 some operational color (customStepsSeparated for BDD-shaped tests, customSteps for plain-text, refs as the originating Jira/AzDO key), but the schema already describes these fields and even marks customStepsSeparated as preferred for BDD, so the net added value is modest.

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 opens with a specific verb and resource: 'Create a new TestRail test case under the given sectionId.' This clearly differentiates it from sibling tools like testrail_update_case, testrail_list_cases, and testrail_get_case, and even states the return value (id + browse URL).

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 concrete context for when to call: to create a new case in a specified section, and it warns that this writes to the customer's project, requiring chat confirmation. It does not explicitly name alternatives such as testrail_update_case for modifying existing cases, but the create-vs-update distinction is strongly implied by the wording.

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

testrail_find_casesAInspect

Search a TestRail project for cases whose title contains the given text (case-insensitive substring), walking ALL pages server-side. USE THIS — not testrail_list_cases — to check whether a case already exists before calling testrail_create_case, because it cannot be fooled by a truncated page. Returns only matching cases plus scanned/capReached so a "no matches" answer can be trusted. Narrow with sectionId/suiteId to scan less.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesText to look for inside case titles (case-insensitive substring)
compactNoReturn only id + title per match instead of all 7 fields
suiteIdNoOptional suite scope
projectIdYesTestRail project id
sectionIdNoOptional section scope

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden of disclosing behavior. It clearly states the full-pagination behavior, the return shape (matching cases plus scanned/capReached), and why a 'no matches' result can be trusted. It also surfaces performance implications by recommending narrower scopes.

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 compact and front-loaded, leading with the core behavior, then the decision guidance, then output and performance notes. Every sentence carries information and there is no filler or repetition.

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?

For a tool with no output schema and no annotations, the description is unusually complete. It covers pagination, return fields, trustworthiness of results, when to use it, and how to narrow the scan. The only minor elaboration that could help is defining capReached more explicitly, but the field name and surrounding context make its meaning clear enough.

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 the baseline is 3, but the description adds meaning by explaining that sectionId and suiteId are not just optional scopes—they are useful for scanning less. It doesn't add much beyond that for query, projectId, or compact, but the schema already documents those adequately.

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 states a specific operation: searching a TestRail project for cases whose title contains a given case-insensitive substring, while walking all pages server-side. It also explicitly distinguishes itself from testrail_list_cases, so an agent can tell exactly what this tool does versus that sibling.

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?

It gives explicit when-to-use guidance: use this instead of testrail_list_cases when checking whether a case already exists before calling testrail_create_case. It even explains why it is the safer choice ('cannot be fooled by a truncated page') and recommends narrowing with sectionId/suiteId to reduce the scan.

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

testrail_get_attachmentAInspect

Download a TestRail attachment by id. Returns filename, contentType, and the file content base64-encoded inline. Capped at 10MB — if you expect a larger file, list first and ask the user before downloading. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
attachmentIdYesAttachment id from testrail_list_attachments

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses read-only status, the 10MB cap, and the exact return format (filename, contentType, base64-encoded content). It does not cover error handling, but the key behavioral traits are well-covered.

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

Conciseness5/5

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

Three sentences, each earning its place: the action, the return format, and the size cap with user guidance. Front-loaded and free of fluff.

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 single-parameter download tool with no output schema, the description adequately explains the return format and safety traits. It could mention error handling, but that is not necessary for correct invocation.

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% and the parameter already includes a reference to testrail_list_attachments. The description only adds 'by id' without further semantic detail, so it meets the baseline 3 for high schema coverage.

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 'Download' and resource 'TestRail attachment by id', and mentions the return values. It is distinct in action, but it does not explicitly name or contrast with siblings like testrail_list_attachments, so it slightly misses full differentiation.

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 provides clear context by noting the 10MB cap and advising to list first for larger files, implying when to use the list tool instead. It lacks an explicit when-not-to-use or named alternative, but the guidance is actionable and clear.

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

testrail_get_caseAInspect

Read a TestRail test case by id. Returns the full case detail: title, refs, steps, custom fields, labels (if TestRail 7.5+). Read-only — safe to call without user confirmation.

ParametersJSON Schema
NameRequiredDescriptionDefault
caseIdYesTestRail case id (the C-number, e.g. 14344)

TDQS

A4.3/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 safety burden itself. It explicitly says 'Read-only' and 'safe to call without user confirmation,' and notes the version-dependent labels field. It does not cover error cases or authentication, but for a simple single-record get this is sufficient.

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?

Three compact sentences with no redundancy: action, return contents, and safety note are each front-loaded and purposeful. 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?

For a one-parameter read tool with a fully documented schema, the description is complete. It enumerates the key return fields, flags the TestRail version dependency, and states the safety profile in the absence of annotations.

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%, and the caseId parameter description already explains the ID format with an example. The tool description adds no new parameter semantics beyond restating the by-id usage, so the baseline of 3 applies.

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?

Begins with a specific verb and resource: 'Read a TestRail test case by id.' It also states what is returned (full case detail), which separates it from the list/search sibling tools that return collections or subsets.

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 makes applicability clear: use this when you have a specific case ID and need the full detail of a single TestRail case. It does not explicitly name alternative tools or when-not-to-use conditions, so it stops short of a 5.

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

testrail_list_all_casesAInspect

List EVERY case in a TestRail project/suite/section, walking all pages server-side so the caller never handles offsets. Returns compact id+title rows by default because the full form overruns the output limit on real projects — pass compact:false only for a narrow sectionId. Capped at 20 pages (5000 cases); check capReached. If you only need to know whether one specific case exists, use testrail_find_cases instead — it is far cheaper.

ParametersJSON Schema
NameRequiredDescriptionDefault
compactNoDefaults to true (id + title only). Set false for all 7 fields — only safe on a small section.
suiteIdNoOptional suite scope
projectIdYesTestRail project id
sectionIdNoOptional section scope

TDQS

A4.9/5.0
Behavior5/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 transparently discloses that it walks all pages server-side (so the caller never handles offsets), that it caps at 20 pages (5000 cases) and exposes capReached, and that the default compact form is used to avoid output limit issues. This goes beyond simple read/write safety and gives critical operational details.

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 dense but well-structured: it front-loads the core scope and pagination behavior, then addresses output format and limitations, and ends with a clear routing to an alternative. Every sentence adds information, and the length is justified given the operational 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?

Given the tool's complexity (pagination, output limits, return format) and the lack of an output schema, the description covers all essential aspects: the default compact output, the cap, the capReached flag. It also provides usage context via the sibling alternative. Nothing critical is missing for an agent to call this correctly.

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 the schema already documents each parameter. The description adds value by explaining the purpose of the compact parameter (default true, set false only for narrow sections) and explicitly mentions capReached as an output signal, which ties to the page cap. It doesn't add much for suiteId/sectionId beyond scoping, but the compact guidance is useful.

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 states a specific verb ('List EVERY case') and resource ('TestRail project/suite/section'), and clearly distinguishes it from the sibling testrail_find_cases by noting the difference in scope (all cases vs. checking existence of one). The emphasis on server-side pagination and the default compact format further clarify its purpose relative to other case-listing tools.

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 explicitly says when to use this tool (when you need to list all cases) and when not to (if you only need to know whether one specific case exists, use testrail_find_cases instead, calling it 'far cheaper'). It also provides guidance on the compact parameter, advising to avoid full form unless the section is narrow.

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

testrail_list_attachmentsAInspect

List all attachments on a TestRail case. Returns id, filename, size, created_on, user_id per attachment. Read-only — safe without user confirmation. Use this to find attachment ids before calling testrail_get_attachment.

ParametersJSON Schema
NameRequiredDescriptionDefault
caseIdYesTestRail case id

TDQS

A4.5/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 clearly states 'Read-only — safe without user confirmation,' disclosing the safety profile. It also discloses the output structure (id, filename, size, created_on, user_id). This is useful beyond the schema, though it omits pagination or error behavior, which is minor for a simple list operation.

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?

Three sentences, each adding value: purpose, return fields, and usage guidance. No redundancy or filler. The key information 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?

For a simple tool with one integer parameter and no output schema, the description covers purpose, output fields, safety, and usage context. Nothing essential for an agent to invoke it correctly is missing.

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

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 already documents caseId as 'TestRail case id.' The description does not add any extra meaning about the parameter beyond restating the operation context. Baseline of 3 is appropriate since the schema fully handles parameter documentation.

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?

States a specific verb and resource: 'List all attachments on a TestRail case.' It also lists the returned fields, making the tool's function unmistakable. It distinguishes itself from the sibling testrail_get_attachment by explicitly framing this as the precursor to that tool.

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 guidance: 'Use this to find attachment ids before calling testrail_get_attachment.' This directly tells the agent when to invoke this tool and how it fits into a workflow, leaving no ambiguity about its role.

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

testrail_list_casesAInspect

List test cases in a TestRail project, optionally scoped to a suite and/or section. Use this to discover case ids before calling testrail_get_case, or to check what already exists before creating a new case with testrail_create_case. Returns { cases: [...], paging: {...} }, where each case is a compact summary (id, title, section_id, suite_id, priority_id, type_id, refs) — call testrail_get_case for full step detail on a specific case. Results are NOT auto-paged: TestRail caps a page at 250, so always check paging.hasMore and re-call with offset=paging.nextOffset before concluding a case does not exist. Prefer scoping with sectionId/suiteId over paging the whole project.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax cases to return in this page (TestRail default 250)
offsetNoRow offset for paging past the first page
compactNoReturn only id + title per case instead of all 7 fields. Roughly 15x smaller — use when scanning for whether a case exists, then call testrail_get_case for detail.
suiteIdNoSuite id — required for multi-suite projects, optional for single-suite
projectIdYesTestRail project id
sectionIdNoSection id — scope results to cases directly inside this section

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 carries the full burden, and it delivers: it discloses the response envelope, the 7-field compact summary shape, the 250-per-page cap, the non-auto-paging behavior, and the paging.hasMore/nextOffset protocol. It also flags the compact mode's ~15x size reduction for scanning workflows.

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?

Multiple sentences, but each conveys a distinct, actionable fact: purpose, workflow, return shape, paging protocol, and scoping preference. The most general information is front-loaded before the paging caveats. No filler.

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 and no annotations, the description must define return values and call behavior itself, and it does: envelope, field list, paging loop, and performance hint. An agent knows what to expect and how to page correctly on the first call. The only omitted details, like error cases, are secondary for this read/list 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?

Input schema already documents all six parameters with 100% coverage, so the baseline is 3. The prose adds operational meaning beyond the schema by advising scoping with sectionId/suiteId over paging the whole project and connecting offset to paging.nextOffset. This elevates it slightly above baseline.

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?

Opens with a specific action and resource, 'List test cases in a TestRail project', and immediately narrows scope with suite/section. It positions itself against testrail_get_case and testrail_create_case by stating the exact workflow it feeds. This is enough for an agent to distinguish it from the main siblings despite not naming testrail_find_cases.

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 tells the agent when to reach for this tool: to discover case ids before testrail_get_case and to check existence before testrail_create_case. It also gives a concrete strategy, preferring scoped sectionId/suiteId calls over paging the entire project. The paging warning tells the agent how to complete the operation safely.

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

testrail_list_projectsAInspect

List TestRail projects accessible to the caller's TestRail account. Use this as the first step when the agent doesn't yet know which projectId to target for a new test case. Returns id + name + announcement + suite_mode for each project.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden of behavioral disclosure. It does add useful context: the operation is a list (read-only), scoped to the caller's account, and returns specific fields (id, name, announcement, suite_mode). However, it doesn't mention potential limitations like pagination, authentication requirements, or deviations in case of empty results. The read-only nature is implied by 'List' but not explicitly stated.

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 with no filler. The first sentence states the action, the second provides usage context and return fields. The information is front-loaded, making it quick for an agent to parse and act on.

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?

For a simple list tool with no parameters and no output schema, the description is complete. It tells the agent when to call it, what it returns, and how to interpret the scope. The sibling tools that need a projectId are implicitly covered by the usage guidance. Nothing essential for invoking this tool correctly is missing.

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, and the schema description coverage is 100% (vacuously). Per the baseline for 0-param tools, the description does not need to explain parameters. It goes a step further by describing the return fields, which helps the agent know what to expect in the response.

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 the action ('List TestRail projects') and the resource scope ('accessible to the caller's TestRail account'). It is unambiguous and distinct from the sibling testrail tools, which all operate on specific entities like cases, runs, or sections. The agent can immediately identify this as the project-listing tool.

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 instructs when to use this tool: 'as the first step when the agent doesn't yet know which projectId to target for a new test case.' This gives a concrete trigger condition and implicitly tells the agent that once a projectId is known, other testrail_* tools should be used instead.

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

testrail_list_runsAInspect

List TestRail runs for a project, newest first. Returns { runs: [...], paging: {...} } — run id (R-number), name, created_on, completed_on, and pass/fail counts. Results are NOT auto-paged: TestRail caps a page at 250, so check paging.hasMore and re-call with offset=paging.nextOffset before concluding a run does not exist. Use milestoneId or createdAfter (epoch seconds) to filter to a release or window instead of paging through history.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax runs to return in this page (TestRail default 250)
offsetNoRow offset for paging past the first page
projectIdYesTestRail project id
milestoneIdNoOptional milestone filter
createdAfterNoOptional epoch-seconds lower bound on created_on

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 carries the full behavioral burden and meets it: it discloses non-auto-paging, the 250 cap, paging.hasMore/nextOffset semantics, and the exact fields returned. It even warns about a false-negative conclusion, which is exactly the kind of behavioral trap an agent needs to know.

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?

Three dense sentences: purpose and ordering first, then return shape and pagination behavior, then filtering guidance. No filler, no repetition of schema details.

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?

For a list tool with no output schema or annotations, the description provides the essential missing context: output shape, key fields, pagination contract, and filter strategy. An agent can invoke it correctly and interpret results without further inference.

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 the baseline is 3. The description adds real value by explaining how limit/offset participate in paging, how offset should be fed from paging.nextOffset, and why milestoneId/createdAfter are preferable to paging. This goes beyond the schema's terse field 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 first sentence names the exact operation ('List TestRail runs'), scopes it to a project, and specifies ordering ('newest first'). The return-shape detail and R-number id format make it unambiguous against siblings like testrail_list_tests_for_run or testrail_list_cases.

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 concrete usage guidance: use milestoneId or createdAfter to filter to a release/window instead of paging through history, and don't conclude a run is absent until paging.hasMore is false. It doesn't explicitly name alternative tools, but the tool's purpose and sibling set make that less necessary.

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

testrail_list_sectionsAInspect

List sections (folders) inside a TestRail project. For multi-suite projects, suiteId is REQUIRED (TestRail rejects the call without it). For single-suite projects, suiteId is optional. Returns id + name + parent_id + depth so the agent can render the section tree to the user.

ParametersJSON Schema
NameRequiredDescriptionDefault
suiteIdNoSuite id — required for multi-suite projects, optional for single-suite
projectIdYesTestRail project id

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations, the description carries the disclosure burden. It explains the multi-suite suiteId requirement and that TestRail rejects calls without it, and it reveals the returned fields (id, name, parent_id, depth) and their purpose for rendering the section tree. It does not mention pagination or ordering, but this is still strong behavioral disclosure for a read-only list operation.

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 three tightly written sentences with no filler. The core action is front-loaded, the critical suiteId constraint follows immediately, and the return-value purpose is stated last without redundantly restating the schema.

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 two-parameter list operation with no output schema, the description is largely complete: it names the resource, specifies the required/optional parameter condition, and spells out the returned fields so the agent knows the tool supports tree rendering. Minor omissions like pagination or ordering keep it from a perfect score.

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 already documents both projectId and suiteId. The description reinforces the suiteId behavior but mostly repeats the schema's own note; it adds the 'TestRail rejects the call' consequence rather than new parameter-level meaning.

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 identifies the operation as listing sections/folders inside a TestRail project and adds the useful clarification that sections are folders. It is easy to distinguish from sibling tools like testrail_list_suites or testrail_list_cases, though it does not explicitly name an alternative.

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

Usage Guidelines3/5

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

The description gives a clear implied use case: when the agent needs to list/render sections in a project. It also provides important per-project-type guidance about when suiteId is required. However, it does not explicitly contrast this tool with related testrail_list_* siblings or state when to prefer one over another.

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

testrail_list_suitesAInspect

List suites for a TestRail project. Most projects are single-suite (returns exactly one suite). Multi-suite projects return many. Returns id + name + description + is_master + is_baseline.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYesTestRail project id (from testrail_list_projects)

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It does disclose the shape of the response (id, name, description, is_master, is_baseline) and the single vs multi suite behavior, which helps an agent know what to expect. But it doesn't mention ordering, pagination, or what happens when projectId is invalid or inaccessible.

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?

Three tight sentences, each earning its place: what it does, the single/multi-suite behavior, and the returned fields. No filler.

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 list tool with a single parameter, the description covers purpose, response shape, and the key behavioral nuance (single vs multi-suite). It could mention pagination or ordering, but the absence is a minor gap given the tool's simplicity and the schema's completeness.

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% and the sole parameter is well documented with a cross-reference to testrail_list_projects. The description adds context by clarifying that the response is one suite for most projects and many for multi-suite projects. It doesn't describe the parameter further, but with a single integer parameter and a 100%-covered schema, the burden is low.

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?

States a specific verb ('List') and resource ('suites for a TestRail project'), and adds the crucial single-suite vs multi-suite distinction plus the exact returned fields. This clearly separates it from siblings like testrail_list_projects, testrail_list_cases, and testrail_list_sections.

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: call with a project id to see the suites in that project. It distinguishes multi-suite projects from single-suite ones, but does not explicitly tell the agent when to choose this over testrail_list_all_cases or testrail_list_sections, nor does it warn about the single-suite case being a prerequisite to understanding the response shape.

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

testrail_list_tests_for_runAInspect

List EVERY test inside a TestRail run, walking all pages server-side so the caller never handles offsets. Returns each test with its T-id (test instance, e.g. T1234), C-id (underlying case_id — feed this to testrail_get_case), title, and status_id. Filter by statusIds (TestRail status: 1=passed, 2=blocked, 3=untested, 4=retest, 5=failed) to e.g. list only failed tests when triaging. Capped at 20 pages (5000 tests); check capReached before concluding a test is not in the run.

ParametersJSON Schema
NameRequiredDescriptionDefault
runIdYesTestRail run id (R-number)
statusIdsNoOptional status filter — e.g. [5] for failed only, [2,5] for blocked+failed

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 carries the full burden, and it delivers: it discloses server-side pagination, the exact fields returned (T-id, C-id, title, status_id), the status-code mapping, and the 20-page/5000-test cap with the capReached warning. This is far beyond a vague 'list tests' phrasing.

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?

Three dense sentences, each earning its place: the first establishes scope and pagination behavior, the second defines the return payload, the third documents filtering and the hard cap. No filler, no repetition of schema fields.

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?

There is no output schema and no annotations, so the description must explain returns, parameters, and edge behavior. It does all three: return fields, status filter semantics, and the cap/capReached caveat. Nothing critical is missing for an agent to invoke it correctly.

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?

The schema covers the parameters, but the description adds substantial meaning: statusIds is fully enumerated with TestRail's numeric meanings, and the C-id is explicitly linked to testrail_get_case. This goes well above the schema-only baseline.

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 states a specific verb ('List EVERY test') and a clear resource ('inside a TestRail run'), and distinguishes test instances (T-id) from underlying cases (C-id). This makes its purpose unmistakable and separates it from sibling TestRail case-listing tools.

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 explains that pagination is handled server-side so the caller never manages offsets, and it gives a concrete use case: filtering by statusIds to list only failed tests when triaging. It does not explicitly name alternative sibling tools or state when not to use it, but the intent is clear.

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

testrail_update_caseAInspect

Update an existing TestRail test case. Any field omitted is left unchanged. ALWAYS confirm with the user via a chat bubble before calling — this writes to the customer's TestRail. IMPORTANT: labels is a REPLACE, not a merge. To add a label without losing existing ones, FIRST call testrail_get_case, READ existing labels, MERGE, THEN call this with the full new array.

ParametersJSON Schema
NameRequiredDescriptionDefault
refsNoNew refs string (e.g. "PROJ-123,PROJ-124")
titleNoNew title (max 250 chars)
caseIdYesTestRail case id (C-number)
labelsNoFull new label set (REPLACE — read existing first if you want to add without removing). TestRail 7.5+ only.
typeIdNoChange type_id
priorityIdNoChange priority_id
customStepsNoNew plain-text steps
customPrecondsNoNew preconditions
customStepsSeparatedNoNew structured steps (BDD-preferred). Replaces existing.

TDQS

A4.8/5.0
Behavior5/5

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

No annotations are present, so the description carries the full burden. It discloses mutation ('writes to the customer's TestRail'), partial-update behavior, and the destructive label REPLACE semantics. This is exactly the behavioral context an agent needs before invoking a write operation.

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?

Three dense sentences with the action and key semantics front-loaded, the safety warning separated, and the label caveat clearly flagged with IMPORTANT. No filler or redundant restating of the schema.

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 9-parameter mutation tool with no annotations or output schema, the description covers intent, safety, partial update, and the one dangerous parameter. It does not mention return values or errors, but those are not essential for correct invocation and the schema fully documents parameters.

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 the baseline is 3. The description adds a global partial-update semantic and reinforces the labels REPLACE behavior and merge workflow, which goes beyond the schema's per-field 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?

States a specific verb ('update'), resource ('existing TestRail test case'), and partial-update semantics ('Any field omitted is left unchanged'). Clearly distinct from sibling testrail_create_case and the read/list tools.

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 instructs to confirm with the user before calling because it writes to the customer's TestRail, and provides an explicit alternative workflow for labels: first call testrail_get_case, merge, then call. This gives strong when-to-use and when-to-use-another-tool guidance.

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

test_suite_add_itemAInspect

Add an item to a suite. itemType 'test' references a flow recording (category='test'); 'testPlan' references a plan. orderIndex controls position (appended to the end if omitted).

ParametersJSON Schema
NameRequiredDescriptionDefault
itemIdYesItem id — a flow recording id (itemType='test') or plan id (itemType='testPlan')
suiteIdYesSuite id to add the item to
itemTypeYesWhat itemId points at
orderIndexNoPosition within the suite (appended if omitted)

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 bears the full burden of behavioral disclosure. It clarifies the itemType semantics and orderIndex default, but does not state whether the operation is idempotent, what happens on error (e.g., missing suite or item), or any permissions or side effects. For a mutation tool, this is a notable gap, though it does not contradict any annotations (since none exist).

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 core purpose and then clarifies key parameters. It contains no fluff or redundancy, earning a top score for efficiency.

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 add operation with a fully documented schema and no output schema, the description covers the main semantics (itemType and orderIndex). It does not address error conditions or prerequisites, but these are largely implied by the required suiteId and itemId. It is sufficient for an agent to call the tool correctly, though not exhaustive.

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 covers all parameters with descriptions, so the baseline is 3. The description adds value by specifying that itemType 'test' references a flow recording with category='test', which is more detailed than the schema's generic 'What itemId points at.' It also reinforces orderIndex behavior. This extra context elevates it slightly above baseline.

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 and resource: 'Add an item to a suite.' It also defines the two itemType values and their references, making the purpose specific and unambiguous. This tool is distinct from sibling test_suite tools (create, list, run, run_status) because it is the only one focused on adding an item to an existing suite.

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 mention when to use this tool versus alternatives like test_suite_create or test_suite_run. It implicitly indicates usage for existing suites (since suiteId is required), but it does not provide exclusions or name alternative tools. The context about itemType and orderIndex helps, but there is no explicit routing guidance.

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

test_suite_createAInspect

Create a test suite — an organizational grouping of tests and test plans. Suites nest via parentSuiteId. Returns the created suite (id, displayId like S001, name).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesSuite name (required)
descriptionNoOptional suite description
parentSuiteIdNoParent suite id to nest this suite under (omit for a top-level suite)

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It discloses that the tool creates a suite, supports nesting, and returns the created suite with id, displayId, and name. However, it doesn't mention potential side effects, permissions, or what happens if parentSuiteId is invalid. The description adds some behavioral context beyond the schema, but not rich detail.

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 two sentences, front-loaded with the core purpose, and includes the key nesting behavior and return value. Every sentence earns its place with no redundancy.

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

Completeness4/5

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

For a create tool with 3 parameters and no output schema, the description covers the essential aspects: what it creates, how nesting works, and what is returned. It doesn't explain error cases or edge cases, but for a straightforward creation tool, this is nearly complete. A 4 is appropriate.

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 already documents all three parameters. The description adds context for parentSuiteId by explaining nesting and the return format, but it doesn't add significant meaning beyond the schema. Baseline 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 verb 'Create' and the resource 'test suite', and defines it as 'an organizational grouping of tests and test plans'. It also distinguishes itself from siblings like test_suite_add_item and test_suite_list by focusing on creation and nesting via parentSuiteId. The return value is specified, which helps an agent understand the tool's purpose.

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 implies when to use this tool: when creating a new test suite, including nested suites via parentSuiteId. It doesn't explicitly state when not to use it or name alternatives like test_suite_add_item, but the context of 'create' and the mention of nesting provide clear usage context. A 4 is appropriate because it gives clear context but lacks explicit exclusions.

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

test_suite_listAInspect

List the authenticated user's test suites. Pass suiteId to fetch a single suite together with its ordered items (tests + plans). Pass parentSuiteId to list only that suite's direct children; omit both to list every suite.

ParametersJSON Schema
NameRequiredDescriptionDefault
suiteIdNoFetch this single suite and include its items (tests + plans)
parentSuiteIdNoList only suites whose parent is this id (use '' or omit for all)

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the behavioral burden. It discloses useful behavior: returned items are ordered, children are direct-only, and all suites are listed when no filter is given. However, it does not mention the return format, pagination, or explicitly state that this is a read-only operation, which would be expected with no annotation coverage.

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?

Three short sentences convey the core action and all parameter modes with zero wasted wording. The most important instruction is front-loaded, and every clause adds functional information.

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 low-complexity list tool with two optional parameters and no output schema, the description covers the key invocation patterns well. It could be slightly more complete by describing the shape of the returned list or any pagination limits, but the agent has enough to call the tool correctly.

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 the parameters are already documented. The description adds meaning beyond the schema by explaining behavioral outcomes: suiteId yields a single suite with its ordered items, and parentSuiteId restricts results to direct children. This enriches both parameters beyond their plain property 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 states a specific action ('List'), a clear resource ('the authenticated user's test suites'), and precisely defines three distinct modes via suiteId, parentSuiteId, or neither. This strongly distinguishes it from sibling test suite tools like test_suite_create or test_suite_run without needing to inspect their schemas.

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 gives concrete conditions for when to use each parameter: suiteId for a single suite with its items, parentSuiteId for direct children, and omitting both for the full listing. It does not explicitly name alternatives or exclusions relative to sibling tools like testrail_list_suites, but the usage context is clear and actionable.

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

test_suite_runAInspect

Run every test in a suite (and its plans + one level of child suites) SEQUENTIALLY on a device. Returns the run id immediately — the run executes in the background. Poll test_suite_run_status(runId) for progress and the rollup report.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoOptional label for this run
udidYesUDID of the device to run all resolved tests on
suiteIdYesSuite id to execute

TDQS

A4.4/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 that execution is sequential, runs in the background, returns the run id immediately, and that progress/report must be obtained via polling. This is strong behavioral transparency for an asynchronous 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?

Two sentences, front-loaded with purpose and then return behavior. No filler; every clause 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?

Output schema is absent, so the description appropriately explains the immediate return (run id) and the mechanism to get results. It does not cover error cases or cancellation, but for a simple kick-off tool the essentials are present.

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 the baseline is 3. The description adds semantic meaning by clarifying that suiteId encompasses the suite's plans and one level of child suites, going beyond the schema's simple 'Suite id to execute'. This enhances 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 states a specific verb ('Run'), a specific resource ('every test in a suite'), and scoping details (plans + one level of child suites, sequential execution, on a device). It clearly distinguishes this tool from siblings like test_suite_create and test_suite_run_status by defining the run action.

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 explicitly tells the agent to poll test_suite_run_status(runId) for progress, linking to a concrete sibling and next step. It does not explicitly state when not to use this tool, but the background execution and polling guidance provide clear context for when it should be used.

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

test_suite_run_statusAInspect

Poll a suite run. Returns the run aggregate (status, passed/failed test counts) plus a TestRail-style rollup: per-test status + step counts, an overall summary, and component-step attribution (componentAttributionAvailable is false until the M2 attribution column lands).

ParametersJSON Schema
NameRequiredDescriptionDefault
runIdYesRun id returned by test_suite_run

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description must disclose behavioral traits. It mentions the componentAttributionAvailable field is false until M2, which is useful context, but it does not state whether the operation is read-only, non-blocking, or what happens on invalid runId. The 'Poll' verb implies a safe read, but this is not explicit.

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 a single sentence that front-loads the core action ('Poll a suite run') and then lists the return details concisely. It is dense but not bloated, earning a 4 for efficiency.

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's moderate complexity and the absence of an output schema, the description covers the key return fields and even notes the availability caveat for component attribution. However, it omits error handling, retry behavior, or any prerequisites beyond having a runId. This is adequate but not exhaustive.

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?

The single parameter runId is fully described in the schema as 'Run id returned by test_suite_run', and schema coverage is 100%. The description does not add additional semantics beyond what the schema already provides, so a baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool polls a suite run and enumerates the exact return data: run aggregate, per-test status, step counts, overall summary, and component-step attribution. It distinguishes itself from sibling tools like test_suite_run (which starts a run) by focusing on status retrieval.

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 after a run has been initiated (via runId from test_suite_run) but does not explicitly state when to use this tool vs alternatives, nor does it provide any exclusions. It gives no guidance on polling frequency or when to stop polling.

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

tvos_focusAInspect

Apple TV only. Move focus to the element whose label or accessibility identifier matches label, stepping the focus ring until it holds focus, then press Select unless select:false. The TV equivalent of tapping by label — no coordinates, and it reaches an element that is not yet on screen (a coordinate cannot). Read ios_page_source for the label to pass; a home-screen tile carries the app in its label="…". Remote keys (arrows, menu, home, playpause) go through ios_tv_button; type into a focused field with ios_tv_text.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesApple TV UDID or name
labelYesLabel or accessibility identifier of the element to focus
selectNoPress Select once focused (default true); false just moves focus

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full disclosure burden and does so well: it reveals that the tool steps the focus ring until it holds focus, presses Select by default, and can reach elements not on screen. It does not cover failure behavior when the label is not found or whether focus changes are reversible, which keeps it short of a 5. No contradiction with annotations.

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

Conciseness5/5

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

Three dense sentences: scope, mechanism, and cross-tool routing, with no repeated schema text. The most important operational constraint, 'Apple TV only,' is front-loaded, and every clause contributes behavior or routing information. This is appropriately sized, not bloated.

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 tool with no annotations and no output schema, this description gives strong operational context: what it focuses, how it locates elements, how to source labels, and which siblings handle related actions. It is missing explicit failure/timeout behavior and a direct comparison to tvos_select, but overall an agent can invoke it correctly from this text.

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 schema already describes all three parameters. The description adds practical guidance — read ios_page_source for the label, home-screen tiles carry the app in their label, and select:false only moves focus — but this supplements rather than replaces the schema. The extra guidance is useful, but does not raise the score above the baseline.

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 first sentence names a concrete action and resource: move focus to an element matching a label or accessibility identifier on Apple TV, optionally pressing Select. 'The TV equivalent of tapping by label' and 'no coordinates' clearly distinguish it from coordinate-based tap tools, and it explicitly notes it can reach off-screen elements. This is far from a tautology and separates it from generic tvos_select.

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 states the clear context (Apple TV only), instructs the agent to read ios_page_source for the label, and routes remote-key actions to ios_tv_button and text entry to ios_tv_text. What it does not do is explicitly say when to prefer tvos_focus over the sibling tvos_select, or when select:false is the right choice, leaving some selection inference to the agent.

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

tvos_selectAInspect

Apple TV only. Select the element at a screen coordinate: move the focus ring to the smallest focusable element under (x,y) and press the remote Select. Take the coordinate from ios_page_source (its (cx,cy) centre) or the [focused] flag — NOT eyeballed from a screenshot. A point over non-focusable background is an error, not a near miss, so read page source first. Pass select:false to move focus there WITHOUT clicking (e.g. to line up a long-press via ios_tv_button). For selecting by name instead of coordinate, use tvos_focus.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesX in screen points, from ios_page_source
yYesY in screen points, from ios_page_source
udidYesApple TV UDID or name
selectNoPress Select once focused (default true); false just moves focus

TDQS

A4.6/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 burden of behavioral disclosure. It explains the mechanism (move focus ring, press Select), the failure model (error on non-focusable background, not a near miss), and the effect of select:false. It does not mention side effects like whether pressing Select triggers navigation or what happens if multiple elements overlap, but for a focused UI automation tool this is sufficient. Lacks a note on required permissions or if the device must be paired, but that's minor.

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 compact yet dense: three sentences front-load the core action and key constraint, then add usage nuance and an alternative. Every sentence carries information – no filler, no repetition of schema property names. Highly efficient.

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 4-parameter tool with no output schema and no annotations, the description is thorough: it explains how to obtain inputs, what action is taken, the select:false behavior, and the alternative tool. It does not describe the return value or outcome (e.g., success/failure signals), but given simplicity it's nearly complete. Could mention pairing requirements or error codes, but those are arguably covered by the error-near-miss note.

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 description coverage is 100%, so the baseline is 3. The description adds value by explaining how x and y should be derived (from ios_page_source centre) and clarifying the select parameter's default and purpose. It also emphasizes the error condition related to coordinates, which semantically reinforces the schema docs.

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 opens with a clear platform constraint ('Apple TV only') and a specific verb+resource: 'Select the element at a screen coordinate: move the focus ring ... and press the remote Select.' It precisely defines what the tool does, distinguishes it from tvos_focus (selecting by name), and mentions the select:false variant. This is far beyond a tautology.

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?

It gives explicit when-to-use guidance: use coordinates from ios_page_source, never eyeball from screenshots, and states that clicking non-focusable background is an error. It also names the alternative for name-based selection (tvos_focus) and explains when to use select:false for setting up a long-press. This is model guidance.

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

visual_compareAInspect

Compare two screenshots — a baseline/expected capture and a live/current capture of (nominally) the same screen — using a perceptual pixel-diff. Returns the similarity score and changed-pixel count as text, AND returns the baseline, live, and diff images as images you can view directly, so YOU judge whether any flagged difference is a real regression (layout shift, missing/broken element, wrong color/theme, wrong or garbled text, unexpected new content) or just benign noise (dynamic content like timestamps/ads/carousels, anti-aliasing, rendering noise) — this tool does not make that call for you. Provide either two raw base64 images, or a review_id (from list_visual_reviews) to pull a stored baseline instead of re-fetching it.

ParametersJSON Schema
NameRequiredDescriptionDefault
labelNoOptional short label for this comparison (e.g. flow/step name), for log correlation only.
review_idNoInstead of baseline_image_base64, pull the stored baseline image from a pending review (from list_visual_reviews) and compare it against live_image_base64.
live_image_base64YesThe live/current screenshot to compare against the baseline, raw base64 (no "data:" prefix).
baseline_image_base64NoThe baseline/expected screenshot, raw base64 PNG or JPEG (no "data:" prefix). Omit if using review_id instead.

TDQS

A4.9/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 discloses that the tool returns a similarity score and changed-pixel count as text, and also returns baseline, live, and diff images for direct viewing. It explicitly states that the tool does not make the judgment call for the agent, which is a crucial behavioral trait. It also hints at the nature of the comparison (perceptual pixel-diff) and gives examples of benign noise, providing transparency about limitations.

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 long but well-structured and front-loaded. The first sentence states the core purpose and method. It then details the return values and input modes, followed by interpretation guidance. Every sentence contributes value; there is no filler. It is appropriately sized for a tool with multiple input modes and complex output.

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?

The description is complete for an agent to use correctly. It explains the two input modes, the required parameter, the return format (text and images), and how to interpret the results. It references the sibling list_visual_reviews for obtaining a review_id, which is sufficient. No output schema is present, but the description covers return values. There are no obvious gaps in what the agent needs to know.

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 descriptions already cover all parameters (100% coverage), so the baseline is 3. The description adds value beyond the schema by explaining the either/or relationship between baseline_image_base64 and review_id, and by clarifying that images must be raw base64 without a data: prefix. It also notes that review_id pulls a stored baseline, which is not fully clear from the schema alone. This justifies a 4.

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 function: 'Compare two screenshots — a baseline/expected capture and a live/current capture — using a perceptual pixel-diff.' It specifies the verb (compare), the resource (screenshots), and the method (perceptual pixel-diff). It also distinguishes itself from siblings by explaining it returns both a score and images for the agent to judge, and it references list_visual_reviews for an alternative input mode, setting it apart from other visual tools.

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 explicitly states when to use the tool and how to choose between two input modes: 'Provide either two raw base64 images, or a review_id (from list_visual_reviews) to pull a stored baseline instead of re-fetching it.' It also explains the purpose of the returned images and guides the agent on interpreting results (real regression vs benign noise). This is direct usage guidance with clear alternatives.

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

web_backAInspect

Go back one history entry in the DESKTOP grid browser (by pageId). Not a device — for a phone or tablet use webpage_back.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageIdYesPage ID from web_navigate

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral burden. It clearly discloses the action, the platform scope, and the input requirement. It does not describe failure behavior such as what happens when no history exists, but for a simple navigation action the disclosure is sufficient.

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 terse sentences, each earning its place. The core action and platform scope are front-loaded, and the alternative routing is shared in a short second sentence with no redundant filler.

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?

For a single-parameter, simple navigation tool with no output schema, the description is complete. It covers the operation, the platform restriction, the parameter context, and the key alternative tool, leaving no essential calling information missing.

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?

The input schema already fully documents pageId with 100% coverage, including 'Page ID from web_navigate.' The description only mentions 'by pageId' without adding extra meaning, so the schema remains the primary source of parameter semantics.

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?

States a concrete action ('Go back one history entry'), specifies the exact resource ('DESKTOP grid browser'), and the required key ('by pageId'). It also explicitly differentiates itself from webpage_back, so an agent can immediately tell which tool to invoke.

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?

Gives explicit when-to-use context: desktop grid browser use. It also provides a clear exclusion and alternative: 'Not a device — for a phone or tablet use webpage_back.' This directly routes the agent to the correct sibling tool.

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

web_clickAInspect

Click an element by CSS selector in the DESKTOP grid browser (by pageId). NOT a device — to tap something on a real phone or tablet use webpage_click (by udid).

ParametersJSON Schema
NameRequiredDescriptionDefault
pageIdYesPage ID from web_navigate
selectorYesCSS selector of the element to click

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It discloses a key behavioral constraint ('NOT a device' and desktop grid browser), but it does not mention behavior like waiting for the element, navigation side effects, or failure handling. The core action is simple and disclosed, but the description adds only marginal behavioral context beyond the schema, which is already sparse.

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 two sentences with zero wasted words. The first sentence front-loads the action and context; the second sentence gives the crucial negative case and alternative. Perfectly concise for the information conveyed.

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 two-parameter tool with no output schema, the description is nearly complete: it states what the tool does, how to identify the page and element, and when to use a different tool. The only minor gap is the lack of mention about error behavior or waiting, but such details are not critical for a basic click and would be inferred from common browser automation semantics.

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 both parameters are already documented with meaningful descriptions ('Page ID from web_navigate', 'CSS selector of the element to click'). The description repeats the concept of 'by pageId' but adds no extra semantic detail beyond what the schema provides. Baseline 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 states a specific action ('Click'), resource ('element'), method ('by CSS selector'), and context ('in the DESKTOP grid browser (by pageId)'). It also explicitly contrasts itself with webpage_click, making it easy to distinguish from the closest sibling without inspecting schemas.

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 an explicit when-to-use and when-not-to-use: it says this tool is for the desktop grid browser by pageId, and if you need to tap on a real phone/tablet, use webpage_click (by udid). It clearly names the alternative and the condition that selects it.

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

web_closeAInspect

Close the DESKTOP grid browser session (by pageId) and release the grid node. Always call this when done. Not a device — a phone or tablet browser needs no such call, since the webpage_* tools hold no grid node.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageIdYesPage ID from web_navigate

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It discloses that the tool releases the grid node, a resource-specific side effect beyond what the schema shows, and frames the call as mandatory cleanup. It does not mention error behavior or idempotency, but the key behavioral trait (releasing a grid node) is explicit.

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?

Three short sentences, front-loaded with the action and parameter, then usage directive and exclusion. Every sentence earns its place; no filler.

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 single-parameter cleanup tool with no output schema, the description covers what, when, and when-not. It could more explicitly name the web_* family as the desktop grid tools that pageId originates from, but the schema link to web_navigate fills that gap. Complete enough for correct invocation.

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% and the schema already documents pageId as 'Page ID from web_navigate'. The description adds only that the pageId identifies the session being closed, which is marginal reinforcement rather than substantial new meaning. Baseline 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 uses a specific action verb ('Close') with a clearly defined resource ('DESKTOP grid browser session') and identifies the key parameter (pageId). It also distinguishes itself from phone/tablet browsing and webpage_* tools, preventing confusion with sibling tools without needing to open the schema.

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

Usage Guidelines5/5

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

The description explicitly states 'Always call this when done' and explains when NOT to use it: 'Not a device — a phone or tablet browser needs no such call.' This gives a clear imperative, an exclusion condition, and a rationale referencing sibling webpage_* tools.

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

web_console_messagesAInspect

Console output captured from the DESKTOP grid browser page (by pageId) since it opened, including page errors. Buffered from load — nothing is lost by asking late. NOT a device — for a real phone or tablet use android_devtools_console_logs or ios_safari_console_logs (by udid).

ParametersJSON Schema
NameRequiredDescriptionDefault
filterNoCase-insensitive substring filter, e.g. "error"
pageIdYesPage ID from web_navigate

TDQS

A4.4/5.0
Behavior4/5

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

No annotations exist, so the description carries full burden. It discloses buffered behavior from load, that page errors are included, and that late calls still get data. It does not describe output format or side effects, but for a read-only log retrieval this is adequate and there are 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?

Two sentences, each earning its place: the first states the core purpose, the second provides routing and buffering context. No fluff, clearly front-loaded with the primary function.

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?

The description is complete for a two-parameter read tool: it clarifies the browser context (desktop grid), scope (by pageId), content (console output and errors), and buffering behavior. No output schema exists, but the return type is self-evident from 'console output'. Minor gap: it doesn't specify whether logs are cumulative across calls, but this is not critical for invoking the 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?

The schema already fully describes both parameters: pageId as 'Page ID from web_navigate' and filter as 'Case-insensitive substring filter'. The description adds no extra parameter semantics beyond the schema, so the baseline score of 3 applies.

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

Purpose5/5

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

The description states exactly what the tool does: it returns console output captured from the desktop grid browser page by pageId, including page errors. It also differentiates itself from mobile log tools by explicitly saying 'NOT a device' and naming the alternatives, so an agent can select it correctly.

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?

It gives explicit when-to-use guidance: use for desktop grid browser pages, and for real phone/tablet use android_devtools_console_logs or ios_safari_console_logs (by udid). The buffering note ('nothing is lost by asking late') also tells the agent it can call at any point after page load.

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

web_dragAInspect

Drag one element onto another in the DESKTOP grid browser (by pageId) — reorderable lists, kanban columns, file drop targets. NOT a device — there is no webpage_drag; on a real phone or tablet use device_swipe / device_drag_drop (Android) or ios_drag_drop (iOS), by udid.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesCSS selector of the drop target
fromYesCSS selector of the element to drag
pageIdYesPage ID from web_navigate

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It discloses that this is a desktop-browser-only synthetic drag (not a device gesture), gives concrete use cases (reorderable lists, kanban columns, file drop targets), and clarifies the platform limitation. While it doesn't discuss side effects or return behavior, the description provides more behavioral context than the bare schema alone.

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 two tightly packed sentences with no filler. The core purpose is front-loaded, followed by a concise exclusion and routing rule. Every clause adds useful information, and the structure makes it easy to scan quickly.

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 action tool with three required params, no output schema, and full schema coverage, the description is complete: it states what it does, the platform scope, and the correct alternatives. The only minor gap is not defining 'DESKTOP grid browser,' but that appears to be a known product concept, and the pageId reference grounds it in the web automation workflow.

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?

All three parameters (to, from, pageId) are described in the schema, and the schema coverage is 100%, so the description does not need to compensate. The description adds minor context by listing drag use cases that inform what selectors might target, but it does not meaningfully extend the schema's parameter 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?

The description uses a specific verb ('Drag') with a clear resource ('one element onto another') and context ('in the DESKTOP grid browser by pageId'). It also explicitly distinguishes itself from device-level drag tools and notes that no webpage_drag sibling exists, making the tool's unique role unambiguous.

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 explicitly states when NOT to use this tool ('NOT a device') and provides exact alternatives for real devices: device_swipe / device_drag_drop (Android) or ios_drag_drop (iOS), by udid. This is a clear routing rule that leaves no ambiguity about tool selection.

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

web_evaluateAInspect

Run JavaScript in the DESKTOP grid browser page (by pageId) and return the result. Not a device — for a phone or tablet use android_devtools_evaluate or ios_safari_evaluate (by udid).

ParametersJSON Schema
NameRequiredDescriptionDefault
pageIdYesPage ID from web_navigate
scriptYesJavaScript expression to evaluate (e.g. "document.title" or "() => window.location.href")

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations, the description carries full behavioral burden. It clearly states that the tool runs JS and returns a result, which is the core behavioravorites. However, it does not disclose execution context (e.g., page scope, access to DOM), serialization of return values, error or timeout behavior, or whether arbitrary side effects are possible. This leaves some ambiguity for a code-execution 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?

Two sentences, no filler. The first sentence states the operation and target, the second gives the critical exclusion. Information is front-loaded and every word contributes to selecting or invoking the tool correctly.

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?

The schema documents all parameters, but there is no output schema and the description only vaguely says 'return the result.' It does not specify how the result is serialized, whether promises/async are handled, what happens on script errors, or if there are timeouts. For a tool that evaluates arbitrary JS, this return-format ambiguity is a notable gap, though the core call path is clear.

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?

The input schema covers both parameters at 100% with helpful descriptions (e.g., 'Page ID from web_navigate' and the expression examples), so the baseline is 3. The tool description adds little beyond reinforcing that pageId refers to a 'DESKTOP grid browser page' and clarifying the alternative device context, but it does not introduce new parameter-level meaning.

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 says exactly what it does: 'Run JavaScript in the DESKTOP grid browser page (by pageId) and return the result.' The verb 'run JavaScript' and the resource 'DESKTOP grid browser page' are unambiguous, and the explicit contrast with device tools ('Not a device...') distinguishes it from android_devtools_evaluate and ios_safari_evaluate without needing to inspect their schemas.

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 directly tells the agent when not to use this tool: 'for a phone or tablet use android_devtools_evaluate or ios_safari_evaluate (by udid).' This is an explicit alternative-routing instruction that removes inference, satisfying the highest bar for usage guidance.

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

web_fill_formAInspect

Fill several fields at once in the DESKTOP grid browser (by pageId). One call instead of a web_type per field — noticeably faster on a long form, and it reports which field failed. NOT a device — there is no webpage_fill_form; on a real phone or tablet fill fields one at a time with webpage_type (by udid).

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsYesFields to fill, in order
pageIdYesPage ID from web_navigate

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the disclosure burden. It usefully explains batch behavior, performance benefit, and that the tool 'reports which field failed.' It could disclose more about partial-fill behavior or permissions, but the core behavioral traits are covered better than most descriptions.

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?

Three sentences with no filler: purpose first, then benefit and failure reporting, then the key device/desktop distinction. Every sentence earns its place, and the structure is easy to scan.

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 what the tool does, where it applies, when to prefer it, what alternatives exist, and how failures are reported. The only meaningful gap is the inaccurate 'no webpage_fill_form' statement, which could mislead an agent despite an actual sibling tool of that name.

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 baseline is 3. The description adds modest context like 'by pageId' and references to web_type, but the schema already documents pageId as coming from web_navigate and fields as an ordered array of selector/text pairs. It does not materially expand parameter meaning.

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?

Clearly states a specific verb and resource: 'Fill several fields at once in the DESKTOP grid browser (by pageId).' It also distinguishes from web_type. However, it asserts 'there is no webpage_fill_form' while a sibling tool named webpage_fill_form exists in the provided list, so the disambiguation is not fully trustworthy.

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 usage context: use this for desktop grid browsers, avoid for real phones/tablets, and use webpage_type (by udid) instead for mobile. This is strong guidance, but the claim that webpage_fill_form does not exist conflicts with an actual sibling tool, making the when-not guidance partially unreliable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

web_forwardAInspect

Go forward one history entry in the DESKTOP grid browser (by pageId). Not a device — for a phone or tablet use webpage_forward.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageIdYesPage ID from web_navigate

TDQS

A4.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It discloses that it operates on a 'DESKTOP grid browser' and performs a forward navigation, implying a mutating browser state. However, it does not mention what happens if there is no forward entry, or the exact scope of 'grid browser' (e.g., whether it's browser-specific). This is a moderate gap for a tool with no annotations.

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 two sentences, the first clearly states the action and scope, and the second provides an exclusion and alternative. Every word earns its place; no fluff.

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's simplicity (1 param, no output schema) and the clear annotations absent, the description covers the essential purpose and usage. It does not mention edge cases like history exhaustion or error handling, but for a simple navigation action with a single parameter, this is largely sufficient. The only slight gap is not specifying whether it works only in web_navigate contexts or what happens if no forward entry exists.

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% and the only parameter 'pageId' is described in the schema as 'Page ID from web_navigate'. The description references 'pageId' implicitly but does not add major new meaning. However, since there is only one parameter and it is well-documented, the baseline of 3 is raised slightly because the description clarifies the context of the parameter ('for forward navigation in desktop browser'). Overall, it adds minor value 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 states a specific verb and resource: 'Go forward one history entry in the DESKTOP grid browser', and even specifies the parameter (by pageId). It clearly distinguishes from the sibling 'webpage_forward' by noting it is for phone or tablet, making the purpose unambiguous.

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 explicitly says 'Not a device', meaning it should not be used for mobile devices, and directs to 'use webpage_forward' for those. This provides clear when-to-use and when-not-to-use guidance, with an alternative named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

web_get_attributeAInspect

Read one attribute of an element in the DESKTOP grid browser (by pageId) — href, value, aria-label, data-*, anything. Not a device — for a phone or tablet use webpage_get_attribute.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageIdYesPage ID from web_navigate
selectorYesCSS selector of the element
attributeYesAttribute name, e.g. href / value / aria-label

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden. It discloses that the operation is a read, scopes it to a specific desktop grid browser session via pageId, and describes the attribute set as open-ended ('data-*, anything'). It does not describe return values or failure behavior, but for a simple getter the core behavioral disclosure is present.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler; the core operation and environment are front-loaded, and the routing note is placed at the end. Every word earns its place.

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?

The definition covers purpose, environment, parameter meaning, and the main alternative, which is sufficient for a low-complexity getter. The only notable omission is an explicit statement of the return value and behavior when an attribute is absent, though both are largely implied by 'Read one attribute.'

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 three parameters. The description's examples (href, value, aria-label) and 'data-*, anything' add minor color but no essential semantics beyond the schema; baseline 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 opening phrase 'Read one attribute of an element in the DESKTOP grid browser' names a specific verb, resource, and environment, and the examples clarify what counts as an attribute. It also explicitly contrasts itself with webpage_get_attribute, so an agent can distinguish it from siblings without opening schemas.

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 explicitly states the tool is not for a device and directs phone/tablet usage to webpage_get_attribute: 'for a phone or tablet use webpage_get_attribute instead.' This provides a clear when-to-use/when-not-to-use rule.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

web_get_sourceAInspect

Full HTML source of the DESKTOP grid browser page (by pageId). Not a device — for a phone or tablet use webpage_get_dom (by udid).

ParametersJSON Schema
NameRequiredDescriptionDefault
pageIdYesPage ID from web_navigate

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the burden of behavioral disclosure. It accurately implies a read-only operation by describing the return value as 'Full HTML source,' but it does not state side effects, error behavior, or limitations (e.g., page must exist). The added context of 'DESKTOP grid browser page' is useful but not a full behavioral profile.

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 with no filler. The primary purpose is front-loaded, and the mobile-device exclusion is in the second sentence. Every word contributes to routing the agent to the correct usage.

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?

The description plus schema covers everything needed to invoke the tool: what it returns, what the input is and where it comes from, and when to use an alternative. The only minor gap is not describing the format of the returned HTML or potential error conditions, but for a simple read tool with a single parameter this is nearly 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?

The input schema has 100% coverage: pageId is described as 'Page ID from web_navigate.' The description only repeats 'by pageId' without adding extra semantics or format details, so it meets the baseline but does not add value 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 returns the full HTML source of a desktop grid browser page, identified by pageId. It explicitly distinguishes itself from the mobile-oriented webpage_get_dom, making the tool's purpose and scope unambiguous even among a large sibling list.

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 an explicit when-not-to-use directive: 'Not a device — for a phone or tablet use webpage_get_dom (by udid).' This names the alternative and the condition that triggers it, leaving no ambiguity about choosing between the two tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

web_get_textAInspect

Read visible text from the DESKTOP grid browser (by pageId) — one element, or the whole page when no selector is given. This is how you ASSERT on what is actually on screen. Not a device — for a phone or tablet use webpage_get_text (by udid).

ParametersJSON Schema
NameRequiredDescriptionDefault
pageIdYesPage ID from web_navigate
selectorNoCSS selector; omit for the whole page body

TDQS

A4.2/5.0
Behavior3/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 that it reads visible text (not hidden/DOM) and is desktop-only, which is valuable. However, it does not mention return format, error behavior, or whether it waits for page load. For a read-only tool these gaps are moderate, hence a 3.

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 with zero fluff. The core action and scope are front-loaded, and the device exclusion is given immediately after the main purpose. Every word earns its place.

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 low-complexity read tool with fully documented parameters and no output schema, the description covers the essentials: what it does, when to use it, and how it differs from device-specific alternatives. Minor omissions like return format or load-wait behavior are acceptable given the simple nature of the operation.

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% — both pageId and selector are already documented in the schema, including the pageId source and selector omission rule. The description adds minimal new meaning (repeats 'by pageId'), so baseline 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?

Clearly states the verb (read), resource (visible text from the desktop grid browser), and scope (one element or whole page). It explicitly differentiates from webpage_get_text by device type, and frames its primary use case ('ASSERT on what is actually on screen'), making its purpose unambiguous.

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 guidance ('This is how you ASSERT on what is actually on screen') and names the exact alternative for phone/tablet (webpage_get_text) with the parameter that selects it (udid). No confusion about when to choose this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

web_hoverAInspect

Hover an element in the DESKTOP grid browser (by pageId) — the way to open a hover menu or reveal a tooltip before clicking. Not a device — for a phone or tablet use webpage_hover.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageIdYesPage ID from web_navigate
selectorYesCSS selector of the element

TDQS

A4.4/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 behavioral burden. It discloses the intended behavioral effect (revealing hover menus/tooltips) and clarifies that this is a hover action, not a click, by saying 'before clicking.' It does not detail wait behavior or return values, but the disclosed behavior is adequate for this simple 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 compact, front-loaded with the core action, and every sentence earns its place. The usage guidance and alternative are included without unnecessary verbiage or repetition of schema details.

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 two-parameter hover tool with no output schema, the description covers the action, the context, the purpose, and the key alternative. It does not mention visibility requirements, wait behavior, or error cases, but these are less critical for a straightforward hover action and the description is otherwise complete enough to invoke correctly.

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?

The input schema already documents pageId as 'Page ID from web_navigate' and selector as 'CSS selector of the element,' with 100% schema description coverage. The description adds little beyond the schema, only reinforcing the desktop browser context. The baseline 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 a specific action ('hover an element'), a specific context ('DESKTOP grid browser'), and an identifier ('by pageId'). It also distinguishes itself from the sibling tool webpage_hover, making it immediately clear what this tool is for.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly explains when to use this tool: to open a hover menu or reveal a tooltip before clicking. It also provides a direct alternative and exclusion condition: for a phone or tablet, use webpage_hover instead. This gives the agent clear selection criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

web_navigateAInspect

DESKTOP browser on the testing grid — NOT a phone or tablet. Opens a page and navigates to a URL, returning a pageId that every other web_* tool takes. To drive the browser ON A REAL DEVICE instead, use the webpage_* tools, which take a udid.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesURL to navigate to
browserNoBrowser to use: chrome | firefox | safari (default: chrome)

TDQS

A4.5/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 behavioral burden. It discloses the desktop grid environment, the navigation action, and the pageId return contract. It does not discuss side effects beyond navigation, but for this tool the core behavior is stated clearly enough.

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?

Three sentences with no filler. The critical differentiator (desktop, not phone/tablet) is front-loaded, and the return contract and alternative tool path are stated efficiently.

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?

The tool is simple, both parameters are fully documented in the schema, and the description covers the output contract and the main alternative. Nothing essential is missing for correct invocation.

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 already documents url and browser fully. The description adds no new parameter-level meaning beyond mentioning URL navigation, making the baseline 3 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?

Clearly identifies the action (navigates to a URL), the target context (DESKTOP browser on the testing grid, not a phone/tablet), and the key output (pageId consumed by other web_* tools). It also distinguishes itself from webpage_* tools, so an agent can pick it correctly among many siblings.

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 directs agents to use webpage_* tools when driving a browser on a real device, including the udid requirement. It also positions web_navigate as the entry point for the web_* family by noting that every other web_* tool takes the returned pageId.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

web_network_requestsAInspect

Network requests made by the DESKTOP grid browser page (by pageId) since it opened, with status codes. Buffered from load. Use filter to narrow to an API path. NOT a device — for a real phone or tablet use android_devtools_capture_network or ios_safari_capture_network (by udid).

ParametersJSON Schema
NameRequiredDescriptionDefault
filterNoCase-insensitive substring match on the URL
pageIdYesPage ID from web_navigate
failedOnlyNoOnly show responses with status >= 400

TDQS

A4.4/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 that requests are buffered from load, which is a meaningful behavioral trait (data availability depends on page open time). It also clarifies the scope is the DESKTOP grid browser page, not a device. It doesn't mention whether the buffer is cleared on refresh or how long it persists, but the key behavioral constraints are disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each earning its place: what it does, how to filter, and what it is not. The critical scoping constraint (DESKTOP grid browser page, not a device) is front-loaded. No wasted 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?

For a read-only network log tool with a complete schema, the description covers the essential context: scope, buffering behavior, and sibling alternatives. It doesn't describe the output format, but there is no output schema and the description mentions status codes, which gives a reasonable expectation. The main gap is not stating whether the buffer is per-page or per-session, but this is minor given the explicit 'since it opened' phrasing.

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 already documents all three parameters. The description adds a usage hint for `filter` (narrow to an API path) and implies `pageId` comes from web_navigate, which is already in the schema. The description doesn't add much beyond the schema, but the schema is complete, so baseline 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 states a specific verb and resource: network requests made by the DESKTOP grid browser page (by pageId) since it opened, with status codes. It also explicitly distinguishes itself from device-level network capture tools by saying 'NOT a device' and naming the alternatives. This clearly differentiates it from siblings like android_devtools_capture_network and ios_safari_capture_network.

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 explicitly says when to use this tool (for the DESKTOP grid browser page by pageId) and when not to use it ('NOT a device'), and names the alternatives for real phone or tablet (android_devtools_capture_network or ios_safari_capture_network by udid). It also gives a usage hint: 'Use `filter` to narrow to an API path.' This is explicit routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

webpage_backAInspect

Navigate the device browser back one entry in its session history (history.back()) — works on BOTH iOS Safari and Android Chrome.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice UDID / serial (iOS or Android)
pageIdNoTarget page/tab id — auto-picked when omitted
socketNoAndroid only: abstract unix socket name (default: chrome_devtools_remote)
platformVersionNoIgnored (kept for compatibility)

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It discloses the behavior (history.back()) and cross-platform support, but does not mention edge cases like what happens if there is no history entry, whether it waits for navigation to complete, or whether it affects pageId/tab state. The mention of history.back() is a useful implementation detail.

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, focused sentence that front-loads the core action and platform support. 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?

For a simple navigation action with a clear schema, the description is mostly complete. However, it lacks guidance on edge cases (e.g., no history, pageId behavior) and does not explain the relationship to similar sibling tools. Given the large sibling list, a bit more context 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 description coverage is 100%, so the schema already documents all four parameters. The description adds no parameter-specific meaning beyond the schema, but the schema itself is clear. Baseline 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 action (navigate back one entry in session history), the mechanism (history.back()), and the platform scope (iOS Safari and Android Chrome). This distinguishes it from siblings like webpage_forward, web_back, and session_back by specifying the device browser context.

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 device browser navigation but does not explicitly state when to prefer this over alternatives like web_back, session_back, or playwright_back. It mentions cross-platform support, which helps, but lacks explicit when-to-use or when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

webpage_cdp_commandAInspect

Send a raw DevTools-protocol command to the browser page on a device and return its reply — the escape hatch for capabilities no dedicated tool wraps yet (Emulation, Performance, CSS, Animation, DOM mutation, …). Works on BOTH iOS Safari and Android Chrome, auto-detected from the udid. method is "Domain.command" (e.g. "Emulation.setGeolocationOverride"); params is that command's parameter object. Scope is the BROWSER — this reaches web content only, never the device or native apps. Prefer a dedicated tool when one exists: they handle setup ordering, lifecycle and teardown that a bare command does not. IMPORTANT, iOS: the two engines do NOT implement the same protocol — Android is full CDP, iOS is WebKit's dialect. Chrome-only domains fail with -32601 "domain was not found" (Accessibility, Emulation, and Page.captureScreenshot are all absent on iOS), and a *.enable on iOS reports success without proving the domain exists, so never treat it as a capability probe — probe with a real method.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice UDID / serial (iOS or Android)
methodYesProtocol method as "Domain.command", e.g. "Emulation.setDeviceMetricsOverride"
pageIdNoTarget page/tab id — auto-picked when omitted
paramsNoThe command's parameter object; omit for commands that take none
socketNoAndroid only: abstract unix socket name (default: chrome_devtools_remote)

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 the full burden of behavioral disclosure, and it delivers richly. It discloses cross-platform behavioral differences (Android full CDP vs iOS WebKit dialect), the failure mode for Chrome-only domains on iOS (-32601), and the subtle trap that `*.enable` on iOS reports success without proving domain existence. It also states the scope boundary (browser only, not device/native apps). This goes far beyond what any annotation would typically provide.

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 dense but well-organized: it opens with the core action, then scope, then usage guidance, then a clearly flagged iOS-specific warning. Every sentence carries substantive information. It is longer than average, but the length is justified by the genuinely complex cross-platform behavior that agents must know. The only slight deduction is that the iOS warning could be tightened, but the structure (with 'IMPORTANT, iOS:' as a clear signal) is effective.

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?

For a raw-protocol escape-hatch tool with no output schema and no annotations, the description is remarkably complete. It covers what the tool does, when to use it, the scope boundary, platform differences, failure modes, and parameter semantics. The only thing not detailed is the exact reply format, but for a raw CDP command that is inherently dynamic and would be impossible to fully specify. The description gives an agent everything needed to invoke it correctly and avoid the documented pitfalls.

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 description coverage is 100%, so the baseline is 3. The description adds meaningful semantics beyond the schema: it explains the `method` format with a concrete example ('Emulation.setGeolocationOverride'), clarifies that `params` is the command's parameter object, and notes that `params` can be omitted for commands that take none. It also explains the `udid` auto-detection of iOS vs Android. The only minor gap is that `pageId` and `socket` are not elaborated in the description, but the schema already covers them and the description's focus on the two most important parameters is reasonable.

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 states a specific verb ('Send a raw DevTools-protocol command'), a precise resource ('browser page on a device'), and the return behavior ('return its reply'). It explicitly frames itself as the escape hatch for capabilities no dedicated tool wraps, which distinguishes it from the many sibling tools that wrap specific DevTools features (e.g., android_devtools_evaluate, ios_safari_evaluate, webpage_screenshot). The scope boundary ('reaches web content only, never the device or native apps') further sharpens the purpose.

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 gives explicit when-to-use guidance: use it when no dedicated tool exists, and explicitly says 'Prefer a dedicated tool when one exists' with the reason (dedicated tools handle setup ordering, lifecycle, teardown). It also provides platform-specific usage warnings (iOS vs Android protocol differences) and a concrete error signature (-32601) to help agents recognize failure modes. This is exemplary routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

webpage_clear_browsing_dataAInspect

Clear cookies, localStorage, sessionStorage and/or the Cache Storage API for the page in the device browser (iOS Safari or Android Chrome, auto-detected). USE THIS to get a genuinely clean session between test cases: webpage_reload deliberately PRESERVES localStorage, so a reload keeps you logged in and carries app state into the next case. Every scope is VERIFIED by re-reading it afterwards and the result reports before/after counts, so a scope that could not be cleared says so instead of being assumed. On iOS cookies are removed one at a time through the Web Inspector (Page.deleteCookie), which reaches HttpOnly cookies that document.cookie cannot; on Android Network.clearBrowserCookies clears them in one call. HTTP cache: Android clears it via Network.clearBrowserCache (the browser reports no count, so it is returned as issued rather than verified); iOS has no Web Inspector equivalent, so only the Cache Storage API is cleared there and the HTTP cache is reported unsupported rather than silently skipped. DOES NOT LOG YOU OUT OF HTTP BASIC AUTH. Those credentials live in the browser credential store, which is none of these scopes — verified on qa.tms-hmpu.com, where an authenticated session shows 0 cookies, 0 localStorage and 0 sessionStorage. To force a Basic-auth challenge again, terminate the browser (ios_terminate_app com.apple.mobilesafari) and navigate afresh.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice UDID / serial (iOS or Android)
pageIdNoTarget page/tab id — auto-picked when omitted
scopesNoWhat to clear (default: ["all"]). "all" = every scope this platform supports.
socketNoAndroid only: abstract unix socket name (default: chrome_devtools_remote)

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 the full behavioral burden and does so thoroughly. It discloses verification by re-reading scopes, before/after count reporting, platform-specific cookie-removal mechanisms, HTTP cache limitations on iOS, and the fact that Basic-auth credentials are not cleared.

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 long, but front-loaded with the core purpose and use case, and nearly every sentence carries operational value. A small amount of trimming is possible, such as the specific QA environment verification detail, but overall the density is justified by the tool's platform-specific 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?

For a tool with no annotations and no output schema, the description is remarkably complete. It covers platform differences, verification behavior, limitations, Basic-auth caveats, and a remediation path, so an agent has everything needed to invoke it correctly and interpret its results.

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 the baseline is 3, but the description adds real parameter-level meaning: it explains the 'cache' scope is handled differently per platform, that unsupported scopes are reported rather than silently skipped, and clarifies the scope of 'all'. This goes beyond the enum definitions in 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?

States a specific verb and resource: clear cookies, localStorage, sessionStorage, and/or Cache Storage API for a page in the device browser. It also distinguishes itself from webpage_reload by explicitly noting that reload preserves localStorage, making the purpose and scope unmistakable.

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 says 'USE THIS to get a genuinely clean session between test cases' and contrasts it with webpage_reload's localStorage-preserving behavior. It also gives a concrete follow-up action for Basic-auth cases, so an agent knows when to choose this tool and what to do instead when it is insufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

webpage_clear_cookiesAInspect

Expire all NON-HttpOnly cookies visible to the current page origin in the device browser (iOS Safari or Android Chrome, auto-detected), via document.cookie. PREFER webpage_clear_browsing_data: it reaches HttpOnly cookies (which this cannot — and a session cookie is usually exactly the HttpOnly one you wanted gone), verifies the result by re-reading the cookie jar, and can clear localStorage/sessionStorage/caches in the same call. This tool remains for callers that specifically want the document.cookie behaviour. Returns { cleared } — the count of cookies expired, NOT verified afterwards.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice UDID / serial (iOS or Android)
pageIdNoTarget page/tab id — auto-picked when omitted
socketNoAndroid only: abstract unix socket name (default: chrome_devtools_remote)
platformVersionNoIgnored (kept for compatibility)

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations present, the description carries the full burden. It discloses key limitations: only non-HttpOnly cookies, only those visible to the current page origin, and that the result is 'NOT verified afterwards.' It also mentions it cannot touch HttpOnly cookies, which is exactly the kind of behavioral nuance an agent needs.

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 dense but front-loaded: it states the core action and scope first, then the crucial preference/alternative, then the return value. Every sentence earns its place; there is no fluff or repetition of schema content.

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?

For a tool with no output schema, the description covers the essential return shape, platform support, scope limits, and the reason to prefer a sibling. It also notes the verification gap, which is critical for correct use. Nothing an agent needs to call it correctly is missing.

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%, and every parameter (udid, pageId, socket, platformVersion) is already documented in the schema, including the fact that platformVersion is ignored. The description adds no parameter-level detail, so the baseline 3 applies.

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 opens with a specific verb and resource: 'Expire all NON-HttpOnly cookies visible to the current page origin' and adds the mechanism 'via document.cookie' plus platform scope. It explicitly distinguishes itself from webpage_clear_browsing_data by name, so an agent can tell them apart immediately.

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?

It gives an unambiguous when-to-use and when-not-to-use directive: 'PREFER webpage_clear_browsing_data' and explains why (reaches HttpOnly cookies, verifies result, clears other storage). It also clarifies this tool is for callers that specifically want document.cookie behavior, leaving no ambiguity about the intended context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

webpage_clickAInspect

Click an element in the device browser, by CSS selector or by a ref from a page-elements listing — works on BOTH iOS Safari and Android Chrome, auto-detected from the udid. Scrolls the element into view, waits for it to stop moving, and checks it is actually clickable — visible, non-zero-size, enabled, and not covered by anything — retrying until timeoutMs before it gives up. Then taps its center. On iOS the DEVICE taps its own screen at that position, so the page receives a real, fully trusted touch — pointerdown, touchstart, mousedown and click, exactly as from a finger — which also satisfies sites that gate on trusted input. On Android the tap is delivered as a TOUCH through the browser, so elements listening for pointer events respond as well as those listening for click. Falls back to mouse events, then a plain .click(), if a step is unsupported, and the response reports which was used via via. ERRORS rather than reporting success when the element never becomes clickable; pass force:true to skip the checks and dispatch at its coordinates anyway — which works for anything that still occupies a box, but NOT for a display:none or zero-size element, where there is no point to aim at and force fails too. When a selector matches several elements the first VISIBLE one wins, not the first in document order. This is COORDINATE-based. Android events are synthesized by the browser (isTrusted:false); iOS taps are real device input (isTrusted:true) whenever via comes back as "nativeTap".

ParametersJSON Schema
NameRequiredDescriptionDefault
refNoElement ref from a page-elements listing, e.g. "e12". Provide this or `selector`. A ref points straight at the element it was issued for, so it survives markup that shifted position, and it can address elements no CSS selector can reach from the top of the page.
udidYesDevice UDID / serial (iOS or Android)
forceNoSkip the clickability checks and dispatch at the element center regardless (default: false). Use only when the checks are wrong about a target you know is clickable — it restores the old behaviour, where a click on a hidden or covered element reports success without doing anything. Needs a center to aim at, so it still fails on a display:none or zero-size element; it does apply to visibility:hidden, opacity:0, pointer-events:none, disabled, off-viewport, and covered targets.
pageIdNoTarget page/tab id — auto-picked when omitted
socketNoAndroid only: abstract unix socket name (default: chrome_devtools_remote)
selectorNoCSS selector for the target element. Provide this or `ref`.
snapshotNoAppend a webpage_snapshot of the resulting page (actionable elements only) so you can see what the click changed without a second call (default: false)
timeoutMsNoHow long to keep retrying while the element is not yet clickable (default: 5000, max: 30000)
pointerTypeNoHow the tap is delivered. You rarely need this — the default is the best path each platform has (a real device tap on iOS, a browser touch on Android). "touch" is what a finger produces and drives elements that listen for pointer events, which many component libraries bind. On Android a touch also produces mousedown/mouseup unless a handler cancels pointerdown or touchstart — and when one does, click is suppressed too, which is when "mouse" is the way through. "mouse" sends mouse events only, and on iOS it opts OUT of the device tap in favour of the browser-level path, which delivers only mouseup+click and is not trusted. The response reports which was used via `via`.
platformVersionNoIgnored (kept for compatibility)

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and excels: it discloses the scroll-into-view, wait-for-stable, clickability checks, retry logic, platform-specific delivery (nativeTap on iOS vs synthesized touch on Android), fallback to mouse/.click(), error behavior, force semantics with edge cases, and first-visible-element selection. No contradictions exist with annotations (none present).

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 a dense paragraph with high information density, but it is not concise; it is a wall of text that could benefit from bullet points or more structured breakdown. The main purpose is front-loaded in the first sentence, but the lengthy technical details on iOS/Android differences and fallbacks make it less scannable. Every sentence adds value, but the overall length impacts readability.

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 tool of this complexity (10 params, no output schema), the description covers most needed context: platform behavior, error cases, targeting, and the `via` field in the response. It lacks explicit detail on the full response structure (e.g., success status, snapshot output) but hints at it. The description is robust given the tool's complexity, though a brief note on the response format would make it complete.

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 substantial meaning beyond the schema: it explains when to prefer ref over selector (survives layout shifts, addresses unreachable elements), nuances of force:true (what it still fails on), pointerType behavior (touch vs mouse, trust implications), and timeoutMs semantics. This goes well beyond the baseline 3 for high 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 states a precise action (click an element in the device browser) with clear targeting methods (CSS selector or ref) and explicitly scopes to both iOS Safari and Android Chrome. It distinguishes itself from siblings like device_tap or web_click by specifying 'device browser' and auto-detection from udid, making it unambiguous what resource it operates on.

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 context on when to use the tool: for browser elements on mobile, with real device taps on iOS and browser touch on Android. It explains the coordinate-based nature and the force:true option for skipping checks. However, it does not explicitly name alternative tools (e.g., device_tap for native taps) or state when not to use it, so the guidance is clear but not explicit on exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

webpage_fill_formAInspect

Fill SEVERAL fields of a form in one call on the device browser — the batch form of webpage_type, and the counterpart to Playwright MCP's browser_fill_form. Works on BOTH iOS Safari and Android Chrome. Fields are filled IN ORDER inside a single browser session, which is what makes this different from calling webpage_type N times: order-dependent forms (a country select that repopulates the state list, an autocomplete that rewrites the next field) behave the way they do for a real person, and you pay one round trip instead of N. Each field takes the same target shape as webpage_type — a CSS selector or a ref from webpage_snapshot — plus text, and an optional per-field clear. On iOS each field is typed on the DEVICE keyboard so the page receives real trusted keystrokes; where that is unavailable it falls back to setting .value via the native setter and dispatching bubbling input/change (isTrusted:false), reporting via and fallbackReason PER FIELD so a degraded field is never hidden by its neighbours succeeding. exact:false on a field means the keystrokes landed but the component rewrote the value as you typed (masks, autocompletes) — that is a success, not a failure. Stops at the first failure by default, because a form is usually order-dependent and filling past a field that did not take produces a state no one asked for; pass continueOnError:true to attempt every field anyway, which is what you want when diagnosing WHICH selectors are stale. This does NOT submit the form — follow it with webpage_press_key("Enter") or webpage_click on the submit control. ONE CROSS-PLATFORM TRAP, measured on device: change fires differently. Android dispatches change on every field. iOS fires it only on a real BLUR, and the LAST field still holds focus when this returns — so its change has NOT fired, and a form that validates on change will not have seen the final field. Follow with webpage_press_key("Tab") or a click elsewhere if that matters. Also on iOS, a field filled with clear:true emits one isTrusted:false input carrying the empty value (the wipe) before the trusted keystrokes.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice UDID / serial (iOS or Android)
clearNoDefault for every field that does not set its own `clear` (default: false)
fieldsYesFields to fill, in the order they should be filled
pageIdNoTarget page/tab id — auto-picked when omitted
socketNoAndroid only: abstract unix socket name (default: chrome_devtools_remote)
requireNoSet to "native" to fail a field loudly when the device keyboard is unavailable, instead of silently setting .value (isTrusted:false). iOS only.
continueOnErrorNoAttempt every field even after one fails, instead of stopping at the first failure. Use it to find out which selectors are stale in one round trip; leave it off for order-dependent forms.
platformVersionNoIgnored (kept for compatibility)

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 the full behavioral burden and does so thoroughly. It discloses the trusted-keystroke behavior on iOS, the fallback to setting .value with isTrusted:false, per-field via/fallbackReason reporting, exact:false semantics, failure-stop default, and important iOS/Android change-event differences. This gives an agent an unusually complete picture of what will happen.

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 long but well structured and front-loaded with the core purpose before diving into caveats. Every paragraph adds information needed for correct use, though a few explanatory asides could be tightened without losing value.

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, eight parameters, no annotations, and no output schema, the description is remarkably complete. It covers core behavior, failure handling, platform-specific caveats, fallback behavior, and follow-up actions, leaving little for an agent to have to guess.

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 the baseline is 3, but the description adds meaningful semantics: it explains that each field uses the same target shape as webpage_type, that the top-level clear acts as the default for per-field clear, and that exact:false means success rather than failure. This goes beyond the schema and makes parameter intent clearer.

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 fills several form fields in one call on the device browser, and explicitly positions it as the batch form of webpage_type and the counterpart to Playwright MCP's browser_fill_form. It names the specific resource (form fields on iOS Safari and Android Chrome) and distinguishes it from calling webpage_type multiple times.

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 explicitly explains when this tool is appropriate: when filling several fields in order within one browser session, especially for order-dependent forms or to save round trips. It also gives concrete follow-up guidance (do not submit the form; use webpage_press_key or webpage_click) and tells when to use continueOnError:true for diagnosing stale selectors.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

webpage_forwardAInspect

Navigate the device browser forward one entry in its session history (history.forward()) — works on BOTH iOS Safari and Android Chrome.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice UDID / serial (iOS or Android)
pageIdNoTarget page/tab id — auto-picked when omitted
socketNoAndroid only: abstract unix socket name (default: chrome_devtools_remote)
platformVersionNoIgnored (kept for compatibility)

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral burden. It clearly states the underlying action (history.forward()) and its effect, but it does not mention what happens when there is no forward history, whether a loaded page is required, or whether the call returns a result. These are notable gaps for an unannotated 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?

The description is a single well-structured sentence that states the operation, the underlying API, and the platform support with no filler. The most important scoping detail, 'device browser', is front-loaded.

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 low-complexity navigation action, the description plus the fully documented schema is sufficient to invoke the tool. It covers what the tool does and on which platforms. Minor omissions like output behavior and no-op semantics keep it from being fully 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 description coverage is 100%, so the schema already documents all four parameters. The description adds no parameter-specific meaning beyond the 'device browser' context, which matches the baseline of 3 for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'Navigate the device browser forward one entry in its session history (history.forward())'. It also names the exact supported environments, iOS Safari and Android Chrome, which separates it from desktop-oriented navigation tools like web_forward or playwright_forward.

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 the tool is for device-based browser sessions by saying 'device browser' and 'works on BOTH iOS Safari and Android Chrome.' However, it never explicitly says when to prefer this over siblings like web_forward, playwright_forward, or webpage_back, so the usage context is inferred rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

webpage_get_attributeAInspect

Get one attribute (e.g. href, value, aria-label, data-*) of an element in the device browser page, by CSS selector or by a ref from a page-elements listing (iOS Safari or Android Chrome, auto-detected). value is null when the element exists but the attribute is absent. Throws only when the target itself does not resolve.

ParametersJSON Schema
NameRequiredDescriptionDefault
refNoElement ref from a page-elements listing, e.g. "e12". Provide this or `selector`. A ref points straight at the element it was issued for, so it survives markup that shifted position, and it can address elements no CSS selector can reach from the top of the page.
nameYesAttribute name to read, e.g. "href", "value", "aria-label"
udidYesDevice UDID / serial (iOS or Android)
pageIdNoTarget page/tab id — auto-picked when omitted
socketNoAndroid only: abstract unix socket name (default: chrome_devtools_remote)
selectorNoCSS selector for the target element. Provide this or `ref`.
platformVersionNoIgnored (kept for compatibility)

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral burden. It discloses the null-return case when the attribute is absent, states it throws only when the target does not resolve, and explains the auto-detection of iOS/Android. This covers the key behavioral aspects an agent needs, including error conditions.

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?

Three concise, front-loaded sentences with zero waste. The purpose is stated first, followed by edge-case behavior and the only error condition. Every sentence earns its place.

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 tool with 7 parameters and no output schema, the description covers the essential behaviors: targeting methods, auto-detection, null handling, and error semantics. It does not explicitly state the return type (implied as string), but that is minor given the clear examples. It is complete enough for correct invocation.

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 the baseline is 3. The description adds valuable context for the two main parameters (ref and selector) by explaining the trade-offs: ref survives markup shifts and can reach elements no CSS selector can. It also clarifies the return null behavior, which is not in the schema. This goes beyond the baseline.

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 states a specific verb ('Get'), a resource ('one attribute'), and the scope ('device browser page'), with concrete examples (href, value, aria-label, data-*). It clearly distinguishes from siblings like web_get_attribute and playwright_get_attribute by specifying the mobile device context and auto-detection of iOS Safari/Android Chrome.

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 clearly explains the two targeting methods (CSS selector or ref) and the auto-detection behavior, giving clear context on when to use it. However, it does not explicitly mention alternatives or exclusions (e.g., 'use web_get_attribute for desktop browsers'), so it falls short of a 5 but is still well-defined.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

webpage_get_domAInspect

Get the rendered outer HTML of the web page open in the device browser — works on BOTH iOS (Safari, via the Web Inspector) and Android (Chrome, via CDP); the platform is auto-detected from the udid. Returns document.documentElement.outerHTML, or the outerHTML of a CSS-selector-matched element when selector is given. On iOS, Safari is launched automatically if it is not already open. Output is capped at 100 000 characters with a truncation notice. This is web-page HTML — for a NATIVE app UI hierarchy use device_page_source (Android) or ios_page_source (iOS).

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice UDID / serial (iOS or Android)
pageIdNoTarget page/tab id — auto-picked when omitted (iOS: appIdKey.pageIdKey; Android: CDP target id)
socketNoAndroid only: abstract unix socket name (default: chrome_devtools_remote)
selectorNoOptional CSS selector — returns outerHTML of the first matching element, or null
platformVersionNoiOS only: platform version for the remote debugger (default: 17.0)

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral disclosure burden. It transparently covers cross-platform operation, automatic Safari launch, the exact return value (document.documentElement.outerHTML or selector-matched element), and the 100,000-character truncation notice. It omits the null return for an unmatched selector, but the schema already documents that.

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?

Four dense, purposeful sentences with no filler. The core action and platform scope are front-loaded, followed by return semantics, side effects/limits, then sibling-tool routing. 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?

For a read-only introspection tool with no annotations and no output schema, the description is unusually complete: it covers purpose, platform support, return format, selector behavior, output truncation, a side effect on iOS, and the correct alternative tools for native hierarchies. Nothing critical is missing for correct invocation.

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 baseline is 3. The description adds useful context for udid (platform auto-detection) and selector (returns outerHTML of the first match), but mostly restates what the schema already says. Parameters like socket and platformVersion are left entirely to 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?

States a clear, specific action and resource: 'Get the rendered outer HTML of the web page open in the device browser.' It distinguishes itself from native-app hierarchy tools and platform-specific DOM tools by naming the Web Inspector/CDP mechanisms and explicitly contrasting with device_page_source/ios_page_source.

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 routing guidance: use this for web-page HTML in a device browser, and use device_page_source or ios_page_source for native UI hierarchy. It does not explicitly name android_devtools_get_dom or ios_safari_get_dom as alternatives, but the platform auto-detection note and native-app exclusions make the intended use clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

webpage_get_textAInspect

Get the visible text (innerText, trimmed) of an element in the device browser page, by CSS selector or by a ref from a page-elements listing (iOS Safari or Android Chrome, auto-detected). For reading a label/status/result after an action. Throws if the target does not resolve. For full HTML use webpage_get_dom; for many elements at once use webpage_snapshot, or ios_safari_elements / android_devtools_elements.

ParametersJSON Schema
NameRequiredDescriptionDefault
refNoElement ref from a page-elements listing, e.g. "e12". Provide this or `selector`. A ref points straight at the element it was issued for, so it survives markup that shifted position, and it can address elements no CSS selector can reach from the top of the page.
udidYesDevice UDID / serial (iOS or Android)
pageIdNoTarget page/tab id — auto-picked when omitted
socketNoAndroid only: abstract unix socket name (default: chrome_devtools_remote)
selectorNoCSS selector for the target element. Provide this or `ref`.
platformVersionNoIgnored (kept for compatibility)

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the burden of behavioral disclosure. It discloses the error condition ('Throws if the target does not resolve'), clarifies the output is 'trimmed' text, and states auto-detection of platform. However, it does not explicitly mention that the operation is read-only or whether it waits for the element to appear, but for a 'Get' operation these are largely implied. This is adequate but not exhaustive.

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 four sentences, each contributing necessary information: the core function, a typical use case, an error behavior, and alternative tools. It is front-loaded with the primary action and avoids redundancy. 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?

For a relatively simple read operation with a single required parameter (udid) and auto-picked pageId, the description covers the essential aspects: what it returns (visible text), how to target the element (selector or ref), platform support, error behavior, and alternatives. The lack of an output schema is acceptable because the description implies the return is the text itself, and no additional state changes or pagination are expected.

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 description coverage is 100%, so the baseline is 3. The description adds extra meaning beyond the schema by explaining the advantage of using `ref`: 'A ref points straight at the element it was issued for, so it survives markup that shifted position, and it can address elements no CSS selector can reach from the top of the page.' This adds semantic value beyond the simple schema text.

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 states a specific verb and resource: 'Get the visible text (innerText, trimmed) of an element in the device browser page'. It distinguishes itself from siblings by explicitly naming alternatives: 'For full HTML use webpage_get_dom; for many elements at once use webpage_snapshot, or ios_safari_elements / android_devtools_elements.' The platform scope ('iOS Safari or Android Chrome, auto-detected') further clarifies the intent.

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?

It provides explicit usage context: 'For reading a label/status/result after an action' and clear exclusions/alternatives: 'For full HTML use webpage_get_dom; for many elements at once use webpage_snapshot, or ios_safari_elements / android_devtools_elements.' This leaves no ambiguity about when to select this tool over siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

webpage_hoverAInspect

Hover the pointer over an element in the device browser page, by CSS selector or by a ref from a page-elements listing (iOS Safari or Android Chrome, auto-detected). Scrolls it into view and dispatches a mouseMoved to its center — use it to reveal hover menus/tooltips before webpage_click. On iOS the event is isTrusted:false. Throws if the target does not resolve.

ParametersJSON Schema
NameRequiredDescriptionDefault
refNoElement ref from a page-elements listing, e.g. "e12". Provide this or `selector`. A ref points straight at the element it was issued for, so it survives markup that shifted position, and it can address elements no CSS selector can reach from the top of the page.
udidYesDevice UDID / serial (iOS or Android)
pageIdNoTarget page/tab id — auto-picked when omitted
socketNoAndroid only: abstract unix socket name (default: chrome_devtools_remote)
selectorNoCSS selector for the target element. Provide this or `ref`.
platformVersionNoIgnored (kept for compatibility)

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does an excellent job: it discloses that the tool scrolls the element into view, dispatches a mouseMoved event to the center, notes that the event is isTrusted:false on iOS, and states that it throws if the target does not resolve. This goes well beyond the schema.

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?

Three short sentences pack in purpose, targeting methods, behavioral side effects, platform caveats, and error behavior with no filler. The key 'how to use' information is front-loaded, and 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?

For a tool with 6 parameters, no output schema, and no annotations, the description combined with the rich per-parameter schema gives an agent everything needed to invoke it correctly: target selection, platform detection, event behavior, error behavior, and relationship to webpage_click.

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 already fully documents all six parameters. The description adds no new parameter-level meaning beyond restating that either selector or ref can be used; it is consistent with the schema but does not compensate for or add to 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 states a specific action ('hover the pointer'), a specific resource ('element in the device browser page'), and the supported platforms (iOS Safari or Android Chrome). It is clearly distinguished from sibling tools like web_hover or playwright_hover by the 'device browser page' scope and by positioning itself as a precursor to webpage_click.

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 explicitly tells the agent when to use the tool: 'use it to reveal hover menus/tooltips before webpage_click'. It also explains the two targeting methods (CSS selector or ref). It does not explicitly state when not to use it or name a hover alternative, so it falls just short of full exclusion guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

webpage_mock_addAInspect

Add (or update in place, when id matches an existing route) a mock/abort rule for browser requests on this device. mode "mock" (default) serves the given status/headers/body without the request leaving the device; mode "abort" fails it so the page sees a network error. Routes apply immediately and survive navigation. WEB CONTENT ONLY: this intercepts requests made by browser/WebView pages. Requests made by native app code are NOT intercepted and never will be by this tool. Nothing device-wide is changed and no certificate is installed — the effect is scoped to the page. For requests made by native app code use android_traffic_mock_add / ios_traffic_mock_add instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoRoute id to update in place; omit to auto-generate a new one
bodyNoResponse body for mode "mock" (text, or base64 when bodyEncoding is "base64")
modeNo"mock" serves a canned response (default); "abort" fails the request
udidYesDevice id (Android serial or iOS UDID)
methodNoOptional HTTP method filter (e.g. "GET"/"POST"); matches any method when omitted
pageIdNoPin routing to a specific page id (from the *_list_pages tool). Omit to follow the active page automatically across navigations and new tabs — recommended.
socketNoAbstract unix socket name (default: chrome_devtools_remote)
statusNoHTTP status to serve for mode "mock" (default 200)
delayMsNoLatency injected before responding/failing, in ms (clamped to 60s)
enabledNoWhether the route is active (default true) — disabled routes are kept but ignored
headersNoResponse headers for mode "mock", as {headerName: value} — e.g. {"content-type": "application/json"}. On iOS a `charset` in content-type is NOT applied to the response: an HTML body with non-ASCII characters must declare it in the document (e.g. <meta charset="utf-8">) or it will be decoded with the default encoding and render as mojibake.
matchUrlYesURL pattern to match against the request's full URL
matchTypeNoHow matchUrl is interpreted against the request URL (default "contains")
bodyEncodingNoEncoding of `body` (default "text")

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 the full burden. It discloses critical behaviors: routes apply immediately and survive navigation, web-content-only scope, no device-wide changes, and no certificate installation. It also explains update-in-place semantics when id matches an existing route, making side effects clear.

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 front-loaded with the core purpose, then explains modes, then scope limitations and alternatives. Most sentences earn their place, but phrases like 'and never will be by this tool' add mild redundancy, slightly lengthening the text without adding new 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?

For a tool with 14 parameters and no output schema, the description covers the essential contextual facts needed for correct invocation: update semantics, mode behavior, persistence across navigation, web-content-only scope, and explicit redirection to alternative tools for native requests. The schema covers parameter-level details, so nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds value by elaborating the behavior of `mode` (mock serves a response without leaving the device; abort fails it so the page sees a network error) and by explaining the update-in-place behavior of `id` in context. These go beyond the schema's simple field 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 states a precise verb phrase 'Add (or update in place...) a mock/abort rule for browser requests on this device.' It clearly identifies the resource (mock/abort rules) and scope (browser requests on this device), and explicitly differentiates from native code alternatives by highlighting 'WEB CONTENT ONLY' and naming android_traffic_mock_add / ios_traffic_mock_add.

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 gives explicit when-to-use context: it applies to browser/WebView requests, with modes mock (serves response) and abort (fails request). It provides a clear when-not-to-use and alternative: 'For requests made by native app code use android_traffic_mock_add / ios_traffic_mock_add instead.' This leaves no ambiguity about routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

webpage_mock_clearAInspect

Remove ALL browser routes for this device and un-arm interception. Call this when finished — it restores completely normal networking for the browser on that device.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice id (Android serial or iOS UDID)

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description discloses the key side effect: all routes are removed, interception is un-armed, and normal networking is restored. This goes beyond a generic summary and tells the agent the post-condition.

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 compact sentences front-load the action and scope, then give the usage instruction. Every word adds value; no filler or redundant restatement of the tool name.

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?

For a single-parameter cleanup tool with no output schema, the description fully covers what the tool does, when to invoke it, and the result. The agent has enough to select and call it correctly.

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 only parameter (udid), so the schema already fully explains the parameter. The description adds no extra parameter-level detail, meriting the 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?

Description uses specific verb 'Remove' with resource 'ALL browser routes' and scope 'for this device', plus 'un-arm interception'. The full-cap 'ALL' distinguishes this from sibling tools like webpage_mock_remove that operate on individual routes.

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 timing guidance ('Call this when finished') and the consequence (restores normal networking). It does not explicitly name alternatives like webpage_mock_remove, but the 'ALL' phrasing and sibling list make the selection obvious.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

webpage_mock_listAInspect

List the browser mock/abort routes currently registered for this device, in match order (first match wins). WEB CONTENT ONLY: this intercepts requests made by browser/WebView pages. Requests made by native app code are NOT intercepted and never will be by this tool. Nothing device-wide is changed and no certificate is installed — the effect is scoped to the page.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice id (Android serial or iOS UDID)

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and does so well: it states that nothing device-wide is changed, no certificate is installed, the effect is scoped to the page, and native requests are never intercepted. It also discloses match ordering, which is behavior an agent could not infer from the tool name or schema.

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 three sentences with no filler, and the main purpose is front-loaded. The scope limitation and side-effect guarantees are each stated once and earn their 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?

For a simple one-parameter list tool with no output schema, the description covers everything an agent needs: what is listed, the ordering, the exact scope, and the absence of device-wide side effects. There are no meaningful gaps.

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?

The schema already provides 100% coverage of the single 'udid' parameter with a clear description ('Device id (Android serial or iOS UDID)'). The tool description adds no parameter-specific detail, so the baseline of 3 applies.

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 names a specific verb and resource: 'List the browser mock/abort routes currently registered for this device', and adds the critical detail 'in match order (first match wins)'. It also explicitly scopes itself to WEB CONTENT ONLY, distinguishing it from native traffic mocks and from sibling add/remove/clear/status tools.

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 clearly states when to use the tool (for browser/WebView page requests) and when not to ('Requests made by native app code are NOT intercepted and never will be by this tool'). However, it does not explicitly name which sibling tool should be used for native traffic mocks, leaving that to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

webpage_mock_removeAInspect

Remove one browser route by id. When the last route is removed the device is automatically un-armed, so no traffic is paused for nothing.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesRoute id to remove (from *_mock_list)
udidYesDevice id (Android serial or iOS UDID)

TDQS

A4/5.0
Behavior4/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 usefully reveals a non-obvious side effect: removing the last route automatically un-arms the device so no traffic is paused. It does not cover idempotency or error behavior, but the disclosed side effect is meaningful.

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 tight sentences: the first is a clear verb+object statement, the second adds a valuable side effect without filler. Nothing extraneous is present.

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 two-parameter mutation, the description plus schema are largely sufficient. It includes the important automatic un-arm behavior, though it omits return value or error details; since no output schema exists, that is a minor gap.

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 already fully documents udid and id. The description adds only minor context ('by id', 'from *_mock_list' is in the schema), matching the baseline 3 for fully covered schemas.

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?

States a specific verb and resource: 'Remove one browser route by id.' The word 'one' distinguishes it from bulk removal (webpage_mock_clear) and the resource 'browser route' aligns with the webpage_mock_* family.

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: use this to remove a single known route by id. However, it does not explicitly say when to prefer this over webpage_mock_clear or the related mock_remove tools, nor does it mention any prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

webpage_mock_statusAInspect

Report whether browser interception is currently armed on this device, which page target it is attached to, the active routes, and live hit counters (paused/mocked/aborted/passedThrough/errors). Check the counters to confirm a mock is actually firing — a route that never matches shows mocked: 0.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice id (Android serial or iOS UDID)

TDQS

A4.2/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 burden. It discloses that this is a status/read operation, what data it returns (armed state, target, routes, counters), and provides a diagnostic hint about interpreting mocked: 0. It doesn't mention whether it requires an active browser session or what happens if interception is not armed, but the core behavior is well disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core purpose, and the diagnostic guidance is placed at the end. Every sentence earns its place with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a status-reporting tool with one parameter and no output schema, the description is complete enough. It explains what the tool reports and how to interpret the key counter. It could mention prerequisites (e.g., interception must be armed first) or what happens when no mocks exist, but these are minor gaps given the tool's 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 coverage is 100% and the only parameter (udid) is fully described in the schema as 'Device id (Android serial or iOS UDID)'. The description doesn't add parameter-specific detail, but with full schema coverage, baseline 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 reports browser interception status, including armed state, target page, active routes, and hit counters. It distinguishes itself from sibling mock tools (add/clear/list/remove) by focusing on status reporting, and the specific mention of counters confirms it is a read-only diagnostic tool.

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 implies when to use it: after setting up mocks, to verify a mock is firing. It explicitly tells the agent to check counters to confirm a mock is actually matching, and notes that a route that never matches shows mocked: 0. It doesn't explicitly name alternatives like webpage_mock_list, but the context is clear enough for an agent to select this over sibling mock tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

webpage_press_keyAInspect

Press a key in the device browser — works on BOTH iOS Safari and Android Chrome, and on both the key is real: Android dispatches a trusted browser-level keyDown/keyUp pair, and iOS presses it on the device hardware-keyboard surface, which DOES move focus (Tab moves through the form) and reaches key handlers. Where the hardware surface is unavailable, iOS falls back to a synthesized isTrusted:false KeyboardEvent on document.activeElement that does NOT move focus, and for Enter inside a also calls form.requestSubmit()/submit() so submission still fires. The response reports which was used via via.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesKey to press
udidYesDevice UDID / serial (iOS or Android)
pageIdNoTarget page/tab id — auto-picked when omitted
socketNoAndroid only: abstract unix socket name (default: chrome_devtools_remote)
platformVersionNoIgnored (kept for compatibility)

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations present, the description carries the full disclosure burden, and it goes far beyond typical descriptions. It explains trusted vs. synthesized events, focus behavior, iOS fallback mechanics, form submission handling, and the response's `via` field—genuinely valuable behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core purpose is front-loaded, but the remaining content is a dense single-sentence block. Every detail is relevant and valuable, though the structure could be improved with clearer shorter sentences or bullet points. The length is justified by the complexity, so it remains effective.

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 tool with no annotations and no output schema, the description thoroughly covers platform differences, fallback behavior, focus consequences, and response reporting. It does not mention prerequisites (e.g., an already-open browser page) or failure conditions, but the essential behavior needed to invoke and interpret the tool is comprehensively documented.

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?

The input schema provides descriptions for 100% of the parameters, so the baseline is 3. The description adds contextual nuance for the `key` parameter (e.g., Enter inside a form triggers submission), but it does not elaborate on udid, pageId, socket, or platformVersion beyond what the schema already states.

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 opens with a clear verb+resource ('Press a key in the device browser') and immediately scopes it to iOS Safari and Android Chrome, which distinguishes it from sibling tools like web_press_key or device_key. The platform-specific scope makes the tool's role unmistakable.

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 the intended context (device browser on iOS/Android) and details platform behavior, but it never explicitly names alternatives or says when not to use this tool. An agent would have to infer the selection criteria from the platform mention rather than being told outright.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

webpage_reloadAInspect

Reload the page open in the device browser (CDP Page.reload) — works on BOTH iOS Safari and Android Chrome. Confirms the document was actually replaced rather than trusting the protocol ack: a sentinel is written to window before the reload and the call only reports reloaded:true once it is gone. Returns the post-reload url, and reloaded:false with a reason when the document survived, so a reload that quietly did nothing cannot read as success. Also waits for the NEW document to finish loading and reports ready, so the page is drivable when the call returns. This is the state-reset primitive between test cases on iOS, where tabs cannot be opened or closed — and unlike a same-hash navigate it forces a real load, which an SPA router would otherwise skip, leaving stale dialogs and form state behind. Pass hard:true to bypass the HTTP cache.

ParametersJSON Schema
NameRequiredDescriptionDefault
hardNoBypass the HTTP cache (CDP ignoreCache) — a from-network reload (default: false)
udidYesDevice UDID / serial (iOS or Android)
pageIdNoTarget page/tab id — auto-picked when omitted
socketNoAndroid only: abstract unix socket name (default: chrome_devtools_remote)
platformVersionNoIgnored (kept for compatibility)

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description fully carries the behavioral disclosure burden and does so thoroughly. It reveals the sentinel verification mechanism, the fact it does not trust the protocol ack, that it waits for the new document to load, and the exact success/failure reporting semantics (reloaded:true, reloaded:false with reason, post-reload url, ready). This is far beyond what structural data provides.

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 long but every sentence earns its place: core action, platform scope, behavioral verification, return semantics, waiting behavior, use case, and cache-bypass option. It is front-loaded and logically ordered, with no filler or redundant restatement of the tool name.

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?

For a reload tool with no output schema, the description is remarkably complete. It explains what the caller receives (url, reloaded, reason, ready), the verification approach, the use case, and the hard parameter. An agent has enough information to invoke it correctly and interpret results without needing additional context.

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 already documents all five parameters. The description adds no new parameter-specific meaning beyond what the schema states (e.g., hard:true bypasses cache, pageId auto-picked when omitted). It reinforces some semantics but does not compensate beyond the baseline for high schema 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 opens with a specific verb and resource: 'Reload the page open in the device browser (CDP Page.reload)'. It immediately clarifies the platform scope ('iOS Safari and Android Chrome') and later positions it as a 'state-reset primitive', distinguishing it from navigation siblings like webpage_back, webpage_forward, and web_reload. The purpose is unambiguous and well-differentiated.

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 gives a clear when-to-use context: 'state-reset primitive between test cases on iOS, where tabs cannot be opened or closed'. It also contrasts with a same-hash navigate, explaining why this tool forces a real load that an SPA router would skip. However, it does not explicitly exclude desktop alternatives like web_reload or playwright_reload, though the 'device browser' scope is implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

webpage_screenshotAInspect

Screenshot the web page in the device browser (iOS Safari or Android Chrome, auto-detected). ANDROID: a clean capture of the web CONTENT — pass selector or ref to capture just that element (scrolled into view). iOS: element-clipped web capture is unavailable, so this returns the full DEVICE frame (includes the Safari chrome/status bar); selector/ref clipping is Android-only and is ignored on iOS (a note is returned). Returns a JPEG image.

ParametersJSON Schema
NameRequiredDescriptionDefault
refNoAndroid only: capture just this element, named by a ref from a page-elements listing
udidYesDevice UDID / serial (iOS or Android)
pageIdNoTarget page/tab id — auto-picked when omitted
socketNoAndroid only: abstract unix socket name (default: chrome_devtools_remote)
selectorNoAndroid only: capture just this element (CSS selector), scrolled into view
platformVersionNoIgnored (kept for compatibility)

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 carries the full burden and succeeds. It discloses auto-detection of the browser, Android-only element clipping, iOS returning the full device frame including Safari chrome/status bar, selector/ref being ignored on iOS with a note, and the JPEG output format. These are behavioral traits an agent must know to set expectations correctly, and they are all explicitly stated.

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 high-density sentences elegantly cover purpose, platform differences, limitations, and return format. The purpose is front-loaded, and every clause carries distinct information without repetition. No fluff or redundant restatement of the tool name.

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?

The tool's complexity lies in its platform-specific behavior, and the description captures all of it: Android vs. iOS output, selector/ref limitations, the note returned, and auto-detection. All six parameters are schema-documented, the return type is stated, and the description is complete enough for an agent to invoke it correctly without additional probing.

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 input schema already covers 100% of parameters with descriptions, giving a baseline of 3. The description adds critical runtime semantics: selector and ref are Android-only and are ignored (with a note) on iOS. It also clarifies auto-detection, the automatic picking of pageId, and that platformVersion is ignored, which goes beyond the schema's static param docs and helps an agent predict actual behavior.

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?

States a specific verb and resource: 'Screenshot the web page in the device browser.' It is clearly differentiated from generic screenshot tools by specifying the mobile browser context (iOS Safari or Android Chrome) and the return type (JPEG). The description also distinguishes its behavior from sibling screenshot tools by explaining the difference between Android content capture and iOS device-frame capture.

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 clear platform-specific usage instructions: on Android, use selector/ref for element capture; on iOS, element clipping is unavailable, so the full device frame is returned, and a note is returned if selector/ref are supplied. The description tells the agent exactly what will happen on each platform, but does not explicitly name sibling alternatives (e.g., device_screenshot or web_screenshot) or state when to prefer them, which leaves some routing responsibility to the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

webpage_scroll_into_viewAInspect

Scroll an element into view (block/inline: center) in the device browser, by CSS selector or by a ref from a page-elements listing — works on BOTH iOS Safari and Android Chrome.

ParametersJSON Schema
NameRequiredDescriptionDefault
refNoElement ref from a page-elements listing, e.g. "e12". Provide this or `selector`. A ref points straight at the element it was issued for, so it survives markup that shifted position, and it can address elements no CSS selector can reach from the top of the page.
udidYesDevice UDID / serial (iOS or Android)
pageIdNoTarget page/tab id — auto-picked when omitted
socketNoAndroid only: abstract unix socket name (default: chrome_devtools_remote)
selectorNoCSS selector for the target element. Provide this or `ref`.
platformVersionNoIgnored (kept for compatibility)

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses the alignment behavior ('block/inline: center') and the dual-platform support, which is useful. But it does not describe what happens if the element is not found, whether the scroll is smooth or instant, or whether nested scroll containers are handled—details an agent might need to anticipate side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence that front-loads the core action, includes key parameters (selector/ref), specifies alignment, and notes platform support. There is no redundant or filler content—every clause earns its place.

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 straightforward scroll tool with no output schema, the description covers the essential information: what it does, how to specify the target, and where it applies. It omits details like prerequisites (e.g., a page must be open) or error behavior, but these are minor for a scroll action. The cross-platform note helps disambiguate from siblings.

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 already documents each parameter. The description adds minimal extra meaning: it explains that 'ref' comes from a 'page-elements listing' and that selector is an alternative. This is a slight addition, but it does not significantly deepen understanding beyond the schema's own 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 states a specific verb ('scroll'), a resource ('an element into view in the device browser'), and the two modes of identification (CSS selector or ref). It also highlights cross-platform support ('BOTH iOS Safari and Android Chrome'), which clearly differentiates it from generic device-scroll tools like device_scroll and platform-specific ones like ios_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 Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description specifies the intended context: 'in the device browser' and the cross-platform scope, which signals when to use this tool over native-app scroll tools. However, it does not explicitly name alternatives or state exclusions (e.g., 'use device_scroll for native views'), leaving some inference to the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

webpage_select_optionAInspect

Choose an option in a dropdown in the device browser page, by CSS selector or by a ref from a page-elements listing (iOS Safari or Android Chrome, auto-detected). Match the option by value, visible label, OR zero-based index — provide exactly one. Sets the select and dispatches input+change (React/controlled safe). Throws if the target is not a or no option matches the criterion.

ParametersJSON Schema
NameRequiredDescriptionDefault
refNoElement ref from a page-elements listing, e.g. "e12". Provide this or `selector`. A ref points straight at the element it was issued for, so it survives markup that shifted position, and it can address elements no CSS selector can reach from the top of the page.
udidYesDevice UDID / serial (iOS or Android)
indexNoSelect the option at this zero-based index
labelNoSelect the option whose visible text equals this
valueNoSelect the option whose value attribute equals this
pageIdNoTarget page/tab id — auto-picked when omitted
socketNoAndroid only: abstract unix socket name (default: chrome_devtools_remote)
selectorNoCSS selector for the target element. Provide this or `ref`.
platformVersionNoIgnored (kept for compatibility)

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses key behavioral traits: it dispatches input and change events (React/controlled safe) and throws on errors. It also notes auto-detection of platform. With no annotations, this description carries the burden, and it covers the most important behaviors, though it doesn't describe the exact return value or any side effects beyond event dispatch.

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, dense paragraph that front-loads the action and key constraints. Every sentence adds value—matching criteria, platform auto-detection, event dispatch, and error behavior. No fluff or 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?

Given the simplicity of the operation and the rich schema, the description covers the essential context: how to target the element, how to choose the option, platform handling, and error conditions. It doesn't describe the return value, but for a select action that likely returns nothing meaningful, this is acceptable. It's nearly complete for the agent to call correctly.

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 already documents all parameters with descriptions (100% coverage), so the baseline is 3. The description adds meaningful context by clarifying that exactly one of value/label/index must be provided and by explaining the ref vs selector trade-off. This elevates it above the baseline, though the description doesn't add detail on the remaining parameters like udid or pageId, which are self-explanatory.

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 the action: choosing an option in a <select> dropdown. It specifies the context (device browser page, iOS Safari/Android Chrome) and the matching criteria (value, label, index). This distinguishes it from sibling tools like web_select_option and playwright_select_option, which target different environments.

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 clear guidance on the device-browser context and the choice between CSS selector and ref, explaining when each is appropriate. However, it does not explicitly contrast with web_select_option or playwright_select_option, leaving the agent to infer the alternative based on environment. Slightly below a 5 because it doesn't name the sibling alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

webpage_snapshotAInspect

Read the page as a structured tree of what is on it — works on BOTH iOS Safari and Android Chrome. START HERE before acting: each line is role "name" [ref=eN], and that ref goes straight into webpage_click / webpage_type / webpage_hover, so you never have to guess a CSS selector or read markup. Refs address the live element, so they survive markup that shifted and reach elements no selector can. Shows only what is actually visible by default, and marks disabled / checked / expanded state and current field values. Pass interactiveOnly:true for just the things you can act on, or a selector to scope it to one region of a large page.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice UDID / serial (iOS or Android)
limitNoMaximum nodes to return (default: 400, max: 2000)
pageIdNoTarget page/tab id — auto-picked when omitted
socketNoAndroid only: abstract unix socket name (default: chrome_devtools_remote)
selectorNoCSS selector to scope the snapshot to (default: the whole page)
includeHiddenNoInclude elements that are not visible (default: false)
interactiveOnlyNoOnly links, buttons, fields and other actionable roles (default: false)
platformVersionNoIgnored (kept for compatibility)

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral burden. It discloses that only visible elements are shown by default, that state (disabled/checked/expanded) and current field values are marked, and that refs survive markup shifts and reach elements selectors cannot. These are meaningful behavioral details beyond a generic 'read page' statement, though it doesn't mention performance, rate limits, or explicit read-only semantics.

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 a single dense paragraph that front-loads the core purpose and then layers usage, output format, benefits, and options. Every sentence contributes distinct information with no filler. It is longer than minimal but justifiably so given the complexity; the structure is logical and scannable.

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 8 parameters and no output schema, the description covers the critical aspects: what the tree looks like, how refs are used, default visibility, state markers, and configuration options. Parameters like limit, pageId, socket, and platformVersion are left to the schema, which fully documents them. The description is sufficient for an agent to call the tool correctly and interpret the result.

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 the baseline is 3. The description adds semantic value by explaining the purpose of interactiveOnly ('just the things you can act on') and selector ('to scope it to one region of a large page'), and clarifies the default visible-only behavior that maps to includeHidden. This goes beyond the schema's bare parameter descriptions, earning a 4.

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 opens with a specific verb and resource: 'Read the page as a structured tree.' It clearly explains the output format (role 'name' [ref=eN]) and how the refs feed into sibling tools, making the tool's role unmistakable even among a large sibling set. It also states cross-platform support (iOS Safari and Android Chrome), distinguishing it from generic web snapshot tools.

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 phrase 'START HERE before acting' is a strong, explicit usage directive that tells the agent when to invoke this tool. It also advises passing interactiveOnly:true for actionable elements and using a selector to scope to a region. However, it does not explicitly name alternatives or state when NOT to use it, relying on the 'START HERE' implication to cover exclusion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

webpage_tabsAInspect

List, open, switch and close browser tabs on the device — one tool for what would otherwise be several. list works on BOTH iOS Safari and Android Chrome and returns a pageId per tab; pass that pageId to any other webpage_* tool to act on that specific tab, on either platform. new, select and close are ANDROID ONLY and error on iOS rather than pretending — Safari can list and drive tabs remotely but cannot open or close them, and needs no switching since pageId already targets one directly. Stale tabs accumulate across sessions and clutter the list: close what you are done with.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoURL to open — for action "new" (default: about:blank)
udidYesDevice UDID / serial (iOS or Android)
actionNoWhat to do (default "list"). "new"/"select"/"close" are Android only.
pageIdNoTab to act on, from action "list" — required for "select" and "close"
socketNoAndroid only: abstract unix socket name (default: chrome_devtools_remote)
platformVersionNoIgnored (kept for compatibility)

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 carries the full burden, and it delivers: it discloses that unsupported actions will error on iOS rather than silently no-op, that list returns pageId values, and that stale tabs accumulate across sessions and clutter the list. This goes well beyond what the schema provides.

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?

Four sentences, no filler; the first sentence immediately states the consolidated scope, and subsequent sentences add platform constraints and cleanup guidance. Every sentence contributes a distinct piece of operational knowledge.

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 moderate complexity (6 params, 4 actions, 2 platforms) and no output schema, the description explains the key return value (pageId from `list`) and the workflow for using it. However, it does not state whether `new` returns a pageId or what `select`/`close` return, a minor gap for an agent that must rely on this text.

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 input schema already documents every parameter (100% coverage), so the baseline is met. The description adds meaningful semantics by explaining that pageId comes from `list` and can drive any other webpage_* tool, and by clarifying the platform constraints on `action`. It does not re-describe parameters redundantly.

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 opens with a clear verb-resource pairing: 'List, open, switch and close browser tabs on the device', and immediately consolidates what would otherwise be several tools. It distinguishes from siblings by covering both iOS Safari and Android Chrome, and by positioning `list` as the pageId source for other webpage_* tools.

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 explicit platform boundaries: `list` works on both platforms, while `new`, `select`, and `close` are Android-only and error on iOS. It also explains Safari's pageId-based targeting to justify why `select` is unnecessary there, and advises closing stale tabs — practical when-to-use guidance. It doesn't name specific sibling alternatives like ios_safari_close_tab, but the webpage_* family is referenced.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

webpage_typeAInspect

Type text into an input/textarea in the device browser, by CSS selector or by a ref from a page-elements listing — works on BOTH iOS Safari and Android Chrome. On iOS it taps the field and types on the DEVICE keyboard, so the page gets real trusted keystrokes (keydown, keypress, beforeinput, input) exactly as from a person — use this for anything that reacts to typing rather than just reading .value. Otherwise it sets the value via the native HTMLInputElement/HTMLTextAreaElement value setter (so React/Vue-controlled inputs register the change) and dispatches bubbling input and change events, which are isTrusted:false. The response reports which happened via via ("nativeKeyboard" or "jsValue"), and when it fell back to jsValue it names the cause in fallbackReason — you never have to guess whether a degraded path was taken. Pass require:"native" to make an unavailable device keyboard a hard error instead of a silent downgrade, for fields that only behave correctly under real keystrokes. exact:false means the keystrokes landed but the component rewrote the value as you typed (masks, autocompletes) — that is a success, not a failure. By default appends to the existing value; pass clear:true to replace it.

ParametersJSON Schema
NameRequiredDescriptionDefault
refNoElement ref from a page-elements listing, e.g. "e12". Provide this or `selector`. A ref points straight at the element it was issued for, so it survives markup that shifted position, and it can address elements no CSS selector can reach from the top of the page.
textYesText to type
udidYesDevice UDID / serial (iOS or Android)
clearNoReplace the existing value instead of appending (default: false)
pageIdNoTarget page/tab id — auto-picked when omitted
socketNoAndroid only: abstract unix socket name (default: chrome_devtools_remote)
requireNoSet to "native" to fail loudly when the device keyboard is unavailable, instead of silently falling back to setting .value (isTrusted:false). Use for fields that gate on real keystrokes. iOS only — Android has no native-keyboard path here.
selectorNoCSS selector for the target element. Provide this or `ref`.
platformVersionNoIgnored (kept for compatibility)

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description must fully disclose behavior itself, and it does exceptionally well. It details the two execution paths, the isTrusted flag on dispatched events, the response fields (`via`, `fallbackReason`), the semantics of `exact:false` (success, not failure), and the append-vs-clear default. The agent knows exactly what will happen, including degraded paths, without needing to guess.

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 long (eight sentences) but every sentence carries critical operational information: purpose, platform difference, event trust, fallback reporting, error handling, and value mutations. The main action is front-loaded in the first sentence, and the rest unfolds logically. No filler or redundancy—each sentence earns its place given the complexity of the tool.

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 (dual execution paths, platform differences, fallback semantics) and the absence of both annotations and an output schema, this description is remarkably complete. It even covers response fields like `via`, `fallbackReason`, and `exact` to prevent misinterpretation. An agent has everything needed to invoke the tool correctly and anticipate its behavior.

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 already describes all 9 parameters (100% coverage), so the baseline is 3. The description adds genuine value beyond the schema by explaining the trade-offs of `ref` vs `selector`, the purpose of `require` (hard error on unavailable keyboard, iOS only), and the append/clear default behavior. This extra context meaningfully helps agent selection, though the schema alone was already quite informative.

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 opens with a precise action and target: 'Type text into an input/textarea in the device browser, by CSS selector or by a ref.' It immediately scopes the tool to device browsers (iOS Safari and Android Chrome), which distinguishes it from sibling tools like device_type (native apps) and web_type (desktop web). The specific mention of the two platform paths and the trusted-keystroke mechanism makes the purpose unmistakable.

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 clear context on when to rely on the native keyboard path ('use this for anything that reacts to typing rather than just reading .value') and when the JavaScript value setter is appropriate (React/Vue-controlled inputs). It also explains the require:"native" option for fields that need real keystrokes. However, it never names sibling tools like device_type, ios_send_keys, or web_type, or says when to prefer them, so the exclusion guidance is implicit rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

webpage_wait_forAInspect

Poll for an element to appear (and optionally become visible) in the device browser by CSS selector — works on BOTH iOS Safari and Android Chrome. Polls every 250ms inside a single CDP session (no reconnect per tick) until found or timeoutMs elapses. Returns { found, waitedMs } rather than throwing on timeout, so callers can branch on the result. When the selector matches several elements, ANY of them satisfying the test counts as found — so a control duplicated across responsive breakpoints is reported visible when the on-screen copy is.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice UDID / serial (iOS or Android)
pageIdNoTarget page/tab id — auto-picked when omitted
socketNoAndroid only: abstract unix socket name (default: chrome_devtools_remote)
visibleNoAlso require the element to be visible (has client rects and a laid-out offsetParent, or position:fixed) rather than merely present in the DOM (default: false)
selectorYesCSS selector to wait for
timeoutMsNoMax time to wait in milliseconds (default: 5000, max: 30000)
platformVersionNoIgnored (kept for compatibility)

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral burden and does so thoroughly. It discloses the 250ms polling interval, single-CDP-session behavior, non-throwing timeout semantics with { found, waitedMs }, and the ANY-element matching rule for duplicate selectors across breakpoints. This is rich, decision-relevant behavior beyond the bare schema.

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 front-loaded with the core purpose and platform scope, then adds mechanics, return behavior, and an edge case in a logical order. Every sentence contributes useful information without redundancy or filler.

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?

For a polling tool with no annotations and no output schema, the description is complete: it covers what is polled, how often, cross-platform support, timeout behavior, return shape, and the multi-element matching nuance. An agent has what it needs to call the tool and interpret the result without consulting additional sources.

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 already documents all seven parameters. The description adds some contextual meaning around the visible option and matching semantics, but it does not add per-parameter meaning beyond what the schema provides, matching the baseline for full 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 opens with a specific verb and resource: 'Poll for an element to appear (and optionally become visible) in the device browser by CSS selector.' It also states the cross-platform scope ('works on BOTH iOS Safari and Android Chrome'), which distinguishes it from native-app or desktop-web wait tools like device_wait_for_element or web_wait_for.

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 gives clear context: it is for device browsers via CSS selector, explicitly covering iOS Safari and Android Chrome. It does not explicitly name alternatives to use instead (e.g., web_wait_for for desktop or device_wait_for_element for native apps), so it stops short of full exclusion guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

web_press_keyAInspect

Press a key in the DESKTOP grid browser (by pageId) — Enter, Tab, Escape, ArrowDown, or a chord like Control+A. Targets an element when a selector is given, otherwise the focused one. Not a device — for a phone or tablet use webpage_press_key.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesKey name, e.g. Enter / Tab / Escape / ArrowDown / Control+A
pageIdYesPage ID from web_navigate
selectorNoCSS selector to focus first; omit to use focus as-is

TDQS

A4.4/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 burden. It discloses the key targeting logic ('Targets an element when a selector is given, otherwise the focused one') and clarifies it is not a device-level press. It doesn't cover error conditions or waiting behavior, but the core behavior is well 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?

Three short sentences, each with a distinct purpose: the action and examples, the targeting behavior, and the device scoping. No redundancy, and the core constraints are front-loaded.

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 three-parameter tool with no output schema, the description covers the action, allowed keys, target selection, and alternative routing. Minor details like return values or error handling are absent but don't impede correct invocation.

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 adds slight enrichment by explaining targeting behavior and giving example keys, but it doesn't significantly go beyond the schema descriptions for pageId, key, and selector.

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?

States a specific verb ('Press a key'), resource (DESKTOP grid browser by pageId), and lists valid key examples. It also explicitly differentiates from device-level presses and routes phone/tablet usage to webpage_press_key.

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 provides an alternative and a when-not: 'Not a device — for a phone or tablet use webpage_press_key.' It also scopes usage to the desktop grid browser context, so an agent knows exactly when to select this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

web_reloadAInspect

Reload the current page in the DESKTOP grid browser (by pageId). Not a device — for a phone or tablet use webpage_reload.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageIdYesPage ID from web_navigate

TDQS

A3.9/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 responsibility for behavioral disclosure. It only states the action and scope; it does not mention that a reload may discard unsaved form state, whether it waits for the page to finish loading, or any potential side effects. This is a major gap for a mutation-like action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that front-loads the action and scope, then immediately gives the routing caveat. Every word earns its place; nothing is verbose or redundant.

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, the description covers the core 'what' and 'when'. However, the lack of behavioral disclosure (e.g., what happens on reload, any waiting behavior) means the agent may be underinformed. It is adequate but not complete; a note about page load behavior would make it robust.

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?

The schema already fully covers the parameter (pageId with description 'Page ID from web_navigate'). The description only repeats 'by pageId' without adding new meaning. With 100% schema coverage, baseline of 3 applies; no extra context is provided 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 states a specific verb ('Reload'), resource ('DESKTOP grid browser'), and mechanism ('by pageId'). It actively distinguishes itself from the sibling tool webpage_reload, so an agent knows exactly which tool to pick even among many reload-like tools.

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?

It explicitly says when NOT to use it ('Not a device') and directs to the correct alternative ('for a phone or tablet use webpage_reload'). This is clear, unambiguous guidance for routing between desktop and mobile reload tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

web_resizeAInspect

Resize the DESKTOP grid browser viewport (by pageId) — for checking responsive breakpoints without a real handset. A real phone is still the honest test; this only changes the window. NOT a device — a real handset has a fixed screen, so there is no webpage_resize; pick a different device by udid instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
widthYesViewport width in CSS pixels
heightYesViewport height in CSS pixels
pageIdYesPage ID from web_navigate

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavior disclosure. It clearly states that this only changes the window, is not a device emulator, and that a real handset is the only honest test. It also explains the fixed-screen rationale, which adds context beyond the schema. However, it doesn't mention return values or side effects, though these may be minimal for a resize operation. The disclosure is strong but not exhaustive.

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 two dense sentences with no fluff. It front-loads the action and then provides necessary caveats and alternatives. Every sentence earns its place, and it avoids redundancy with the schema.

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?

For a simple tool with three well-documented parameters and no output schema, the description covers the purpose, usage constraints, limitations, and an explicit alternative. It explains why it's not a device and how to get a real device instead. Nothing essential is missing for an agent to decide when and how to use it correctly.

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?

The schema has 100% coverage with descriptions for all three parameters: width, height, and pageId. The description only reiterates 'by pageId' without adding additional meaning, such as units or source. Since the schema already documents each parameter adequately, the description adds minimal value here, consistent with 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?

The description clearly states the verb 'Resize', the resource 'DESKTOP grid browser viewport', and the method 'by pageId'. It also explicitly contrasts with a real device, making it distinct from sibling tools like device_rotate or ios_window_size. The purpose is unambiguous and 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?

It states when to use: 'for checking responsive breakpoints without a real handset' and when not to use: 'A real phone is still the honest test; this only changes the window.' It also provides an explicit alternative: 'pick a different device by udid instead' and explains why there is no webpage_resize. This gives clear routing and exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

web_screenshotAInspect

Screenshot the DESKTOP grid browser page (by pageId), as base64 PNG. Not a device — for a phone or tablet screen use webpage_screenshot (by udid).

ParametersJSON Schema
NameRequiredDescriptionDefault
pageIdYesPage ID from web_navigate

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the burden. It discloses the output format (base64 PNG), the target scope (desktop grid browser page), and the non-device nature. It doesn't cover error behavior or potential side effects, but for a screenshot operation the key behavioral facts are provided.

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 deliver the action, target, output format, and exclusion. Every phrase carries information and the critical scoping constraint 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?

For a one-parameter screenshot tool with full schema coverage and no output schema, the description supplies all necessary selection and invocation context, including output encoding and the key sibling distinction. Nothing essential is missing.

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 pageId already documented as 'Page ID from web_navigate'. The description adds no new semantic nuance beyond 'by pageId', so baseline 3 applies per coverage guidance.

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?

States a precise verb ('Screenshot'), a specific resource (DESKTOP grid browser page), and the identifier type (pageId). It also differentiates from the sibling tool by explicitly disqualifying device-level screenshots, so an agent can select this tool without 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?

Description explicitly says when not to use it ('Not a device') and names the alternative ('webpage_screenshot (by udid)') for phone/tablet screens. This gives clear routing guidance and leaves no inference required.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

web_select_optionAInspect

Choose an option in a in the DESKTOP grid browser (by pageId), by value or visible label. Not a device — for a phone or tablet use webpage_select_option.

ParametersJSON Schema
NameRequiredDescriptionDefault
labelNoVisible option text; used when value is not given
valueNoOption value attribute
pageIdYesPage ID from web_navigate
selectorYesCSS selector of the <select>

TDQS

A4/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, and it does disclose the core behavior (selecting by value or visible label) and environment. However, it doesn't mention side effects such as triggering change events/navigation, behavior when neither value nor label matches, or what the tool returns. These are notable but not fatal gaps for a simple UI 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?

Two short sentences, action and scope front-loaded, alternative at the end. No filler or repetition of schema details.

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 low-complexity tool with fully documented parameters, the description plus schema give an agent the essential invocation path: pageId, CSS selector, and either value or label. The absence of an output schema is not a major issue for an action-style tool; only side-effect/error behavior is left unspecified.

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%, and each parameter (pageId, selector, value, label) already has a clear description. The text adds only the value-vs-label selection distinction, which largely restates the schema. Baseline 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 opens with a specific verb and resource: 'Choose an option in a <select>', scoped to the DESKTOP grid browser and keyed by pageId. It also names a sibling alternative (webpage_select_option), so an agent can distinguish it from similar select tools. Minor ambiguity about what 'grid browser' means, but the action is unmistakable.

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 explicitly states the environment (DESKTOP grid browser by pageId) and gives a when-not-to-use condition: for a phone or tablet, use webpage_select_option. It doesn't mention the Playwright sibling, but the main routing decision is covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

web_snapshotAInspect

Accessibility tree of the DESKTOP grid browser page (by pageId), as text — for finding elements and understanding layout. Not a device: the equivalent for a phone or tablet is webpage_snapshot (by udid).

ParametersJSON Schema
NameRequiredDescriptionDefault
pageIdYesPage ID from web_navigate

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description carries the burden. It transparently discloses the output format (text accessibility tree), the target resource (desktop grid browser page by pageId), and the intended use. It does not explicitly state that it is read-only, but 'snapshot' and 'accessibility tree' strongly imply an observational read.

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 two sentences with no wasted words. The core behavior is front-loaded, and the exclusion/alternative is cleanly separated in the second sentence.

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?

For a one-string-parameter read tool with no output schema, the description covers what the tool returns, how it is keyed, what it is useful for, and which sibling covers other devices. Nothing essential appears missing for an agent to invoke it correctly.

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%: pageId is already described as 'Page ID from web_navigate'. The description only reinforces that the tool operates by pageId and adds no new parameter meaning, so it stays at the high-coverage baseline 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?

The description states a specific output and scope: the accessibility tree of the DESKTOP grid browser page as text, for finding elements and understanding layout. It also distinguishes itself from the mobile sibling webpage_snapshot, making the tool's identity unambiguous.

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 explicitly says when to use it (desktop grid browser page by pageId) and when not to use it (not a device), naming the alternative webpage_snapshot for phone/tablet. An agent receives concrete routing guidance without needing to open other tool definitions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

web_typeAInspect

Type into an element in the DESKTOP grid browser (by pageId). NOT a device — to type on a real phone or tablet use webpage_type (by udid).

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesText to type
pageIdYesPage ID from web_navigate
selectorYesCSS selector of the input element

TDQS

A4/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 carry the behavioral disclosure burden. It states the action and the desktop-only scope, but does not disclose key behaviors such as whether typing replaces existing input, whether key events are dispatched, or what happens on selector failure. This leaves important behavioral uncertainty for a tool with zero annotation support.

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 exceptionally concise: one sentence for the primary purpose and one for the usage caveat. It is front-loaded with the core action and scope, with zero filler. Every phrase 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?

For a simple three-parameter typing tool with no output schema, the description covers the essential context: what it does, where it operates (desktop grid browser), and how to obtain pageId (via web_navigate as stated in schema). It lacks some behavioral nuance like text replacement semantics, but the core operational context is sufficiently complete for correct invocation.

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?

Input schema coverage is 100% with descriptive parameter texts for pageId, selector, and text. The description does not add additional semantic nuance beyond what the schema already provides, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/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: 'Type into an element in the DESKTOP grid browser (by pageId)'. It explicitly differentiates from the device-based sibling webpage_type, and the mention of pageId versus udid further clarifies scope. An agent can immediately understand what this tool does and how it differs from related tools.

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 explicitly provides a when-not: 'NOT a device', and a clear alternative: 'to type on a real phone or tablet use webpage_type (by udid)'. This gives the agent an unambiguous decision rule for tool selection, covering both the negative case and the recommended alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

web_upload_fileAInspect

Set files on a file input in the DESKTOP grid browser (by pageId). Paths are read on the RDS host, not your machine. NOT a device — there is no webpage_upload_file; the device equivalent is ios_safari_set_input_files (by udid).

ParametersJSON Schema
NameRequiredDescriptionDefault
pathsYesAbsolute file paths on the RDS host
pageIdYesPage ID from web_navigate
selectorYesCSS selector of the <input type=file>

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full responsibility for behavioral disclosure. It crucially notes that 'Paths are read on the RDS host, not your machine', which is a critical behavioral detail for agents to understand path interpretation. It also clarifies the scope as desktop-only. While it doesn't mention error handling or multi-file behavior, the path host note is a significant behavioral addition.

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 three concise sentences that front-load the core action and environment, then add the crucial path-host note and the device alternative. Every sentence earns its place without 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 the tool's simplicity (3 params, all required, no output schema), the description covers the essential aspects: what it does, where it operates, the key path interpretation detail, and the alternative for device scenarios. Nothing critical is missing for an agent to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides 100% coverage with descriptions for all parameters, so the baseline is 3. The description adds value by reinforcing that paths are absolute on the RDS host, which aligns with and expands the schema's 'paths' description. It also ties pageId to the desktop grid browser context. This enhances parameter understanding 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 the tool's function: setting files on a file input in the desktop grid browser, identified by pageId. It distinguishes this from device equivalents by explicitly noting it's NOT a device and naming the alternative ios_safari_set_input_files. This is a specific verb+resource with clear differentiation from siblings.

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 explicitly states when to use this tool (desktop grid browser) and provides a direct alternative for device operations: 'the device equivalent is ios_safari_set_input_files'. It also clarifies that there is no webpage_upload_file, preventing confusion. This gives clear usage context and exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

web_wait_forAInspect

Wait for a condition in the DESKTOP grid browser (by pageId) before continuing: an element to appear or disappear, text to show up, or a fixed delay. Prefer this over polling with web_evaluate. Not a device — for a phone or tablet use webpage_wait_for (by udid).

ParametersJSON Schema
NameRequiredDescriptionDefault
textNoWait until this text appears anywhere on the page
stateNovisible | hidden | attached | detached (default: visible). Applies to selector.
pageIdYesPage ID from web_navigate
selectorNoCSS selector to wait for
timeoutMsNoTimeout in ms (default 10000)

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It conveys that the tool blocks until a condition is met, but it does not disclose behavior on timeout (e.g., whether it throws or returns a status) or any side effects. The front-loaded behavioral details are useful but not exhaustive.

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?

Three sentences, no fluff. The first sentence states the core function and scoping, the second gives a preference over an alternative, and the third handles device routing. Each clause earns its place.

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 wait tool with 5 paramsched and no output schema, the description provides the main context: desktop scope, pageId, condition types, and timeout default is in schema. Missing details like timeout failure behavior or how to trigger a pure delay are minor gaps, but overall it is complete enough for an agent to invoke correctly.

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 parameters are already well-documented in the schema. The description maps high-level concepts ('appear or disappear', 'text to show up', 'fixed delay') to the parameters but adds no new syntax or caveats beyond the schema. Baseline 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 states a specific verb ('Wait'), a specific resource ('DESKTOP grid browser'), and a requirement ('by pageId'). It enumerates exact condition types (element appear/disappear, text shown, fixed delay) and explicitly differentiates from siblings (web_evaluate, webpage_wait_for).

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 instructs to prefer this tool over polling with web_evaluate, and directs mobile/tablet usage to webpage_wait_for by udid. This gives clear when-to-use and when-not-to-use guidance, including a named alternative.

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.

  1. 1 tool update
    • Changedapp_upload6 fields changed
      • addedInput schema / properties / chunkIndex / minimum
        Added value: +0
      • changedInput schema / properties / chunkIndex / type
        Previous value: -"number"New value: +"integer"
      • changedInput schema / properties / fileData / description
        Previous value: -"Base64-encoded file data (max ~100MB per chunk)"New value: +"Base64-encoded file data — at most 50MB decoded per call"
      • addedInput schema / properties / skipResign
        Added value: +{
        +  "description": "Keep an .ipa exactly as uploaded (it is already signed for the target devices)",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / totalChunks / minimum
        Added value: +1
      • changedInput schema / properties / totalChunks / type
        Previous value: -"number"New value: +"integer"
  2. 13 tool updates
    • Changedandroid_accessibility_audit1 field changed
      • changedInput schema / properties / scroll / description
        Previous value: -"Defaults false. When true, audit the screen, scroll down, and audit again — repeating until a pass reveals no new elements or maxScrollSteps is reached — then report the deduplicated union. This CHANGES THE SCREEN: it scrolls the app and does not scroll back, and on a lazily-loaded list it will trigger loading. Leave it off when the app must not be disturbed."New value: +"Defaults false. When true, audit the screen, scroll down, and audit again — repeating until a pass reveals no new elements or maxScrollSteps is reached — then report the deduplicated union. This CHANGES THE SCREEN: it scrolls the app and does not scroll back, and on a lazily-loaded list it will trigger loading. Leave it off when the app must not be disturbed."
    • Changeddevice_drag_drop1 field changed
      • changedInput schema / properties / input / description
        Previous value: -"Input path. 'auto' (default) prefers the virtual touchscreen and falls back to injected input. 'hid' requires the virtual touchscreen and fails if the device does not provide one — use it when the gesture must be real kernel input or must fail loudly."New value: +"Input path. 'auto' (default) prefers the virtual touchscreen and falls back to injected input. 'hid' requires the virtual touchscreen and fails if the device does not provide one — use it when the gesture must be real kernel input or must fail loudly."
    • Changeddevice_gamepad_state1 field changed
      • changedInput schema / properties / browserTouchpad / description
        Previous value: -"Also expose the touchpad click (index 17) to a web page open on the device. Off by default. The pad is a REAL input device here, and Chromium's Android mapper fills indices 0-16 only, so index 17 reaches the kernel and native apps but can never reach a browser gamepad tester on its own — not even from a physically-plugged DualShock. This overlays it onto the page. Indices 0-16 still come from the real pad; only 17 is synthesized. Needs an inspectable page open; ignored if there is none. After a navigation the page only exposes a pad once it sees activity, and the touchpad alone cannot provide it — lead with a stick sweep, e.g. frames [{axes:[1,0,0,0]},{axes:[0,0,0,0]},{buttons:[...17]}], which wakes it without adding a button to a tester's history."New value: +"Also expose the touchpad click (index 17) to a web page open on the device. Off by default. The pad is a REAL input device here, and Chromium's Android mapper fills indices 0-16 only, so index 17 reaches the kernel and native apps but can never reach a browser gamepad tester on its own — not even from a physically-plugged DualShock. This overlays it onto the page. Indices 0-16 still come from the real pad; only 17 is synthesized. Needs an inspectable page open; ignored if there is none. After a navigation the page only exposes a pad once it sees activity, and the touchpad alone cannot provide it — lead with a stick sweep, e.g. frames [{axes:[1,0,0,0]},{axes:[0,0,0,0]},{buttons:[...17]}], which wakes it without adding a button to a tester's history."
    • Changeddevice_list_apps1 field changed
      • changedInput schema / properties / includeNonLaunchable / description
        Previous value: -"Include installed packages with no launcher activity — providers, services, OEM stubs. Default false."New value: +"Include installed packages with no launcher activity — providers, services, OEM stubs. Default false."
    • Changeddevice_long_press1 field changed
      • changedInput schema / properties / input / description
        Previous value: -"Input path. 'auto' (default) prefers the virtual touchscreen and falls back to injected input. 'hid' requires the virtual touchscreen and fails if the device does not provide one — use it when the gesture must be real kernel input or must fail loudly."New value: +"Input path. 'auto' (default) prefers the virtual touchscreen and falls back to injected input. 'hid' requires the virtual touchscreen and fails if the device does not provide one — use it when the gesture must be real kernel input or must fail loudly."
    • Changeddevice_page_source1 field changed
      • changedInput schema / properties / search / description
        Previous value: -"Case-insensitive substring grepped across the whole node (text, content-desc, class, resource-id). Looser than `text` (which is an exact text=/content-desc= match) — use it to locate an element without knowing its exact label."New value: +"Case-insensitive substring grepped across the whole node (text, content-desc, class, resource-id). Looser than `text` (which is an exact text=/content-desc= match) — use it to locate an element without knowing its exact label."
    • Changeddevice_pinch1 field changed
      • changedInput schema / properties / input / description
        Previous value: -"Input path. 'auto' (default) prefers the virtual touchscreen and falls back to injected input. 'hid' requires the virtual touchscreen and fails if the device does not provide one — use it when the gesture must be real kernel input or must fail loudly."New value: +"Input path. 'auto' (default) prefers the virtual touchscreen and falls back to injected input. 'hid' requires the virtual touchscreen and fails if the device does not provide one — use it when the gesture must be real kernel input or must fail loudly."
    • Changeddevice_rotate1 field changed
      • changedInput schema / properties / input / description
        Previous value: -"Input path. 'auto' (default) prefers the virtual touchscreen and falls back to injected input. 'hid' requires the virtual touchscreen and fails if the device does not provide one — use it when the gesture must be real kernel input or must fail loudly."New value: +"Input path. 'auto' (default) prefers the virtual touchscreen and falls back to injected input. 'hid' requires the virtual touchscreen and fails if the device does not provide one — use it when the gesture must be real kernel input or must fail loudly."
    • Changeddevice_swipe1 field changed
      • changedInput schema / properties / input / description
        Previous value: -"Input path. 'auto' (default) prefers the virtual touchscreen and falls back to injected input. 'hid' requires the virtual touchscreen and fails if the device does not provide one — use it when the gesture must be real kernel input or must fail loudly."New value: +"Input path. 'auto' (default) prefers the virtual touchscreen and falls back to injected input. 'hid' requires the virtual touchscreen and fails if the device does not provide one — use it when the gesture must be real kernel input or must fail loudly."
    • Changeddevice_tap3 fields changed
      • changedInput schema / properties / input / description
        Previous value: -"Input path. 'auto' (default) prefers the virtual touchscreen and falls back to injected input. 'hid' requires the virtual touchscreen and fails if the device does not provide one — use it when the gesture must be real kernel input or must fail loudly."New value: +"Input path. 'auto' (default) prefers the virtual touchscreen and falls back to injected input. 'hid' requires the virtual touchscreen and fails if the device does not provide one — use it when the gesture must be real kernel input or must fail loudly."
      • changedInput schema / properties / x / description
        Previous value: -"X coordinate in device tap-coord space (NOT visual screenshot pixels — apply scale = device_width / rendered_chat_width if you started from a visual estimate)"New value: +"X coordinate in device tap-coord space (NOT visual screenshot pixels — apply scale = device_width / rendered_chat_width if you started from a visual estimate)"
      • changedInput schema / properties / y / description
        Previous value: -"Y coordinate in device tap-coord space (NOT visual screenshot pixels — apply scale = device_width / rendered_chat_width if you started from a visual estimate)"New value: +"Y coordinate in device tap-coord space (NOT visual screenshot pixels — apply scale = device_width / rendered_chat_width if you started from a visual estimate)"
    • Changeddevice_two_finger_swipe1 field changed
      • changedInput schema / properties / input / description
        Previous value: -"Input path. 'auto' (default) prefers the virtual touchscreen and falls back to injected input. 'hid' requires the virtual touchscreen and fails if the device does not provide one — use it when the gesture must be real kernel input or must fail loudly."New value: +"Input path. 'auto' (default) prefers the virtual touchscreen and falls back to injected input. 'hid' requires the virtual touchscreen and fails if the device does not provide one — use it when the gesture must be real kernel input or must fail loudly."
    • Changeddevice_two_finger_tap1 field changed
      • changedInput schema / properties / input / description
        Previous value: -"Input path. 'auto' (default) prefers the virtual touchscreen and falls back to injected input. 'hid' requires the virtual touchscreen and fails if the device does not provide one — use it when the gesture must be real kernel input or must fail loudly."New value: +"Input path. 'auto' (default) prefers the virtual touchscreen and falls back to injected input. 'hid' requires the virtual touchscreen and fails if the device does not provide one — use it when the gesture must be real kernel input or must fail loudly."
    • Changeddevice_type3 fields changed
      • changedInput schema / properties / clearFirst / description
        Previous value: -"Clear the field before typing — reads its current length from the UI and sends exactly that many backspaces (default: false)"New value: +"Clear the field before typing — reads its current length from the UI and sends exactly that many backspaces (default: false)"
      • changedInput schema / properties / method / description
        Previous value: -"Injection method: keys | ime | shell (default: keys — most reliable for ASCII; non-ASCII auto-falls-back to IME)."New value: +"Injection method: keys | ime | shell (default: keys — most reliable for ASCII; non-ASCII auto-falls-back to IME)."
      • changedInput schema / properties / pressKey / description
        Previous value: -"Keycode to press AFTER typing (e.g. ENTER, TAB, SEARCH) — handles common \"type then submit\" flows in one call"New value: +"Keycode to press AFTER typing (e.g. ENTER, TAB, SEARCH) — handles common \"type then submit\" flows in one call"
  3. 16 tool updates
    • Changedandroid_accessibility_audit1 field changed
      • changedInput schema / properties / scroll / description
        Previous value: -"Defaults false. When true, audit the screen, scroll down, and audit again — repeating until a pass reveals no new elements or maxScrollSteps is reached — then report the deduplicated union. This CHANGES THE SCREEN: it scrolls the app and does not scroll back, and on a lazily-loaded list it will trigger loading. Leave it off when the app must not be disturbed."New value: +"Defaults false. When true, audit the screen, scroll down, and audit again — repeating until a pass reveals no new elements or maxScrollSteps is reached — then report the deduplicated union. This CHANGES THE SCREEN: it scrolls the app and does not scroll back, and on a lazily-loaded list it will trigger loading. Leave it off when the app must not be disturbed."
    • Changeddevice_drag_drop1 field changed
      • changedInput schema / properties / input / description
        Previous value: -"Input path. 'auto' (default) prefers the virtual touchscreen and falls back to injected input. 'hid' requires the virtual touchscreen and fails if the device does not provide one — use it when the gesture must be real kernel input or must fail loudly."New value: +"Input path. 'auto' (default) prefers the virtual touchscreen and falls back to injected input. 'hid' requires the virtual touchscreen and fails if the device does not provide one — use it when the gesture must be real kernel input or must fail loudly."
    • Changeddevice_gamepad_state1 field changed
      • changedInput schema / properties / browserTouchpad / description
        Previous value: -"Also expose the touchpad click (index 17) to a web page open on the device. Off by default. The pad is a REAL input device here, and Chromium's Android mapper fills indices 0-16 only, so index 17 reaches the kernel and native apps but can never reach a browser gamepad tester on its own — not even from a physically-plugged DualShock. This overlays it onto the page. Indices 0-16 still come from the real pad; only 17 is synthesized. Needs an inspectable page open; ignored if there is none. After a navigation the page only exposes a pad once it sees activity, and the touchpad alone cannot provide it — lead with a stick sweep, e.g. frames [{axes:[1,0,0,0]},{axes:[0,0,0,0]},{buttons:[...17]}], which wakes it without adding a button to a tester's history."New value: +"Also expose the touchpad click (index 17) to a web page open on the device. Off by default. The pad is a REAL input device here, and Chromium's Android mapper fills indices 0-16 only, so index 17 reaches the kernel and native apps but can never reach a browser gamepad tester on its own — not even from a physically-plugged DualShock. This overlays it onto the page. Indices 0-16 still come from the real pad; only 17 is synthesized. Needs an inspectable page open; ignored if there is none. After a navigation the page only exposes a pad once it sees activity, and the touchpad alone cannot provide it — lead with a stick sweep, e.g. frames [{axes:[1,0,0,0]},{axes:[0,0,0,0]},{buttons:[...17]}], which wakes it without adding a button to a tester's history."
    • Changeddevice_list_apps1 field changed
      • changedInput schema / properties / includeNonLaunchable / description
        Previous value: -"Include installed packages with no launcher activity — providers, services, OEM stubs. Default false."New value: +"Include installed packages with no launcher activity — providers, services, OEM stubs. Default false."
    • Changeddevice_long_press1 field changed
      • changedInput schema / properties / input / description
        Previous value: -"Input path. 'auto' (default) prefers the virtual touchscreen and falls back to injected input. 'hid' requires the virtual touchscreen and fails if the device does not provide one — use it when the gesture must be real kernel input or must fail loudly."New value: +"Input path. 'auto' (default) prefers the virtual touchscreen and falls back to injected input. 'hid' requires the virtual touchscreen and fails if the device does not provide one — use it when the gesture must be real kernel input or must fail loudly."
    • Changeddevice_page_source1 field changed
      • changedInput schema / properties / search / description
        Previous value: -"Case-insensitive substring grepped across the whole node (text, content-desc, class, resource-id). Looser than `text` (which is an exact text=/content-desc= match) — use it to locate an element without knowing its exact label."New value: +"Case-insensitive substring grepped across the whole node (text, content-desc, class, resource-id). Looser than `text` (which is an exact text=/content-desc= match) — use it to locate an element without knowing its exact label."
    • Changeddevice_pinch1 field changed
      • changedInput schema / properties / input / description
        Previous value: -"Input path. 'auto' (default) prefers the virtual touchscreen and falls back to injected input. 'hid' requires the virtual touchscreen and fails if the device does not provide one — use it when the gesture must be real kernel input or must fail loudly."New value: +"Input path. 'auto' (default) prefers the virtual touchscreen and falls back to injected input. 'hid' requires the virtual touchscreen and fails if the device does not provide one — use it when the gesture must be real kernel input or must fail loudly."
    • Changeddevice_rotate1 field changed
      • changedInput schema / properties / input / description
        Previous value: -"Input path. 'auto' (default) prefers the virtual touchscreen and falls back to injected input. 'hid' requires the virtual touchscreen and fails if the device does not provide one — use it when the gesture must be real kernel input or must fail loudly."New value: +"Input path. 'auto' (default) prefers the virtual touchscreen and falls back to injected input. 'hid' requires the virtual touchscreen and fails if the device does not provide one — use it when the gesture must be real kernel input or must fail loudly."
    • Changeddevice_swipe1 field changed
      • changedInput schema / properties / input / description
        Previous value: -"Input path. 'auto' (default) prefers the virtual touchscreen and falls back to injected input. 'hid' requires the virtual touchscreen and fails if the device does not provide one — use it when the gesture must be real kernel input or must fail loudly."New value: +"Input path. 'auto' (default) prefers the virtual touchscreen and falls back to injected input. 'hid' requires the virtual touchscreen and fails if the device does not provide one — use it when the gesture must be real kernel input or must fail loudly."
    • Changeddevice_tap3 fields changed
      • changedInput schema / properties / input / description
        Previous value: -"Input path. 'auto' (default) prefers the virtual touchscreen and falls back to injected input. 'hid' requires the virtual touchscreen and fails if the device does not provide one — use it when the gesture must be real kernel input or must fail loudly."New value: +"Input path. 'auto' (default) prefers the virtual touchscreen and falls back to injected input. 'hid' requires the virtual touchscreen and fails if the device does not provide one — use it when the gesture must be real kernel input or must fail loudly."
      • changedInput schema / properties / x / description
        Previous value: -"X coordinate in device tap-coord space (NOT visual screenshot pixels — apply scale = device_width / rendered_chat_width if you started from a visual estimate)"New value: +"X coordinate in device tap-coord space (NOT visual screenshot pixels — apply scale = device_width / rendered_chat_width if you started from a visual estimate)"
      • changedInput schema / properties / y / description
        Previous value: -"Y coordinate in device tap-coord space (NOT visual screenshot pixels — apply scale = device_width / rendered_chat_width if you started from a visual estimate)"New value: +"Y coordinate in device tap-coord space (NOT visual screenshot pixels — apply scale = device_width / rendered_chat_width if you started from a visual estimate)"
    • Changeddevice_two_finger_swipe1 field changed
      • changedInput schema / properties / input / description
        Previous value: -"Input path. 'auto' (default) prefers the virtual touchscreen and falls back to injected input. 'hid' requires the virtual touchscreen and fails if the device does not provide one — use it when the gesture must be real kernel input or must fail loudly."New value: +"Input path. 'auto' (default) prefers the virtual touchscreen and falls back to injected input. 'hid' requires the virtual touchscreen and fails if the device does not provide one — use it when the gesture must be real kernel input or must fail loudly."
    • Changeddevice_two_finger_tap1 field changed
      • changedInput schema / properties / input / description
        Previous value: -"Input path. 'auto' (default) prefers the virtual touchscreen and falls back to injected input. 'hid' requires the virtual touchscreen and fails if the device does not provide one — use it when the gesture must be real kernel input or must fail loudly."New value: +"Input path. 'auto' (default) prefers the virtual touchscreen and falls back to injected input. 'hid' requires the virtual touchscreen and fails if the device does not provide one — use it when the gesture must be real kernel input or must fail loudly."
    • Changeddevice_type3 fields changed
      • changedInput schema / properties / clearFirst / description
        Previous value: -"Clear the field before typing — reads its current length from the UI and sends exactly that many backspaces (default: false)"New value: +"Clear the field before typing — reads its current length from the UI and sends exactly that many backspaces (default: false)"
      • changedInput schema / properties / method / description
        Previous value: -"Injection method: keys | ime | shell (default: keys — most reliable for ASCII; non-ASCII auto-falls-back to IME)."New value: +"Injection method: keys | ime | shell (default: keys — most reliable for ASCII; non-ASCII auto-falls-back to IME)."
      • changedInput schema / properties / pressKey / description
        Previous value: -"Keycode to press AFTER typing (e.g. ENTER, TAB, SEARCH) — handles common \"type then submit\" flows in one call"New value: +"Keycode to press AFTER typing (e.g. ENTER, TAB, SEARCH) — handles common \"type then submit\" flows in one call"
    • Changedios_press_button1 field changed
      • changedInput schema / properties / button / description
        Previous value: -"Button name: home, volumeUp, volumeDown, return, go, done, search, backspace, delete, tab. Siri Remote (Apple TV): up, down, left, right, select, back, tv, play_pause, volume_up, volume_down, mute"New value: +"Button name: home, volumeUp, volumeDown, return, go, done, search, backspace, delete, tab"
    • Addedtvos_focus
    • Addedtvos_select
  4. 1 tool update
    • Changedios_press_button1 field changed
      • changedInput schema / properties / button / description
        Previous value: -"Button name: home, volumeUp, volumeDown, return, go, done, search, backspace, delete, tab"New value: +"Button name: home, volumeUp, volumeDown, return, go, done, search, backspace, delete, tab. Siri Remote (Apple TV): up, down, left, right, select, back, tv, play_pause, volume_up, volume_down, mute"
  5. 10 tool updates
    • Addedios_tv_apps
    • Addedios_tv_button
    • Addedios_tv_list
    • Addedios_tv_pair_begin
    • Addedios_tv_pair_finish
    • Addedios_tv_power
    • Addedios_tv_status
    • Addedios_tv_swipe
    • Addedios_tv_text
    • Addedios_tv_volume
  6. 2 tool updates
    • Addedsession_navigate
    • Removedsession_url
  7. 49 tool updates
    • Changeddevice_drag_drop1 field changed
      • addedInput schema / properties / input
        Added value: +{
        +  "description": "Input path. 'auto' (default) prefers the virtual touchscreen and falls back to injected input. 'hid' requires the virtual touchscreen and fails if the device does not provide one — use it when the gesture must be real kernel input or must fail loudly.",
        +  "enum": [
        +    "auto",
        +    "hid"
        +  ],
        +  "type": "string"
        +}
    • Changeddevice_long_press1 field changed
      • addedInput schema / properties / input
        Added value: +{
        +  "description": "Input path. 'auto' (default) prefers the virtual touchscreen and falls back to injected input. 'hid' requires the virtual touchscreen and fails if the device does not provide one — use it when the gesture must be real kernel input or must fail loudly.",
        +  "enum": [
        +    "auto",
        +    "hid"
        +  ],
        +  "type": "string"
        +}
    • Changeddevice_pinch1 field changed
      • addedInput schema / properties / input
        Added value: +{
        +  "description": "Input path. 'auto' (default) prefers the virtual touchscreen and falls back to injected input. 'hid' requires the virtual touchscreen and fails if the device does not provide one — use it when the gesture must be real kernel input or must fail loudly.",
        +  "enum": [
        +    "auto",
        +    "hid"
        +  ],
        +  "type": "string"
        +}
    • Changeddevice_rotate1 field changed
      • addedInput schema / properties / input
        Added value: +{
        +  "description": "Input path. 'auto' (default) prefers the virtual touchscreen and falls back to injected input. 'hid' requires the virtual touchscreen and fails if the device does not provide one — use it when the gesture must be real kernel input or must fail loudly.",
        +  "enum": [
        +    "auto",
        +    "hid"
        +  ],
        +  "type": "string"
        +}
    • Changeddevice_swipe1 field changed
      • addedInput schema / properties / input
        Added value: +{
        +  "description": "Input path. 'auto' (default) prefers the virtual touchscreen and falls back to injected input. 'hid' requires the virtual touchscreen and fails if the device does not provide one — use it when the gesture must be real kernel input or must fail loudly.",
        +  "enum": [
        +    "auto",
        +    "hid"
        +  ],
        +  "type": "string"
        +}
    • Changeddevice_tap2 fields changed
      • addedInput schema / properties / holdMs
        Added value: +{
        +  "description": "How long the contact stays down, in ms. Only applies with input=\"hid\" (default 60ms).",
        +  "maximum": 5000,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / input
        Added value: +{
        +  "description": "Input path. 'auto' (default) prefers the virtual touchscreen and falls back to injected input. 'hid' requires the virtual touchscreen and fails if the device does not provide one — use it when the gesture must be real kernel input or must fail loudly.",
        +  "enum": [
        +    "auto",
        +    "hid"
        +  ],
        +  "type": "string"
        +}
    • Changeddevice_two_finger_swipe1 field changed
      • addedInput schema / properties / input
        Added value: +{
        +  "description": "Input path. 'auto' (default) prefers the virtual touchscreen and falls back to injected input. 'hid' requires the virtual touchscreen and fails if the device does not provide one — use it when the gesture must be real kernel input or must fail loudly.",
        +  "enum": [
        +    "auto",
        +    "hid"
        +  ],
        +  "type": "string"
        +}
    • Changeddevice_two_finger_tap1 field changed
      • addedInput schema / properties / input
        Added value: +{
        +  "description": "Input path. 'auto' (default) prefers the virtual touchscreen and falls back to injected input. 'hid' requires the virtual touchscreen and fails if the device does not provide one — use it when the gesture must be real kernel input or must fail loudly.",
        +  "enum": [
        +    "auto",
        +    "hid"
        +  ],
        +  "type": "string"
        +}
    • Removeddevice_uhid_drag_drop
    • Removeddevice_uhid_long_press
    • Removeddevice_uhid_pinch
    • Removeddevice_uhid_rotate
    • Removeddevice_uhid_swipe
    • Removeddevice_uhid_tap
    • Removeddevice_uhid_two_finger_swipe
    • Removeddevice_uhid_two_finger_tap
    • Changedios_gesture_path2 fields changed
      • addedInput schema / properties / input
        Added value: +{
        +  "description": "Input path. 'auto' (default) drives the gesture through the automation session. 'hid' drives it through the direct input path instead, which needs no automation session — it reports 'no HID available' on iOS 17.x or with no tunnel.",
        +  "enum": [
        +    "auto",
        +    "hid"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / norm
        Added value: +{
        +  "description": "If true, x/y (and path points) are 0..1 FRACTIONS of the screen — pass `pixelInScreenshot ÷ screenshotSize` directly (scale-free, matches the frontend, avoids point-guessing). Default false = iOS screen points.",
        +  "type": "boolean"
        +}
    • Removedios_gesture_path_hid
    • Changedios_long_press2 fields changed
      • addedInput schema / properties / input
        Added value: +{
        +  "description": "Input path. 'auto' (default) drives the gesture through the automation session. 'hid' drives it through the direct input path instead, which needs no automation session — it reports 'no HID available' on iOS 17.x or with no tunnel.",
        +  "enum": [
        +    "auto",
        +    "hid"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / norm
        Added value: +{
        +  "description": "If true, x/y (and path points) are 0..1 FRACTIONS of the screen — pass `pixelInScreenshot ÷ screenshotSize` directly (scale-free, matches the frontend, avoids point-guessing). Default false = iOS screen points.",
        +  "type": "boolean"
        +}
    • Removedios_long_press_hid
    • Changedios_pinch2 fields changed
      • addedInput schema / properties / input
        Added value: +{
        +  "description": "Input path. 'auto' (default) drives the gesture through the automation session. 'hid' drives it through the direct input path instead, which needs no automation session — it reports 'no HID available' on iOS 17.x or with no tunnel.",
        +  "enum": [
        +    "auto",
        +    "hid"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / norm
        Added value: +{
        +  "description": "If true, x/y (and path points) are 0..1 FRACTIONS of the screen — pass `pixelInScreenshot ÷ screenshotSize` directly (scale-free, matches the frontend, avoids point-guessing). Default false = iOS screen points.",
        +  "type": "boolean"
        +}
    • Removedios_pinch_hid
    • Changedios_press_button1 field changed
      • addedInput schema / properties / input
        Added value: +{
        +  "description": "Input path. 'auto' (default) drives the gesture through the automation session. 'hid' drives it through the direct input path instead, which needs no automation session — it reports 'no HID available' on iOS 17.x or with no tunnel.",
        +  "enum": [
        +    "auto",
        +    "hid"
        +  ],
        +  "type": "string"
        +}
    • Removedios_press_button_hid
    • Changedios_rotate2 fields changed
      • addedInput schema / properties / input
        Added value: +{
        +  "description": "Input path. 'auto' (default) drives the gesture through the automation session. 'hid' drives it through the direct input path instead, which needs no automation session — it reports 'no HID available' on iOS 17.x or with no tunnel.",
        +  "enum": [
        +    "auto",
        +    "hid"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / norm
        Added value: +{
        +  "description": "If true, x/y (and path points) are 0..1 FRACTIONS of the screen — pass `pixelInScreenshot ÷ screenshotSize` directly (scale-free, matches the frontend, avoids point-guessing). Default false = iOS screen points.",
        +  "type": "boolean"
        +}
    • Removedios_rotate_hid
    • Changedios_swipe2 fields changed
      • addedInput schema / properties / input
        Added value: +{
        +  "description": "Input path. 'auto' (default) drives the gesture through the automation session. 'hid' drives it through the direct input path instead, which needs no automation session — it reports 'no HID available' on iOS 17.x or with no tunnel.",
        +  "enum": [
        +    "auto",
        +    "hid"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / norm
        Added value: +{
        +  "description": "If true, x/y (and path points) are 0..1 FRACTIONS of the screen — pass `pixelInScreenshot ÷ screenshotSize` directly (scale-free, matches the frontend, avoids point-guessing). Default false = iOS screen points.",
        +  "type": "boolean"
        +}
    • Removedios_swipe_hid
    • Changedios_tap2 fields changed
      • addedInput schema / properties / input
        Added value: +{
        +  "description": "Input path. 'auto' (default) drives the gesture through the automation session. 'hid' drives it through the direct input path instead, which needs no automation session — it reports 'no HID available' on iOS 17.x or with no tunnel.",
        +  "enum": [
        +    "auto",
        +    "hid"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / norm
        Added value: +{
        +  "description": "If true, x/y (and path points) are 0..1 FRACTIONS of the screen — pass `pixelInScreenshot ÷ screenshotSize` directly (scale-free, matches the frontend, avoids point-guessing). Default false = iOS screen points.",
        +  "type": "boolean"
        +}
    • Removedios_tap_hid
    • Changedios_two_finger_swipe2 fields changed
      • addedInput schema / properties / input
        Added value: +{
        +  "description": "Input path. 'auto' (default) drives the gesture through the automation session. 'hid' drives it through the direct input path instead, which needs no automation session — it reports 'no HID available' on iOS 17.x or with no tunnel.",
        +  "enum": [
        +    "auto",
        +    "hid"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / norm
        Added value: +{
        +  "description": "If true, x/y (and path points) are 0..1 FRACTIONS of the screen — pass `pixelInScreenshot ÷ screenshotSize` directly (scale-free, matches the frontend, avoids point-guessing). Default false = iOS screen points.",
        +  "type": "boolean"
        +}
    • Removedios_two_finger_swipe_hid
    • Changedios_two_finger_tap2 fields changed
      • addedInput schema / properties / input
        Added value: +{
        +  "description": "Input path. 'auto' (default) drives the gesture through the automation session. 'hid' drives it through the direct input path instead, which needs no automation session — it reports 'no HID available' on iOS 17.x or with no tunnel.",
        +  "enum": [
        +    "auto",
        +    "hid"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / norm
        Added value: +{
        +  "description": "If true, x/y (and path points) are 0..1 FRACTIONS of the screen — pass `pixelInScreenshot ÷ screenshotSize` directly (scale-free, matches the frontend, avoids point-guessing). Default false = iOS screen points.",
        +  "type": "boolean"
        +}
    • Removedios_two_finger_tap_hid
    • Removedplaywright_back
    • Removedplaywright_console_messages
    • Removedplaywright_drag
    • Removedplaywright_fill_form
    • Removedplaywright_forward
    • Removedplaywright_get_attribute
    • Removedplaywright_get_text
    • Removedplaywright_hover
    • Removedplaywright_network_requests
    • Removedplaywright_press_key
    • Removedplaywright_reload
    • Removedplaywright_resize
    • Removedplaywright_select_option
    • Removedplaywright_upload_file
    • Removedplaywright_wait_for
  8. 68 tool updates
    • Addeddevice_file_copy
    • Addeddevice_file_delete
    • Addeddevice_file_find
    • Addeddevice_file_mkdir
    • Addeddevice_file_move
    • Addeddevice_file_stat
    • Addeddevice_gamepad_disconnect
    • Addeddevice_gamepad_state
    • Addeddevice_gamepad_status
    • Addeddevice_gesture_path
    • Addeddevice_get_location
    • Addeddevice_orientation
    • Addeddevice_pinch
    • Addeddevice_reboot
    • Addeddevice_reflex_probe
    • Addeddevice_rotate
    • Addeddevice_two_finger_swipe
    • Addeddevice_two_finger_tap
    • Addeddevice_uhid_create
    • Addeddevice_uhid_destroy
    • Addeddevice_uhid_drag_drop
    • Addeddevice_uhid_gamepad_state
    • Addeddevice_uhid_input
    • Addeddevice_uhid_key_press
    • Addeddevice_uhid_long_press
    • Addeddevice_uhid_mouse_move
    • Addeddevice_uhid_pinch
    • Addeddevice_uhid_rotate
    • Addeddevice_uhid_swipe
    • Addeddevice_uhid_tap
    • Addeddevice_uhid_two_finger_swipe
    • Addeddevice_uhid_two_finger_tap
    • Changedflow_recording_action10 fields changed
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "tap",
        -  "doubleTap",
        -  "longPress",
        -  "swipe",
        -  "sendKeys",
        -  "keyPress",
        -  "wait",
        -  "assert",
        -  "pressButton"
        -]New value: +[
        +  "tap",
        +  "doubleTap",
        +  "longPress",
        +  "swipe",
        +  "sendKeys",
        +  "keyPress",
        +  "wait",
        +  "assert",
        +  "pressButton",
        +  "scrollToElement",
        +  "appLaunch"
        +]
      • addedInput schema / properties / appActivity
        Added value: +{
        +  "description": "Optional Android activity to launch with appId. Ignored on iOS.",
        +  "type": "string"
        +}
      • addedInput schema / properties / appId
        Added value: +{
        +  "description": "App to launch for an appLaunch step: Android package name, iOS bundle id. Required when action=appLaunch.",
        +  "type": "string"
        +}
      • changedInput schema / properties / assertType / description
        Previous value: -"Assertion type (required when action=assert). exists/notExists check element presence; textEquals/textContains compare an attribute value."New value: +"Assertion type (required when action=assert). exists/notExists check element presence; textEquals/textContains compare an attribute value; visualMatch compares the whole screen against the screenshot captured now (takes no x/y and no expected)."
      • changedInput schema / properties / assertType / enum
        Previous value: -[
        -  "exists",
        -  "notExists",
        -  "textEquals",
        -  "textContains"
        -]New value: +[
        +  "exists",
        +  "notExists",
        +  "textEquals",
        +  "textContains",
        +  "visualMatch"
        +]
      • changedInput schema / properties / attribute / description
        Previous value: -"Attribute to read for text assertions. iOS: label, value, name. Android: text, content-desc, resource-id. Defaults to platform primary text attribute when omitted."New value: +"Attribute to read for text assertions. iOS: label, value, name. Android: text, content-desc, resource-id. Defaults to the platform primary text attribute when omitted."
      • addedInput schema / properties / optional
        Added value: +{
        +  "description": "Mark this step as one whose target is EXPECTED to be absent sometimes — a cookie banner, a first-run tutorial, an occasional interstitial. When the element cannot be found at replay the step is SKIPPED instead of failing, and no gesture is dispatched at the recorded position. Leave it off for anything whose absence is a bug: a step that is NOT optional now FAILS the replay when its element is missing, which is what tells a real regression apart from a banner that simply did not appear this run.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / visionFallback
        Added value: +{
        +  "description": "Let a vision model settle this assertion when the accessibility tree cannot find the element. Off by default, and only honoured for assertType 'exists' and 'notExists'. Turn it on for UI the tree cannot describe — canvas/WebGL screens, game engines, image-only controls with their text baked into the bitmap — where 'a person can see it' is the only check available. Leave it off for ordinary native UI: an assertion's value is that it reports what is really there, and a model asked to find something tends to find it. Ignored for text assertions, which compare exact strings that OCR cannot supply reliably.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / x / description
        Previous value: -"X coordinate (tap/doubleTap/longPress/swipe start; assert target element)"New value: +"X coordinate (tap/doubleTap/longPress/swipe start; assert & scrollToElement target element)"
      • changedInput schema / properties / y / description
        Previous value: -"Y coordinate (tap/doubleTap/longPress/swipe start; assert target element)"New value: +"Y coordinate (tap/doubleTap/longPress/swipe start; assert & scrollToElement target element)"
    • Changedflow_recording_replace_step12 fields changed
      • changedInput schema / properties / action / description
        Previous value: -"Action type to record in place of the existing step"New value: +"Action type"
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "tap",
        -  "doubleTap",
        -  "longPress",
        -  "swipe",
        -  "sendKeys",
        -  "keyPress",
        -  "wait",
        -  "assert",
        -  "pressButton"
        -]New value: +[
        +  "tap",
        +  "doubleTap",
        +  "longPress",
        +  "swipe",
        +  "sendKeys",
        +  "keyPress",
        +  "wait",
        +  "assert",
        +  "pressButton",
        +  "scrollToElement",
        +  "appLaunch"
        +]
      • addedInput schema / properties / appActivity
        Added value: +{
        +  "description": "Optional Android activity to launch with appId. Ignored on iOS.",
        +  "type": "string"
        +}
      • addedInput schema / properties / appId
        Added value: +{
        +  "description": "App to launch for an appLaunch step: Android package name, iOS bundle id. Required when action=appLaunch.",
        +  "type": "string"
        +}
      • changedInput schema / properties / assertType / description
        Previous value: -"Assertion type (required when action=assert)."New value: +"Assertion type (required when action=assert). exists/notExists check element presence; textEquals/textContains compare an attribute value; visualMatch compares the whole screen against the screenshot captured now (takes no x/y and no expected)."
      • changedInput schema / properties / assertType / enum
        Previous value: -[
        -  "exists",
        -  "notExists",
        -  "textEquals",
        -  "textContains"
        -]New value: +[
        +  "exists",
        +  "notExists",
        +  "textEquals",
        +  "textContains",
        +  "visualMatch"
        +]
      • changedInput schema / properties / attribute / description
        Previous value: -"Attribute to read for text assertions. iOS: label, value, name. Android: text, content-desc, resource-id."New value: +"Attribute to read for text assertions. iOS: label, value, name. Android: text, content-desc, resource-id. Defaults to the platform primary text attribute when omitted."
      • changedInput schema / properties / keyName / description
        Previous value: -"Hardware button name for pressButton. Required when action=pressButton."New value: +"Hardware button name for pressButton (e.g. 'home', 'volumeUp', 'volumeDown', 'lock'). Required when action=pressButton."
      • addedInput schema / properties / optional
        Added value: +{
        +  "description": "Mark this step as one whose target is EXPECTED to be absent sometimes — a cookie banner, a first-run tutorial, an occasional interstitial. When the element cannot be found at replay the step is SKIPPED instead of failing, and no gesture is dispatched at the recorded position. Leave it off for anything whose absence is a bug: a step that is NOT optional now FAILS the replay when its element is missing, which is what tells a real regression apart from a banner that simply did not appear this run.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / visionFallback
        Added value: +{
        +  "description": "Let a vision model settle this assertion when the accessibility tree cannot find the element. Off by default, and only honoured for assertType 'exists' and 'notExists'. Turn it on for UI the tree cannot describe — canvas/WebGL screens, game engines, image-only controls with their text baked into the bitmap — where 'a person can see it' is the only check available. Leave it off for ordinary native UI: an assertion's value is that it reports what is really there, and a model asked to find something tends to find it. Ignored for text assertions, which compare exact strings that OCR cannot supply reliably.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / x / description
        Previous value: -"X coordinate (tap/doubleTap/longPress/swipe start; assert target element)"New value: +"X coordinate (tap/doubleTap/longPress/swipe start; assert & scrollToElement target element)"
      • changedInput schema / properties / y / description
        Previous value: -"Y coordinate (tap/doubleTap/longPress/swipe start; assert target element)"New value: +"Y coordinate (tap/doubleTap/longPress/swipe start; assert & scrollToElement target element)"
    • Addedflow_recording_wrap_in_condition
    • Changedios_accessibility_audit1 field changed
      • changedInput schema / properties / element / description
        Previous value: -"Narrow the result to one element: its accessibility label, resolved on device the same way ios_tap_by_label resolves it. XCTest can only audit a whole app, so this filters the findings to those inside that element's bounds — it cannot surface anything the full-screen audit did not already report. Errors if the label matches nothing, rather than silently returning the whole screen."New value: +"Narrow the result to one element: its accessibility label, resolved on device the same way ios_tap_by_label resolves it. the platform audit engine can only audit a whole app, so this filters the findings to those inside that element's bounds — it cannot surface anything the full-screen audit did not already report. Errors if the label matches nothing, rather than silently returning the whole screen."
    • Addedios_actions_record_start
    • Addedios_actions_record_status
    • Addedios_actions_record_stop
    • Addedios_actions_recording_read
    • Addedios_actions_recordings
    • Addedios_actions_replay
    • Addedios_alert_respond
    • Addedios_alert_status
    • Changedios_battery1 field changed
      • addedInput schema / properties / raw
        Added value: +{
        +  "description": "Include the full IOPMPowerSource registry alongside the summary (~60 keys). Default true; set false for just the summary.",
        +  "type": "boolean"
        +}
    • Addedios_contacts_hid
    • Addedios_elements_in_region
    • Addedios_gamepad_disconnect
    • Addedios_gamepad_state
    • Addedios_gamepad_status
    • Changedios_launch_app1 field changed
      • addedInput schema / properties / arguments
        Added value: +{
        +  "description": "Optional launch arguments (argv). Omit for a plain activate; supplying any forces a cold relaunch.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Addedios_locators_for
    • Addedios_notifications_capture
    • Addedios_pinch_hid
    • Addedios_play_location_route
    • Changedios_reboot2 fields changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "const": true,
        +  "description": "Must be exactly true. Acknowledges the device will restart and the session will be lost.",
        +  "type": "boolean"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "udid"
        -]New value: +[
        +  "udid",
        +  "confirm"
        +]
    • Addedios_release_contacts_hid
    • Addedios_rotate
    • Addedios_rotate_hid
    • Addedios_safari_close_tab
    • Addedios_safari_heap_snapshot
    • Addedios_safari_trace
    • Addedios_two_finger_swipe
    • Addedios_two_finger_swipe_hid
    • Addedios_two_finger_tap
    • Addedios_two_finger_tap_hid
    • Addedios_wait_for_element
    • Addedwebpage_fill_form
  9. 4 tool updates
    • Changedautomation_report4 fields changed
      • changedInput schema / properties / endDate / description
        Previous value: -"ISO date (YYYY-MM-DD) — end of the window, inclusive."New value: +"ISO date (YYYY-MM-DD, zero-padded) — end of the window, inclusive."
      • addedInput schema / properties / endDate / pattern
        Added value: +"^\\d{4}-\\d{2}-\\d{2}$"
      • changedInput schema / properties / startDate / description
        Previous value: -"ISO date (YYYY-MM-DD) — start of the window, inclusive."New value: +"ISO date (YYYY-MM-DD, zero-padded) — start of the window, inclusive."
      • addedInput schema / properties / startDate / pattern
        Added value: +"^\\d{4}-\\d{2}-\\d{2}$"
    • Changedautomation_session_commands1 field changed
      • changedInput schema / properties / limit / description
        Previous value: -"Max steps to return (default 200, which is also the ceiling)."New value: +"Max steps to return (default 200, which is also the ceiling). Returns the LAST n steps, not the first — a run that fell over did so at the end. On a long run that means the window can exclude the very failure `firstFailureIndex` points at, so use failuresOnly=true to land on it instead of raising this."
    • Addedautomation_session_step
    • Changedautomation_sessions_list8 fields changed
      • addedInput schema / properties / deviceUdid
        Added value: +{
        +  "description": "Only runs on this device (exact udid match).",
        +  "type": "string"
        +}
      • addedInput schema / properties / endDate
        Added value: +{
        +  "description": "ISO date (YYYY-MM-DD, zero-padded) — latest run to include.",
        +  "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
        +  "type": "string"
        +}
      • changedInput schema / properties / failedOnly / description
        Previous value: -"Only runs that failed — reported failures and inferred ones alike."New value: +"Only runs that failed — reported failures AND inferred ones, matching the verdict this tool reports."
      • changedInput schema / properties / limit / description
        Previous value: -"Max runs to return (default 50, which is also the ceiling)."New value: +"Max runs per page (default 50, which is also the ceiling)."
      • addedInput schema / properties / offset
        Added value: +{
        +  "description": "Skip this many matching runs — page through with `total` to know when to stop.",
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / platform
        Added value: +{
        +  "description": "Only runs on this platform, e.g. \"android\", \"ios\", \"linux\".",
        +  "type": "string"
        +}
      • addedInput schema / properties / search
        Added value: +{
        +  "description": "Free text matched against session id, test name and suite. Use this for a pasted session id; the truncated form shown in the UI matches too.",
        +  "type": "string"
        +}
      • addedInput schema / properties / startDate
        Added value: +{
        +  "description": "ISO date (YYYY-MM-DD, zero-padded) — earliest run to include.",
        +  "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
        +  "type": "string"
        +}
  10. 5 tool updates
    • Addedautomation_build_link
    • Addedautomation_report
    • Addedautomation_session_commands
    • Addedautomation_session_get
    • Addedautomation_sessions_list
  11. 32 tool updates
    • Changeddevice_list_apps2 fields changed
      • addedInput schema / properties / includeNonLaunchable
        Added value: +{
        +  "description": "Include installed packages with no launcher activity — providers, services, OEM stubs. Default false.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / userOnly / description
        Previous value: -"Only list user-installed apps, excludes system apps (default: true)"New value: +"Only user-installed apps, excluding preinstalled ones (default: false)"
    • Changedios_list_apps1 field changed
      • addedInput schema / properties / includeInternal
        Added value: +{
        +  "description": "Include hidden system bundles — view services, XPC helpers, SpringBoard — and return the raw Info.plist dicts. Default false. Very large output.",
        +  "type": "boolean"
        +}
    • Addedplaywright_back
    • Addedplaywright_console_messages
    • Addedplaywright_drag
    • Addedplaywright_fill_form
    • Addedplaywright_forward
    • Addedplaywright_get_attribute
    • Addedplaywright_get_text
    • Addedplaywright_hover
    • Addedplaywright_network_requests
    • Addedplaywright_press_key
    • Addedplaywright_reload
    • Addedplaywright_resize
    • Addedplaywright_select_option
    • Addedplaywright_upload_file
    • Addedplaywright_wait_for
    • Addedweb_back
    • Addedweb_console_messages
    • Addedweb_drag
    • Addedweb_fill_form
    • Addedweb_forward
    • Addedweb_get_attribute
    • Addedweb_get_text
    • Addedweb_hover
    • Addedweb_network_requests
    • Addedweb_press_key
    • Addedweb_reload
    • Addedweb_resize
    • Addedweb_select_option
    • Addedweb_upload_file
    • Addedweb_wait_for
  12. 1 tool update
    • Addedios_supported_languages
  13. 6 tool updates
    • Changedios_find_element1 field changed
      • addedInput schema / properties / match
        Added value: +{
        +  "description": "How to match `label`. Default \"contains\" — strict, and the only modes that act without interpretation. \"fuzzy\" tolerates typos and word-order drift, and is tried ONLY after strict finds nothing; it REFUSES when two candidates are too close rather than guessing between them (e.g. \"Sign\" vs Sign In / Sign Out), and reports which attribute it matched.",
        +  "enum": [
        +    "exact",
        +    "contains",
        +    "fuzzy"
        +  ],
        +  "type": "string"
        +}
    • Changedios_send_keys1 field changed
      • addedInput schema / properties / force
        Added value: +{
        +  "description": "Send even when no focused field is reported (default: false)",
        +  "type": "boolean"
        +}
    • Changedios_tap_by_label1 field changed
      • addedInput schema / properties / match
        Added value: +{
        +  "description": "How to match `label`. Default \"contains\" — strict, and the only modes that act without interpretation. \"fuzzy\" tolerates typos and word-order drift, and is tried ONLY after strict finds nothing; it REFUSES when two candidates are too close rather than guessing between them (e.g. \"Sign\" vs Sign In / Sign Out), and reports which attribute it matched.",
        +  "enum": [
        +    "exact",
        +    "contains",
        +    "fuzzy"
        +  ],
        +  "type": "string"
        +}
    • Addedwebpage_clear_browsing_data
    • Changedwebpage_reload1 field changed
      • addedInput schema / properties / hard
        Added value: +{
        +  "description": "Bypass the HTTP cache (CDP ignoreCache) — a from-network reload (default: false)",
        +  "type": "boolean"
        +}
    • Changedwebpage_type1 field changed
      • addedInput schema / properties / require
        Added value: +{
        +  "description": "Set to \"native\" to fail loudly when the device keyboard is unavailable, instead of silently falling back to setting .value (isTrusted:false). Use for fields that gate on real keystrokes. iOS only — Android has no native-keyboard path here.",
        +  "enum": [
        +    "native"
        +  ],
        +  "type": "string"
        +}
  14. 7 tool updates
    • Changedandroid_devtools_mock_add1 field changed
      • changedInput schema / properties / headers / description
        Previous value: -"Response headers for mode \"mock\", as {headerName: value} — e.g. {\"content-type\": \"application/json\"}"New value: +"Response headers for mode \"mock\", as {headerName: value} — e.g. {\"content-type\": \"application/json\"}. On iOS a `charset` in content-type is NOT applied to the response: an HTML body with non-ASCII characters must declare it in the document (e.g. <meta charset=\"utf-8\">) or it will be decoded with the default encoding and render as mojibake."
    • Addedfirebase_install_release
    • Addedfirebase_list_apps
    • Addedfirebase_list_releases
    • Changedios_safari_mock_add1 field changed
      • changedInput schema / properties / headers / description
        Previous value: -"Response headers for mode \"mock\", as {headerName: value} — e.g. {\"content-type\": \"application/json\"}"New value: +"Response headers for mode \"mock\", as {headerName: value} — e.g. {\"content-type\": \"application/json\"}. On iOS a `charset` in content-type is NOT applied to the response: an HTML body with non-ASCII characters must declare it in the document (e.g. <meta charset=\"utf-8\">) or it will be decoded with the default encoding and render as mojibake."
    • Addedios_syslog_capture
    • Changedwebpage_mock_add1 field changed
      • changedInput schema / properties / headers / description
        Previous value: -"Response headers for mode \"mock\", as {headerName: value} — e.g. {\"content-type\": \"application/json\"}"New value: +"Response headers for mode \"mock\", as {headerName: value} — e.g. {\"content-type\": \"application/json\"}. On iOS a `charset` in content-type is NOT applied to the response: an HTML body with non-ASCII characters must declare it in the document (e.g. <meta charset=\"utf-8\">) or it will be decoded with the default encoding and render as mojibake."
  15. 2 tool updates
    • Changedios_safari_evaluate3 fields changed
      • addedInput schema / properties / waitForSelector
        Added value: +{
        +  "description": "CSS selector to wait for BEFORE evaluating. Polls until it matches, then runs the expression. Errors if it never appears within waitTimeoutMs — it will not evaluate anyway and hand back a null that reads like a real answer",
        +  "type": "string"
        +}
      • addedInput schema / properties / waitMs
        Added value: +{
        +  "description": "Settle delay applied just before evaluating (and AFTER waitForSelector matches, when both are given). Use for animations that have started but not finished. Maximum 10000 ms",
        +  "maximum": 10000,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / waitTimeoutMs
        Added value: +{
        +  "description": "How long waitForSelector may poll. Default 5000 ms, maximum 15000 ms",
        +  "maximum": 15000,
        +  "minimum": 0,
        +  "type": "integer"
        +}
    • Addedios_safari_set_input_files

Publisher details

Operator
Not applicable
Operator website
Not applicable
Vendor relationship
Not applicable
Trust center
Unknown
Restrictions
Unknown

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    A
    maintenance
    Enables AI assistants to automate mobile app testing and development for iOS and Android through natural language interactions. Supports intelligent element identification, session management, automated test generation, and comprehensive device interactions including clicks, swipes, screenshots, and app management.
    31
    5,170 npm
    477
    Apache 2.0
  • A
    license
    A
    quality
    B
    maintenance
    Enables AI assistants to control mobile and desktop devices with natural language, including running automation tasks, taking screenshots, and managing devices.
    6
    5 npm
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources