Skip to main content
Glama

Robot Actions — Remote Device Control

Ownership verified

Server Details

Drive real Android & iOS devices and web browsers from natural language for mobile + web QA. 145+ 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.

Status
Healthy
Last Tested
Transport
Streamable HTTP
URL

Glama MCP Gateway

Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.

MCP client
Glama
MCP server

Full call logging

Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.

Tool access control

Enable or disable individual tools per connector, so you decide what your agents can and cannot do.

Managed credentials

Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.

Usage analytics

See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.

100% free. Your data is private.
Tool DescriptionsA

Average 4.1/5 across 281 of 281 tools scored. Lowest: 2.5/5.

Server CoherenceC
Disambiguation3/5

The tool set is organized by platform prefixes (android_, ios_, web_, webpage_, device_), which separates most concerns, but there are numerous near-parallel tools (screenshot, mock, capture, tap variants) whose boundaries require reading long descriptions. Pairs like device_screenshot vs android_mjpeg_screenshot and ios_screenshot vs ios_mjpeg_screenshot are easy to conflate despite clear docs. The sheer count makes misselection likely even when descriptions disambiguate.

Naming Consistency3/5

Most tools follow a prefix_noun_verb pattern (android_devtools_list_pages, flow_recording_start, testrail_get_case), but there is variation between verb-first and noun-first forms, and different prefixes (device_ vs android_, web_ vs webpage_) for overlapping domains. The inconsistencies are readable but clearly not from a single unified naming scheme.

Tool Count1/5

281 tools is an extreme mismatch for a single MCP server, even for remote device control; the set bundles unrelated domains (Jira, TestRail, AzDO, agent memory, visual review, feedback) alongside device control. This far exceeds the range where an agent can reliably choose among tools.

Completeness4/5

For the device-control core, coverage is exceptionally thorough: Android and iOS both have launch/tap/type/swipe, screenshots, UI hierarchy, performance, crash, network capture/mocking, file I/O, recordings, and replays. Minor gaps exist (e.g., no dedicated Android logcat reader, no iOS counterpart to android_devtools_capture_network for arbitrary WebViews), but agents can work around them via device_shell and ios_shell.

Available Tools

283 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.
Behavior4/5

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

With no annotations provided, the description carries full behavioral disclosure burden. It discloses the persistent nature (auto-prepended to system prompt on every chat), the 10240-byte cap with 413 over-cap behavior, and formatting expectations. Does not mention whether appends can be deleted or overwritten beyond the sibling replace tool, but covers the key side effects affecting agent decisions.

Agents need to know what a tool does to the world before 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 with zero waste. Front-loaded purpose, then usage rules, then constraints. Every clause earns its place—trigger phrases, anti-pattern warning, memory behavior, cap, formatting 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 1-parameter tool with 100% schema coverage and no output schema, the description is highly complete. It covers when to use, what to store, storage behavior, and failure mode. Minor gap: doesn't describe what happens on success (return value), but for a side-effect append operation this is a low-value omission given no output schema is 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?

Schema description coverage is 100%, so the single 'block' parameter is fully documented in the schema. The description adds the value-laden guidance that markdown is encouraged and entries should be terse and factual, which is useful but the schema already defines what the parameter is. 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?

Clear specific verb+resource: 'Append a block to the calling user's persistent agent memory.' Distinguishes from sibling agent_memory_replace by specifying append semantics, and from the large pool of device/test tools by its explicit memory scope.

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?

Exceptionally explicit: names exact trigger phrases ('remember X', 'save this', 'note for next time'), states an explicit exclusion ('DO NOT auto-update on every interaction'), and gives content guidance (terse, factual, markdown, not verbose). This is textbook-level usage guidance.

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.
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 10240-byte cap with the 413 error behavior, which is valuable. However, it doesn't disclose side effects beyond the implied whole-file overwrite, nor what happens to the existing memory content (though 'replace the entire memory file' implies full overwrite). The risk framing ('USE SPARINGLY') adds context but the description is somewhat thin on full 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.

Conciseness4/5

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

Three short sentences, all earning their place: purpose, usage guidance, and the technical cap. The 'USE SPARINGLY' emphasis is front-loaded in the first line. Efficient and readable; only minor inefficiency is the mild redundancy between 'USE SPARINGLY' and the guidance that follows.

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 tool with no output schema and simple semantics, the description is fairly complete. It covers the purpose, the when/when-not (append as alternative), the cap behavior with error code, and the clear-option. The main gap is that it doesn't explain the return value, but for a write-only replace tool with no output schema, this is acceptable.

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 'content' parameter. The description adds modest value by noting 'Pass empty string to clear,' which is useful beyond what the schema states ('Full memory content (Markdown)'). This matches the baseline-3 scenario where the schema does heavy lifting with a small description bonus.

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 purpose: "Replace the entire memory file for the calling user." It uses a specific verb (replace) with a specific resource (memory file). It doesn't heavily distinguish from siblings beyond implying it's the 'less safe' counterpart to append, but the scope ('entire memory file') is precise.

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 guides when to use this tool: "USE SPARINGLY — append is the safer primary." It names the alternative (append) and the specific conditions for using replace: 'memory has drifted wrong, accumulated stale entries, or the user asks for a clean rewrite.' This is excellent 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.

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), 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; "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.
Behavior5/5

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

With no annotations provided, the description carries full weight and exceeds expectations: it discloses that the audit covers only the foreground screen, scroll changes the screen and doesn't scroll back, deduplication after scrolling, and important limitations (tap-target results are a screening signal, only on-screen elements, ancestor touch dispatch invisibility, and contrast/text-size not checked). This is exceptional 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 long but every sentence provides necessary context, from purpose to usage to limits. It could be restructured with headers or bullet points for readability, but the density is justified given the tool's complexity. 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?

This is a complex tool with no output schema, yet the description fully covers what findings look like (label, class, pixel rect), how to use them (tap rect center with device_tap), scroll behavior, locale handling, and limitations. It leaves no critical operational gap for an agent to invoke 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%, but the description adds substantial meaning beyond the schema: it explains what each check detects with concrete examples (e.g., 'Submit button'), clarifies scroll behavior and side effects, and notes locale implications for the redundant-description check. It enriches parameter understanding without merely repeating 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 clearly states the tool runs an accessibility audit on the current Android screen, with a specific verb ('run'), resource ('accessibility audit'), and scope ('CURRENT screen'). It also aligns with Google's Accessibility Scanner rules and distinguishes itself from iOS equivalents, so purpose 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 explicit sequencing guidance: navigate to the target screen first using device_tap_by_text/device_launch_app, then call this tool. It also explains when to use scroll:true and when to leave it off. However, it does not explicitly contrast with sibling tools or state when not to use the tool beyond the navigation prerequisite.

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`)
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 this measures cold launches specifically (via -S flag which stops the app first), that results are averaged over N runs, and that it resolves launcher activity from package. This is meaningful behavioral context for a read-only measurement tool, though it doesn't note that it terminates the app or describe the exact 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?

Two sentences, zero waste. The first sentence states the measurement and method; the second explains the activity resolution. Every word earns its place and the key purpose 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 measurement tool with 100% schema coverage and simple parameters, the description is adequately complete. It explains the method, the metric, the averaging behavior, and activity resolution. It could note the output format (ms timestamp/summary) but given the tool's simplicity and full schema coverage, this is a minor gap rather than a blocking one.

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 well. The description's mention of 'averaged over N runs' aligns with the `runs` parameter and adds context that runs defaults to 3, which the schema implies but the description confirms. The description doesn't add significant extra semantics beyond the schema's already-good 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 a specific verb+resource (measure cold app-launch time in ms) with the method used (`am start -W -S`). It also explains it resolves the launcher activity from the package and averages over N runs. This distinguishes it from siblings like device_launch_app (which launches) and ios_app_launch_time (iOS 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 implies when to use it (measuring cold launch performance) but does not explicitly state when NOT to use it or name alternative tools. However, the method detail ('cold' launch, -S flag, averaging runs) provides clear context about the intended use case that distinguishes it from warm-launch or simple launch tools.

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`)
Behavior3/5

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

No annotations are provided, so the description carries full burden. The description tells us the tool returns analytics data structured as totals/process/type/day but doesn't disclose side effects (likely none), return format, or what happens if no dropbox entries exist. For a read-only analytics tool, this is reasonably adequate but thin.

Agents need to know what a tool does to the world before 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 waste. Front-loaded with the core purpose and data sources, closes with the sibling pointer. 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 aggregate analytics tool with no output schema, the description covers the purpose, data source, aggregation dimensions, and sibling distinction. It doesn't need to explain return values in depth since there's no output schema and the value proposition is clear. Could add what 'no crashes' looks like, but not critical for a stats 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% with a single 'serial' parameter already documented as 'Android device serial (from device_list)'. The description adds context by clarifying the data source (DropBoxManager) and output granularity, which enriches the single parameter's purpose beyond the schema. With only 1 parameter and full schema coverage, baseline is 3; the DropBoxManager sourcing detail justifies a slight bump.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships 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 this aggregates crash/ANR/native-crash analytics with specific breakdowns (total, per-process, per-type, per-day timeline). It distinguishes itself explicitly from android_crash_detail, the sibling for individual entries. Very specific verb+resource+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 names android_crash_detail as the alternative for individual entries, giving clear 'when vs when-not' guidance. However, it doesn't describe when to prefer this over ios_crash_analytics or specify any filter or selection context beyond device serial.

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`)
Behavior4/5

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

No annotations are provided, so the description carries the sole burden. It discloses that this is a read operation returning 'full raw content'. It doesn't state output size, encoding, or whether the entry can be very large, but for a fetch-by-id read tool with no destructive side effects, the disclosure is reasonably 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?

A single, dense sentence that conveys the resource, scope, and parameter provenance with zero wasted words. Perfectly front-loaded and concise.

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 2 simple string parameters at 100% schema coverage and no output schema, this is a straightforward detail-fetch tool. The description is complete for its simplicity. It could mention return format but this is a low-complexity tool, so the adequacy is high. A slight ding for not describing what the raw content looks like.

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 both parameters described. The description adds value by explaining the id comes from android_crash_analytics and serial comes from `device_list`, which carries provenance meaning beyond the schema's standalone descriptions. This enriches 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 ('get' implied) with a clear resource ('full raw content of one crash/ANR/tombstone entry') and how to address it (by id from android_crash_analytics). It distinguishes itself from android_crash_analytics (which provides the list) and from the sibling ios_crash_detail. Clear 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 usage context: this is the detail-fetch complement to android_crash_analytics, which produces the ids to feed here. It names the source ('by id from android_crash_analytics'), providing clear context. It doesn't explicitly state when NOT to use it, but the pairing with the analytics list tool is clear enough.

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.
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 behavioral burden and it delivers richly. It discloses the live-window race condition, the exactly-once cleanup semantics (throttle/blockUrls/extraHeaders cleared in a finally block), return format details (records vs HAR, per-body 10000-char cap, total 200000-char cap with bodiesOmitted), the limit-based record capping behavior (total/returned when dropped), and the throttle semantics including exact latency/bandwidth figures. This is far more transparent than the typical 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 key caveat (live-window), then flows logically through return format, body handling, throttle, blocking, and limits. Every sentence adds operational value. It's a long single paragraph, so it loses a point for not breaking into scannable sections, but given the tool's complexity (13 params, multiple modes, many caps) the length is justified and there's no waste.

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 13-parameter tool with no output schema and no annotations, this description is remarkably complete. It documents return record shape, all caps (per-body, total, limit), the throttle values with exact figures, blockUrls wildcard semantics, extraHeaders session-scoping rationale, and the format="har" alternative. There is no output schema so the description must convey the return shape, and it does so thoroughly. This is near the ceiling for what a description can achieve.

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 genuine value beyond the schema: it explains the interplay between triggerJs and the live window (race avoidance), clarifes that includeBodies has a default of true while the schema doesn't state a default, and explains the bodiesOmitted mechanism tied to total caps. The main shortcoming is that with 13 params the description cannot deep-dive each, but the schema itself is already rich so this 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 opens with a specific verb+resource+scope: 'Capture network requests made by a page running on the device over a time window via CDP.' It clearly states it enables the Network domain and collects specific event types (request/response/loadingFinished/loadingFailed). This is immediately differentiated from siblings like device_network_info (device-level info) and ios_safari_capture_network (iOS targeting) via the 'device' and page-based (CDP) framing.

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?

Exceptionally explicit on when/how to use: it distinguishes the LIVE-WINDOW collector behavior and instructs to pass triggerJs inside the window rather than triggering from a separate tool call to avoid racing the attach and getting 0 records. It also names the exact default window (5000ms), maximum (30000ms), and the pageId auto-selection note. The triggerJs description even gives concrete examples like "location.reload()" and "fetch('/api/x')", which is strong operational guidance.

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)
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 discloses the return shape (`{ closed, pageId }`) and reconciles the failure case (`closed:false if no such page`). However, it doesn't mention side effects like whether closing a page terminates the browser or affects other tabs, nor does it mention any permission or session requirements. A 3 is fair since it covers outcome but not potential 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.

Conciseness4/5

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

Three sentences, compact and front-loaded with the core action in the first sentence. The CDP implementation detail, use case, source reference, and return shape are all packed efficiently. Minor redundancy between 'close' in the first sentence and 'clean up stale tabs' — but this adds context rather than waste. Very tight and 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?

The tool is a simple close operation with 3 params, no output schema, and no nested objects. The description covers purpose, usage context, source of the key parameter, and return shape including the failure case. For a simple closure tool this is essentially complete — the only gap is side-effect disclosure (e.g., whether it crashes the browser 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 three parameters (udid, pageId, socket). The description adds context for pageId ('from android_devtools_list_pages') which slightly augments the schema's phrasing. Baseline 3 is appropriate when the schema handles parameter documentation; the description's added value is marginal.

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

Purpose5/5

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

The description has a specific verb+resource: 'Close a debuggable tab/page on the device by pageId'. It clearly states the mechanism (CDP /json/close) and the use case ('clean up stale tabs'). It distinguishes from siblings like android_devtools_list_pages by explicitly referencing it as the source of pageId, and android_devtools_navigate is clearly a different 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?

The description gives clear when-to-use guidance: 'Use to clean up stale tabs that accumulate across sessions'. It also points to the prerequisite source of pageId via android_devtools_list_pages. It doesn't explicitly state when NOT to use it (e.g., which alternatives like navigate exist for closing pages), but the context is sufficiently clear.

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)
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 live-window attach behavior, the ~1-3s attach latency, the race condition, and the auto-selection of visible/active page when pageId is omitted. Missing would be explicit statements about what happens with zero events collected (empty array?) or any side effects, but the disclosed behavior is substantial and directly relevant to correct usage.

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

Conciseness5/5

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

Well-organized paragraph that front-loads the core purpose before diving into live-window caveats. The critical spatial warning is highlighted in caps ('LIVE-WINDOW collector'), and every sentence earns its place — return format, event types, defaults, pageId auto-selection. 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 time-windowed event collector with no output schema, the description thoroughly covers the attach/race behavior, default limits, triggerJs mechanism, and page selection. The tricky live-window semantics are fully explained, which is precisely the kind of context an agent needs to use this effectively. No significant gaps remain for correct usage.

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 beyond the schema: it explains the triggerJs mechanics ('runs INSIDE the collection window right after the listeners attach ... race-free') with concrete examples, and clarifies the durationMs default/max. The triggerJs semantics in particular are materially enhanced beyond the bare 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?

Specific verb+resource: 'Collect console logs, exceptions, and log entries from a page running on the device for a time window.' Clearly distinguishes from siblings like android_devtools_capture_network (network) and ios_safari_console_logs (iOS platform). States the exact protocol mechanisms (enables Runtime and Log domains, listens for specific events) and the return shape.

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 explains the live-window behavior ('only captures events fired AFTER it attaches') and warns about the race condition when triggering from a separate tool call ('silently missed'). Provides a concrete remedy (pass triggerJs to run inside the window) and documents the default/maximum window. This is model-grade usage guidance for a tool with a subtle temporal gotcha.

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)
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. It discloses the CDP mechanism (Network.getCookies), the fallback to document.cookie with its limitation (non-httpOnly only), and the pageId auto-selection behavior. This gives the agent a solid behavioral model. It could add what the return format looks like, but given no output schema exists, this is a reasonable effort.

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, each adding distinct value: what it does + attributes returned, the use case, the fallback and parameter default. No fluff. Slight room for improvement — the CDP and fallback could be separated more clearly — but overall tight and well front-loaded with the core purpose.

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

Completeness4/5

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

No output schema exists, so the description must convey the return content, which it does by listing the cookie attributes returned. It covers the fallback, auto-selection, and the socket default. For a read-only cookie-fetch tool with 3 mostly standard params, this is reasonably complete. Could mention pagination or large cookie set handling, but not essential.

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). The description adds meaningful context on pageId ('omit to auto-select the visible/active page') which goes beyond the schema's 'auto-picked when omitted'. But udid and socket are standard and the description adds little beyond what the schema conveys. 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 the tool gets cookies for a page via CDP Network.getCookies, listing specific cookie attributes (httpOnly/secure/sameSite/domain/path/expiry). It distinguishes from the general ios_safari_cookies sibling by being Android-specific and explicitly noting httpOnly inclusion. However, it doesn't explicitly name sibling alternatives or contrast with cookie-setting tools, and 'Get cookies' is somewhat generic.

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 useful usage context — 'useful for debugging auth/session state' — and tells the agent that omitting pageId auto-selects the visible/active page. It also explains the fallback behavior to document.cookie. However, it doesn't explicitly state when NOT to use this vs alternatives like ios_safari_cookies, device_get_browser_url, or webpage_clear_cookies/set_cookie.

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, a unique-ish CSS selector, an XPath, bounding box {x,y,w,h} and a visibility flag. Set includeStyles=true to also return a curated set of computed styles per element. Far more compact and useful than raw outer HTML. 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)
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 of behavioral disclosure. It reveals the default element selection strategy (interactive/meaningful vs all), the includeStyles opt-in behavior, page auto-selection, and the 'unique-ish' caveat on CSS selectors (honest about non-guaranteed uniqueness). It doesn't mention performance or limits beyond the schema's default 150.

Agents need to know what a tool does to the world before 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: first states core purpose and output fields, second covers the optional styles extension, third contrasts with raw HTML and explains pageId auto-selection. Every sentence adds value with zero filler or redundancy. Efficient and 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 6-parameter extraction tool with no output schema, the description is quite complete: it details the output shape, selector scoping, styles opt-in, and page auto-selection. The only minor gap is lack of guidance on limit behavior or what 'interactive/meaningful' precisely includes, but the trade-off between conciseness and completeness is well balanced.

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 meaningful context beyond the schema: it explains what 'selector' does when provided (scopes extraction), when includeStyles should be set (to get computed styles), and clarifies pageId's auto-select behavior. This is genuinely additive over the bare schema parameter names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships 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 purpose: extract locator-friendly element data for building Playwright/Selenium locators. It specifies the exact verb (extract), resource (element data from a device page), and enumerates the returned fields precisely. This clearly distinguishes it from siblings like android_devtools_get_dom (raw DOM), device_find_element (single element lookup), and ios_safari_elements (iOS 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?

The description explains the default behavior (interactive/meaningful elements, or those matching selector) and the optional includeStyles enhancement. It notes 'Omit pageId to auto-select the visible/active page' which helps usage. It doesn't explicitly state when NOT to use it vs alternatives like device_find_element or android_devtools_get_dom, but the focus on locator-building is a strong context cue.

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 and any exception details. Omit pageId to auto-select the visible/active page.

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)
Behavior4/5

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

Discloses the mechanism ('Enables Runtime, then calls Runtime.evaluate'), return behavior ('Returns the result value and any exception details'), and the auto-selection behavior. With no annotations provided, the description carries the burden and handles it reasonably well, though it doesn't mention side effects or whether the computed expression may have persistent effects on the 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?

Three tight sentences covering purpose, mechanism, return, and usage—zero wasted words. Front-loaded with the primary action and 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?

For an evaluation tool with 100% schema coverage and no output schema, the description adequately covers purpose, mechanism, and parameter intent. The mentions of Runtime.evaluate and exception details give the agent a good mental model. Could touch on error-handling edge cases (e.g., non-serializable results), but generally 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 all six parameters are documented with descriptions. The description adds the semantic context that pageId comes from android_devtools_list_pages and can be auto-picked when omitted, which adds value beyond the schema. However, most parameter meaning is already fully captured in 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?

Clear verb+resource: 'Evaluate a JavaScript expression in the context of a page running on the device via CDP.' Distinguishes from siblings—it's specific to Android/CDP, and 'Omit pageId to auto-select the visible/active page' further clarifies its behavior versus alternatives like ios_safari_evaluate on iOS or web_evaluate for web 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?

Explains it operates via CDP on a device page and auto-selects the active page when pageId is omitted. Referencing android_devtools_list_pages as the source for pageId provides context, though it doesn't explicitly state when NOT to use it vs. alternatives like web_evaluate or session_execute.

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
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 100,000 character output cap, the truncation notice appended at the limit, and the auto-page-selection behavior. For element selection it notes it returns null when no match. These are useful 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?

Two sentences, tightly written with zero filler. Every clause carries informative value: retrieval mechanism (CDP), element-targeting capability, output cap with truncation notice, and auto-selection behavior. Front-loaded with the core purpose.

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

Completeness4/5

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

Given there's no output schema, the description appropriately notes the output cap and truncation behavior, giving some sense of what to expect on return. The tool is moderately complex (4 params), and while no return-format specifics are given beyond cap/truncation, the behavior is adequately conveyed for an HTML-fetching 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 documents all four parameters. The description adds clarity on pageId auto-selection and selector returning outerHTML of first match or null, which enriches some params. However, the description largely restates what the schema already conveys for most parameters.

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

Purpose4/5

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

The description clearly states the tool gets the outer HTML of a page or CSS-selector-matched element via CDP, with a specific verb+resource. It doesn't explicitly distinguish from siblings like android_devtools_elements or device_page_source, but the scope (page or element outer HTML on device via CDP) is clear enough.

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 (via CDP for page/element HTML) and explains the pageId auto-selection behavior. However, it doesn't explicitly state when-not-to-use or name alternatives such as device_page_source or android_devtools_elements, though the distinction is reasonably implied.

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 via the Chrome DevTools Protocol (CDP). Returns the id, type, title, url, and visibility of each target (visible is best-effort — Chrome often reports null for regular tabs). Stale tabs accumulate across sessions; close unwanted ones with android_devtools_close_page. Pass a pageId from this list to other android_devtools_* tools to target a specific page.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID)
socketNoAbstract unix socket name (default: chrome_devtools_remote)
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 of behavioral disclosure. The description transparently discloses several behavioral traits: the best-effort/null visibility reporting for regular tabs, the fact that stale tabs accumulate and persist across sessions, and the recommendation to use android_devtools_close_page to clean up. It also specifies exactly what the tool returns (id, type, title, url, visibility). This is solid behavioral transparency for a read-only listing 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 a compact multi-sentence block covering purpose, return fields, a known caveat (null visibility), cross-session accumulation behavior, and cross-tool integration. Every sentence earns its place with distinct value: purpose+returns, caveat, accumulation warning, and forward reference to sibling. Efficient and front-loaded with the core purpose 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?

Schema coverage is 100% so both parameters (udid, socket) are documented structurally. No output schema exists, and the description explicitly identifies the return fields (id, type, title, url, visibility), which compensates for the absent output schema. It also covers device-targeting semantics (udid) and the socket default. For a listing tool with two simple documented params, this is 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 both parameters are already documented in the input schema (udid as device serial, socket as abstract unix socket name with default). The description adds marginal value by referencing that pageId from this list feeds other android_devtools_* tools, which clarifies downstream usage but doesn't add 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 uses a specific verb and resource: 'List debuggable pages/targets available on the device via CDP' and specifies the exact return fields. It distinguishes itself from the many sibling android_devtools_* tools by clarifying it's the page-listing entry point whose output (pageId) feeds other tools, clearly separating it from android_devtools_close_page and other target-specific 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 guidance: it warns that stale tabs accumulate across sessions, directs users to use android_devtools_close_page to clean up unwanted ones, notes visibility is best-effort/null for regular tabs (managing expectations), and explicitly states to pass a pageId from this list to other android_devtools_* tools to target a page. This gives concrete when-to-use and workflow context, though it doesn't explicitly state when NOT to use it in favor of an alternative listing tool.

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_mitm_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"}
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")
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 states routes apply immediately and survive navigation, that only web content is intercepted, native code is never intercepted, no device-wide changes are made, and no certificate is installed. This is rich, non-obvious context beyond a simple 'add' 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, each earning its place: it states the action and modes, explains the web-content-only scope, and names the alternative tool. It is front-loaded and free of 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?

The description thoroughly covers behavior, scope, and alternatives, and the schema richly documents parameters. However, because there is no output schema, the description does not state what the tool returns (e.g., the created route with id), which is a minor gap for an agent to understand the tool's output.

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 14 parameters are documented in the schema (100% coverage), so the baseline is 3. The description reinforces the semantics of mode and the update-in-place behavior of id, but it does not add parameter-level information 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 opens with 'Add (or update in place...) a mock/abort rule for Chrome/WebView requests on this device,' clearly specifying the action, resource, and scope. It also explains the two modes (mock and abort), and explicitly distinguishes itself from android_mitm_mock_add by noting the web-content-only scope.

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 alternatives: 'For requests made by native app code use android_mitm_mock_add instead.' It also clarifies that this tool is for Chrome/WebView requests, and clearly states what it does NOT do (native app code), helping an agent 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.

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)
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 destructive behavior (removes all routes) and the restorative effect (un-arms interception, normal networking). This is sufficient for a cleanup tool, though it doesn't mention edge cases like calling when no routes 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 short sentences, action first, no fluff. Every word 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?

The tool is simple (one param, no output schema), and the description fully covers what it does, when to use it, and the expected outcome. No missing critical 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 has one parameter (udid) with full description coverage (100%). The tool description adds no extra parameter meaning, 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 a specific action: 'Remove ALL Chrome/WebView routes for this device and un-arm interception.' Clearly distinguishes from siblings like mock_remove (which likely removes a single route) by emphasizing 'ALL' and full cleanup.

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 states when to use: 'Call this when finished' and describes the outcome ('restores completely normal networking'). Does not name alternatives like mock_remove, but the context is clear enough for a teardown tool.

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)
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 excels: it discloses that no certificate is installed, nothing device-wide is changed, and the effect is scoped to the page. It also explains ordering ('first match wins'). This provides rich behavioral context beyond what the schema offers.

Agents need to know what a tool does to the world before 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 first states the purpose and ordering, the second and third define scope and side effects. No redundant or vague wording.

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 (one parameter, no output schema), the description covers all needed context: what is listed, match order, scope boundaries, and safety guarantees. It is complete for 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?

Schema description coverage is 100% (the udid parameter has a description). The tool description does not add any additional parameter semantics, but the baseline of 3 applies 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?

The description clearly states the tool 'List the Chrome/WebView mock/abort routes currently registered for this device, in match order' — a specific verb and resource. It explicitly differentiates from native app interception tools by stating 'WEB CONTENT ONLY', which distinguishes it from android_mitm_mock_list and 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 provides explicit when-not guidance: 'Requests made by native app code are NOT intercepted and never will be by this tool.' It also clarifies the scope to browser/WebView pages, implying that for native app traffic, a different tool (e.g., MITM mock list) should be used. This is strong usage direction.

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)
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 a key side effect: removing the last route automatically un-arms the device, preventing unnecessary traffic pausing. It does not cover error cases (e.g., non-existent id), but provides meaningful behavioral context beyond the basic 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 sentences, zero fluff. The first sentence states the action, and the second explains a critical side effect. Appropriate length and front-loaded with the core purpose.

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

Completeness4/5

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

For a simple two-param removal tool with no output schema, the description covers the function, the resource scope (Chrome/WebView), and the un-arm side effect. It also implicitly connects to mock_list via the id schema, making it sufficiently complete. Minor gap: no mention of what happens if the route does not exist.

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 clear descriptions: 'id' references '*_mock_list' for provenance, and 'udid' clarifies it can be Android serial or iOS UDID, which is helpful given the 'android' prefix. The description adds no redundant parameter details, but the 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 uses a specific verb ('Remove') and resource ('one Chrome/WebView route by id'), clearly distinguishing it from sibling tools like mock_clear (which removes all) and mock_add/list/status. The singular scope ('one') emphasizes its selective role.

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 (removing a specific route) and adds important context about automatic un-arming when the last route is removed, warning against leaving traffic paused unnecessarily. It does not explicitly name alternatives, but the singular scope makes it obvious that clear is for bulk removal.

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)
Behavior4/5

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

With no annotations, the description carries full disclosure. It explains the kind of information returned (status, target, routes, counters) and adds a practical behavioral note about interpreting mocked: 0 as a sign of a non-matching route. It does not explicitly state that the operation has no side effects, but the 'report' framing implies a read-only purpose. Overall, it gives good context beyond a bare status 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 focused sentences. The first sentence front-loads the core purpose, and the second adds actionable guidance. No redundant words or filler, making it extremely 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 simple status tool with no output schema, the description fully covers what the user can expect: armed state, target, routes, and counters. It also explains the meaning of a zero counter, giving enough context for interpretation. The single parameter is already well-documented, so 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% for the single udid parameter, and the schema already provides a description. The tool description adds no extra parameter semantics, which is acceptable because the schema carries the burden. 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 ('Report') and clearly identifies the resource (Chrome/WebView interception status). It enumerates the exact elements reported (armed state, page target, active routes, hit counters), which distinguishes it from sibling mock status tools (e.g., ios_safari_mock_status, webpage_mock_status) by referencing Chrome/WebView, which is Android-specific.

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 context on when to use the tool: to check whether interception is armed and to confirm mocks are firing via counters. The guidance 'Check the counters to confirm a mock is actually firing' implies the use case, but it does not explicitly mention alternatives or when not to use it, 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.

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.

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)
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 valuable behavioral details: finalUrl is only non-null when waitMs>0, redirects become visible, pageId auto-selection, event waiting semantics. It also lists return fields (url, finalUrl, loaderId, errorText, frameStoppedLoading), which is useful given no output schema. This goes beyond a minimal 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?

The description is a single, dense paragraph that front-loads the core action and then details return values and behavior. Every sentence earns its place — there is no filler or repetition of the schema. 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?

This is a navigation tool with 5 parameters, no output schema, and no annotations. The description covers the return value shape, the async/wait semantics, the auto-selection nuance, and caller-relevant caveats (finalUrl behavior). Given the tool's complexity and the absence of structured output/annotations, the description is 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%, giving the description a baseline of 3. The description adds value on top: it explains the behavioral implication of waitMs (waiting for Page.frameStoppedLoading) and clarifies pageId's auto-selection behavior. It doesn't fully describe every parameter's format but the schema already documents them, so the description enriches meaning 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?

Description states a specific verb (navigate) plus the resource (a page on the device) and mechanism (CDP Page.navigate). It clearly distinguishes from siblings like device_navigate_url, ios_navigate_url, and web_navigate by being the android DevTools/CDP-specific variant. The scope is precise.

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 (navigate a device page via CDP) and clarifies the waitMs behavior and pageId auto-selection. However, it does not explicitly contrast against sibling tools like device_navigate_url or web_navigate, nor state when NOT to use it. The context is clear but lacks explicit exclusions/alternatives.

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

android_fpsAInspect

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`)
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 of behavioral disclosure. It clearly states this is a read operation that extracts FPS/jank data via dumpsys gfxinfo and lists the metrics returned (total/janky frames, jank %, frame-time percentiles, missed vsyncs). However, it doesn't disclose whether metrics are cumulative or session-based, whether a running app is required, or if the app needs to be foregrounded. For a no-annotation tool, the description gives a reasonable but imperfect 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?

Single sentence, dense but clear, listing the data source and all metric categories. Every element 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?

The tool has only 2 parameters fully documented in the schema (100% coverage), no output schema, and no annotations. The description tells the agent what stats it produces from a specific command, which is sufficient for a query tool. It could mention prerequisites (e.g., app must be installed/running) but overall covers the essential context for a metrics-read 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% — both serial and pkg come with descriptions referencing device_list for serial and giving an example package name. The description adds the metric details but doesn't expand parameter semantics further. Baseline 3 is appropriate given 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+resource ('FPS / jank stats for a package via dumpsys gfxinfo') and enumerates the exact metrics produced. It differentiates from siblings like android_app_launch_time and ios_fps by naming the command source and metric set. Clear purpose that distinguishes it effectively.

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

Usage Guidelines3/5

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

No explicit guidance on when to use this tool vs android_performance_snapshot, android_performance_record_start/stop, or ios_fps. It implicitly conveys it's for FPS/jank measurement, which suggests use cases, but it doesn't name alternatives or exclusion criteria. Adequate but not explicit.

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

android_mitm_flowsAInspect

Snapshot recent DECRYPTED HTTPS flows (request/response) captured since android_mitm_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.
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 discloses that bodies are truncated (each capped at 32000 chars), that includeBodies defaults to false, and that flows are decrypted HTTPS - useful context. It does not state whether reading flows is destructive or requires auth, but the read-only nature is strongly implied by 'Snapshot', which is reasonable.

Agents need to know what a tool does to the world before 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 wasted words. The description packs the flow fields, optional behaviors, and filtering options into a compact, immediately-parsable format. Every sentence serves a distinct purpose: what it returns, what includeBodies does, and what filters/limit exist.

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/snapshot tool with 5 documented params and 100% schema coverage, the description is largely complete. It explains the flow data structure, truncation, and filters. Minor gaps: it doesn't explicitly note this is the counterpart of android_mitm_mock_* for verification purposes, and no output schema exists to document exact return shape, slightly undermining completeness relative to its read-heavy use case.

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 documents all 5 parameters. The description adds value by explaining the truncation behavior (bodies capped at 32000 chars), the default for limit (100), and clarifying what 'onlyErrors' means (5xx / connection-error). These augment rather than repeat the schema definitions, exceeding 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 the verb+resource ('Snapshot recent DECRYPTED HTTPS flows') and enumerates the exact fields each flow contains. It distinguishes from siblings like android_mitm_start/stop/status by being the retrieval/read operation for captured traffic, and notably shares a parallel android_mitm_start reference tying it to the capture lifecycle.

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 implicitly ties usage to having started capture ('captured since android_mitm_start'), establishing the prerequisite context. It names filtering options (urlSubstring, onlyErrors, includeBodies) and the limit cap, though it does not explicitly exclude alternatives or state when NOT to use it versus related devtools/mock tools.

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

android_mitm_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 mitmproxy — 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_mitm_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")
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 admirably. It discloses that the request never reaches the real server, that abort mode kills the connection so the app sees a network failure, that routes are stored per-device, take effect live with no restart needed, and the critical limitation that certificate-pinned apps cannot be intercepted at all (so a route targeting pinned traffic will never match). This sets accurate expectations around mutation scope and failure cases. Slightly more detail on the in-place update semantics could push this higher.

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 behavior before diving into modes and prerequisites. Every sentence contributes technical value—no filler. It's on the longer side but justified given the number of important behavioral caveats (per-device storage, live effect, pinned-app limitation). Could be slightly restructured into scannable sentences, but it's appropriately compact for 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?

This is a 12-parameter tool with nested objects, enums, and potential mutation consequences, yet the description covers the critical behavior (mock vs abort, matching semantics, per-device routing, live application, TLS capture prerequisite, pinned-app limitation). The schema already documents each parameter thoroughly at 100% coverage, and the description adds the behavioral layer on top. For a complex tool with no output schema and no annotations, this is as complete as one could 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 baseline is 3, but the description adds value by explaining the two modes ('mock' returns given status/headers/body; 'abort' kills the connection) and the match semantics ('URL pattern to match against the request's full URL'). It also clarifies the 'id' param behavior ('update in place, if id matches an existing route'). This is helpful context beyond what the schema provides for the mode and id 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 clearly states the tool adds/updates a mock/abort rule that short-circuits HTTPS requests inside mitmproxy, distinguishing mode 'mock' from mode 'abort' with specific behaviors. It differentiates from siblings like android_mitm_mock_list and android_mitm_mock_remove by explicitly naming the operation ('Add or update in place'). The verb+resource+scope ('Add mock/abort rule for mitmproxy on a device') is specific and 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?

The description gives explicit prerequisites ('Requires TLS capture to already be running on this device (android_mitm_start)') and states that routes take effect live without restart. It explains when routes apply ('short-circuits future matching HTTPS requests') and names the alternative tool for capture startup. However, it doesn't explicitly contrast with mock_list/mock_remove or explain when to prefer one mode over another beyond the inherent semantics, so it's strong but not fully exhaustive.

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

android_mitm_mock_listAInspect

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

ParametersJSON Schema
NameRequiredDescriptionDefault
serialYesAndroid device serial (adb serial)
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. 'List' implies a read-only operation, which is reasonably clear. The description doesn't detail return format, whether it needs an active MITM session first, or whether abort routes are distinct from mock routes in output. It's adequate for a list operation but doesn't add rich 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?

A single concise sentence that states the purpose and cross-references the companion tool. Zero wasted words, no redundant information. Excellent conciseness.

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 list operation with one well-documented parameter, this is nearly complete. However, given the sibling tool android_mitm_mock_add exists and MITM lifecycle tools (start/stop/status) are present, the description could clarify whether MITM must be active first and what an empty result looks like. It's adequate for the tool's simplicity but leaves minor workflow ambiguity.

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 has 100% coverage documenting 'serial' as the Android device adb serial. The description adds no additional parameter semantics beyond what the schema already documents. Per guidelines, baseline 3 applies 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.

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 mock/abort routes currently configured for a device. The verb 'List' is specific, and 'mock/abort routes' identifies the resource. It distinguishes from siblings like android_mitm_mock_add/remove, though its purpose is implied by naming convention rather than explicit contrast with all siblings.

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 says 'currently configured for this device' which implies the tool reflects current mock state on the device. It cross-references android_mitm_mock_add, giving some context on the related workflow. However, it doesn't explicitly state when to use this vs alternatives, when mock routes would be empty, or that it requires an active MITM session (a likely prerequisite given sibling android_mitm_start/stop tools).

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

android_mitm_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_mitm_mock_add or android_mitm_mock_list)
allNoRemove every route configured for this device instead of a single one
serialYesAndroid device serial (adb serial)
Behavior3/5

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

No annotations are provided, so the description carries some burden. It discloses that removal is by id or all, and that it returns the resulting route list. However, it doesn't disclose whether removing all is destructive/irreversible, whether there are dependencies with android_mitm_start/stop, or handle unclear cases like passing both id and all simultaneously.

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?

Two sentences, front-loaded with the primary action, then clarifies the dual modes and the return value. Every sentence earns its place. Slightly more could be added about the id source (already covered in the schema), so the description is appropriately minimal.

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 behavior (remove one or all routes) and the return value. However, there's no output schema and no annotations, so it could add more context about edge cases (e.g., what happens if id doesn't exist, whether all and id conflict, whether removal affects the running mitm session). For a tool with minimal structured metadata, the description is adequate but leaves some ambiguity.

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 three parameters already have descriptions in the schema. The description itself references the id coming from android_mitm_mock_add or android_mitm_mock_list, which adds useful provenance context beyond the schema's generic description. This slightly elevates above baseline, but no additional detail on parameter format or validation is 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 uses a specific verb+resource combination: 'Remove one mock/abort route by id, or every route on this device when all is true.' It clearly distinguishes between the two modes of operation and identifies the resource affected. It differentiates from sibling tools (android_mitm_mock_add, android_mitm_mock_list) by focusing on removal.

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 it (when you want to remove a mock/abort route) but doesn't explicitly name alternatives or provide exclusions. There's no guidance on when to use this vs android_mitm_stop, which could be confused as a way to tear down mock infrastructure. The 'Returns the resulting route list' hint gives some usage context but no explicit 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.

android_mitm_startAInspect

Start TLS inspection on an Android device: brings up a per-device mitmproxy 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_mitm_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)
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 and does so well. It discloses the two install modes (dpc vs manual), the silent vs interactive behavior, and the critical limitation that certificate-pinned apps won't decrypt. It doesn't mention whether the proxy/CA changes are reversible or cleanup behavior, and doesn't describe rate limits or duration, leaving a small gap.

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 information-rich with no wasted words, but it runs long (multiple sentences with parentheticals and conditional logic). It's front-loaded with the core purpose and then layers on conditional behavior and caveats. The technical density is justified given the tool's complexity, though the parenthetical-heavy style is slightly harder to parse 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 tool with one param, no output schema, no annotations, and moderate complexity, the description covers the purpose, the conditional modes, the prerequisites, the limitation (pinning), and the follow-up tool to read flows. It's missing cleanup/reversibility notes and doesn't explain what 'start' returns (though no output schema exists), but given the tool's complexity this 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 coverage is 100% with a single 'serial' parameter clearly documented as 'Android device serial (adb serial)'. The description adds the context that serial targets the specific device for a per-device mitmproxy, but doesn't add deep semantic value beyond what the schema provides since there's only the one self-evident parameter. 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 purpose: 'Start TLS inspection on an Android device' with specific verb+resource. It distinguishes from sibling tools by contrasting with Chrome DevTools ('works for native apps too, unlike Chrome DevTools') and referencing the related android_mitm_flows for reading captured traffic. It also distinguishes from ios_mitm_start siblings clearly.

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 conditional guidance: it explains that when com.robotactions.dpc is Device Owner, the proxy AND CA are set silently (installMode 'dpc'), while otherwise it falls back to adb global proxy (installMode 'manual') requiring user cert trust. It also explicitly states the prerequisite that the app must trust user certificates and that certificate-pinned apps will not decrypt, and references the follow-up tool android_mitm_flows.

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

android_mitm_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)
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. The description reveals it reports three pieces of status information (running state, proxy mode, buffered flow count), which gives useful behavioral context. However, it doesn't address whether this is read-only, whether it requires MITM to be started, or what the response format is. For a presumably read-only status query, the lack of richer context is a gap but the description does convey the core 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 a single, well-formed sentence that front-loads the purpose and enumerates the three reported data points concisely. Zero waste, every element 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?

With a single documented parameter, no output schema, and no annotations, the description covers the basic query intent. However, it doesn't specify the output format/structure of the report, whether the tool works only when MITM is active, or how to interpret the proxy mode values. For a moderately simple status-read tool, this is adequate but leaves some gaps for an agent deciding how to consume 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?

Schema description coverage is 100% (the single 'serial' parameter is documented as 'Android device serial (adb serial)'). The description doesn't add parameter detail beyond the schema, but with only one fully-documented parameter, the baseline of 3 is appropriate. The description conveys the tool's context (per-device status) but adds no extra parameter semantics.

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 what the tool reports: TLS inspection running status, proxy mode (dpc/manual), and buffered flow count. It distinguishes from siblings like android_mitm_start/stop which control the feature, while android_mitm_flows handles the actual flows. The verb 'Report' plus the specific data points makes the purpose 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?

The description implies this is a status/read operation useful when MITM is active, and its sibling ecosystem (android_mitm_start, android_mitm_stop, android_mitm_flows) provides context. However, no explicit when-to-use guidance or exclusion of alternatives is given, leaving the agent to infer based on the sibling names.

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

android_mitm_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 mitmproxy 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)
Behavior5/5

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

With no annotations provided, the description carries the full transparency burden, and it delivers strongly. It explains the multi-consumer reference counting behavior, specifies exactly what happens when all consumers stop (proxy killed, device proxy/CA cleared, buffered flows discarded), and what happens when others remain (left running, stillRunning: true). The conditional destructive behavior is fully disclosed without any 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 two sentences that pack the essential behavioral contract: consumer scoping, conditional keep-alive behavior, stillRunning flag, and full teardown semantics. Every clause earns its place — no filler, no redundancy with schema, and information-dense 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?

The tool has only one parameter (fully covered by schema), no output schema, and no annotations — so the description carries full explanatory weight, which it does excellently. It fully covers the stateful multi-consumer semantics, the teardown effects, and the stillRunning flag in the response. For a tool of this complexity, the description is 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 single 'serial' parameter has 100% schema coverage with a clear description ('Android device serial (adb serial)'). The tool description doesn't add much beyond the schema, but with only one well-documented parameter and full coverage, the schema does the heavy lifting — matching the baseline 3. No additional format or validation info is provided in the description, but none is critically 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 tool stops TLS inspection for an Android device, with the critical scoping detail 'from THIS (AI) consumer only.' This distinguishes it from a global teardown and clearly identifies the verb (stop), resource (TLS inspection on Android), and scope. It differentiates from siblings like android_mitm_start and ios_mitm_stop by being Android-specific and consumer-scoped.

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 implicitly communicates when to use it (to stop this agent's TLS capture), and it clarifies the conditional behavior when other consumers have capture open (stillRunning: true). However, it doesn't explicitly name the sibling alternative tools or state when NOT to use it vs. something like android_mitm_status to check state first. The multi-consumer behavior is clearly explained but exclusions/alternatives aren't enumerated.

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 scrcpy session. Returns a single JPEG frame decoded from the live video stream — no fresh adb screencap 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 (scrcpy runs maxSize:0), 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)
Behavior4/5

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

Discloses key behavioral traits beyond schema: it reuses an already-running scrcpy session (no fresh adb screencap), captures at physical device resolution with maxSize:0, returns image-only without page-source bundling. With no annotations provided, the description carries the full burden and covers mutation-safe, performance, and resolution semantics well. Doesn't mention failure modes or auth, but is strong for a 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.

Conciseness4/5

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

Well-organized and front-loaded with the core purpose first, then usage guidance, then technical caveats. Slightly long (multiple sentences) but every sentence earns its place — each adds distinct operational value (performance, coordinate invariant, when-not-to-use).

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 screenshot tool with no output schema and no annotations, the description is remarkably complete: it explains the mechanism, performance benefit, coordinate-matching invariant, and clear boundary with the sibling tool. Nothing material is left unexplained.

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% (single udid param fully described in schema). The description adds the resolution invariant ('pixel positions match device_tap coords 1:1') which is valuable context beyond the schema, but doesn't explain the udid format any further. Baseline 3 with modest added value 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?

Description states a specific verb+resource: 'fast screenshot of an Android device via the ALREADY-RUNNING shared scrcpy session' returning a single JPEG frame. It clearly distinguishes from device_screenshot by highlighting the scrcpy session mechanism and naming the sibling explicitly.

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 when to use this ('routine per-action screen checks', 'default for iterating on a flow') AND when not to ('Reserve device_screenshot for when you need the bundled labeled-elements list or a full-fidelity image'), naming the alternative tool directly.

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

android_performance_record_startBInspect

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)
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 describes the start function but doesn't disclose details like how long recording runs, what happens when device disconnects, whether recordings accumulate if not stopped, data volume implications, or what the output/metrics look like. For a stateful start/stop pair with zero annotation coverage, 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.

Conciseness4/5

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

One well-structured sentence with a parenthetical analogy and a clear pairing reference to the stop counterpart. Efficient and front-loaded, though the analogy placement is slightly awkward mid-sentence.

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?

For a stateful paired tool with no annotations and no output schema, the description should explain what happens after starting (where does data go?), how to retrieve results, and implications of the intervalMs parameter. The reference to the stop sibling helps but leaves the recording lifecycle and result retrieval unexplained. The sibling stop tool name gives some closure but more is needed.

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%, covering pkg, serial, and intervalMs. The description adds context via the analogy and clarifies pkg focuses process filtering ('Focus processes containing this package'). The description doesn't repeat schema details but complements them modestly. Baseline 3 with slight bonus for the pkg clarification.

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 (Start) and resource (recording per-process CPU/memory over time), with a helpful screen-recording analogy. It distinguishes from android_performance_snapshot by emphasizing time-based recording. However, it doesn't explicitly distinguish from the ios_performance_record_start or android_performance_record_stop, though the name largely encapsulates this.

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

Usage Guidelines4/5

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

The description indicates this is for time-series metrics (like screen recording for metrics) and explicitly references stopping with android_performance_record_stop. The pkg parameter hints at focusing on specific processes. However, it doesn't specify when to prefer this over android_performance_snapshot or when recording would be inappropriate.

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

android_performance_record_stopBInspect

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
Behavior2/5

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

No annotations are provided, so the description carries full burden of behavioral disclosure. The description discloses the output shape (time-series, per-process avg/peak) but doesn't state what happens if called without an active session, whether stopping is destructive (loses recording), or how it interacts with sessionId validity. For a stateful stop operation with zero annotation coverage, 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.

Conciseness4/5

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

The description is a single, focused sentence that conveys the action and the output shape. It is efficient with no filler or redundant text. Could slightly expand on behavioral details, but as far as conciseness, it's well-structured and front-loaded.

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?

This is a stateful mutation tool (stops an ongoing recording) with no annotations and no output schema. The description tells what it returns but not the pre-conditions (active session required), failure behavior, or whether this terminates and frees resources. Given the stateful nature and lack of annotation support, the description should do more to be 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 single parameter sessionId is fully described ('Session id from android_performance_record_start') in the schema itself. The description adds dependency context by implying the session must come from a prior start call, which aligns with the schema's own description. Baseline 3 is appropriate since 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 states a clear verb+resource ('Stop a performance recording') and describes the return value (full time-series + per-process summary). It clearly distinguishes from android_performance_record_start and android_performance_snapshot. However, it doesn't explicitly disambiguate from sibling android_performance_record_stop (there's no such sibling, but the pairing with start is implicit).

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 must be called after android_performance_record_start by referencing 'Stop a performance recording,' but it does not explicitly state the prerequisite relationship or explain when to use it vs android_performance_snapshot (which could be an alternative for point-in-time metrics). Context implies usage but no explicit exclusions or alternatives are named.

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`)
Behavior2/5

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

No annotations are provided, so the description carries full burden of behavioral disclosure. It reveals the source tool (`top`), which is useful as it implies sampling at the moment of call (snapshot, not continuous). However, it does not disclose what the output format looks like, whether this is a passive read, typical latency, or behavior on multiple matching processes for pkg filter. For a read-only performance snapshot with no annotations, more detail would be 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?

A single, dense sentence that packs substantial information: the tool's purpose, the underlying mechanism (top), metrics captured (CPU%, MB), and both operational modes. Zero filler, every clause earns its place. Front-loaded with the primary action.

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 3-param tool with no output schema and no annotations, the description covers the essentials: what it does, how it does it, and the two modes. However, it doesn't document the output shape (agent doesn't know what result format to expect), doesn't address edge cases (e.g., no pkg match, topN behavior), and lacks detail on when this is preferable to the record_start/record_stop siblings for time-series measurement. Adequate but with clear gaps given zero annotation 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 description coverage is 100%, so the baseline is 3. The description adds value by clarifying the DEFAULT of topN (implied 15 is in the schema) and how pkg behaves ('filter to processes whose name contains this package' — substring matching, not exact match). The description's mention of 'Top-N by CPU, or one app via pkg' ties the parameters to the tool's two operational modes, adding context beyond the schema fields.

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+resource ('Snapshot' CPU%/memory via 'top') with two clear modes (Top-N by CPU or one app via pkg), distinguishing it from related siblings like android_fps and android_performance_record_start/stop which cover different metrics/durations. It clearly identifies the mechanism (top) and units (%, MB). Slight deduction for not explicitly differentiating from ios_performance_snapshot, though the 'Android device' qualifier handles this.

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 two usage scenarios (top-N aggregate snapshot vs filter to a single package) but doesn't explicitly state when to prefer this over alternatives like android_performance_record_start for continuous measurement. The parameter `serial` reference to `device_list` hints at a prerequisite but it's implied rather than explicit. No exclusions or when-not-to-use guidance given.

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)
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 covers key behavioral aspects: returns a short-lived, single-device URL, requires a human to open it in a browser, live transcoding to MJPEG. It doesn't mention how long 'short-lived' actually is or any auth/access constraints on the URL, but covers the essential delivery mechanism and purpose.

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 adding distinct value: purpose, output details, mechanism, and use case. It's slightly verbose with the transcoding sentence being a nice-technical detail rather than essential action guidance, but overall 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 single-parameter tool with no output schema and no annotations, the description covers the main things an agent needs: what it returns (a live URL), who consumes it (a human), how it differs (real-time vs screenshot), and when to use it (supervise agent actions on device). It could mention the URL's exact lifetime, but the description is quite complete for this simple 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 description coverage is 100%, so the schema already documents the udid parameter. The description doesn't add parameter-specific detail beyond what the schema provides, but there's only one parameter and its purpose (device identifier) is self-evident. Baseline 3 is appropriate and slightly above due to the clarity of the single parameter 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 uses a specific verb+resource: '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.' It clearly distinguishes from device_screenshot (one frame) and android_mjpeg_screenshot siblings, and communicates the live, human-viewable nature of the output.

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 states when to use this tool ('Use this to let a person supervise what the agent is doing on the device') and contrasts with device_screenshot for single-frame needs. It lacks explicit exclusion guidance for other streaming alternatives like android_mjpeg_screenshot or device_record_start, but the context of use is clearer than most sibling tools.

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
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 word 'delete' implies a destructive irreversible action, but the description doesn't confirm irreversibility, whether it affects installed apps on devices, or whether permissions are required. For a destructive operation with zero annotation coverage, more disclosure is warranted.

Agents need to know what a tool does to the world before 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 waste. Every word serves a purpose: what it does, what it deletes, and how to get the ID needed to invoke it. Nothing extraneous.

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 single-parameter destructive tool, the description is adequately aligned with the schema. However, given that it's a destructive operation with no annotations and no output schema, the description could enhance completeness by noting whether deletion is permanent or whether the file must be re-uploaded. The missing output schema means the agent doesn't know what the response looks like, and the description doesn't bridge that 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 coverage is 100% and the appId parameter is described as 'File ID from app_list,' which matches the description's guidance. The description adds the same information as the schema (use app_list), so it provides modest complementary value. With a single parameter fully documented in the schema, 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 the verb+resource: 'Delete an uploaded app file from the server.' This distinguishes it from siblings like app_upload, app_install, and app_list, which are clearly different operations. However, it doesn't mention the destructive nature beyond the word 'delete,' which is somewhat implied.

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 pointer to obtain the required ID: 'Use app_list to get the file ID.' This gives useful usage context. However, it doesn't explicitly state when NOT to use this tool or mention alternatives (e.g., device_uninstall_app for installed apps vs uploaded files).

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

app_installBInspect

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
Behavior3/5

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

No annotations are provided, so the description carries full behavioral disclosure burden. It discloses the install mechanism (APK via Android transport, IPA for iOS) but doesn't describe what happens on failure, whether prior uninstall is needed, permission requirements, or behavior when an app is already installed. For a mutating tool with zero annotation coverage, this is minimally 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.

Conciseness4/5

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

The description is compact (three sentences) and front-loaded with the core purpose. It efficiently covers platform differences and the dependency on app_list without unnecessary fluff. The format of each sentence 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 tool is a mutating operation with no annotations, no output schema, and complete schema coverage. The description covers the core install action, platform differences, and the required prerequisite step. However, it doesn't address failure modes, result/response expectations, or whether the device must be in a specific state. Adequate for a straightforward install tool but with 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 both parameters (udid, appId) are already documented in the schema. The description adds the semantic link that appId is the file ID from app_list, which reinforces the schema. This is baseline-3 territory where the schema does the heavy lifting with a small description bonus.

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+resource ('Install an uploaded app on a device') and differentiates between Android (APK) and iOS (IPA) transports. It clearly distinguishes from siblings like app_list, app_upload, and app_delete, and even references app_list for obtaining the file ID.

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 getting the file ID via app_list first, which is useful usage context. However, it doesn't explicitly state when NOT to use this versus alternatives like ios_install_app, device_launch_app, or device_uninstall_app. The platform-specific note (Android vs iOS) implies some context but doesn't enumerate 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

Behavior3/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 disclosure burden. It clearly indicates a read/list operation rather than a mutation, which is reasonable context. However, it doesn't disclose what the returned data looks like, whether listing is real-time or cached, or whether permission/auth requirements exist. For a simple list tool with no annotations, 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?

A single sentence, perfectly concise, with zero wasted words. It states the action, the resource, and the scope. There is nothing extraneous.

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 zero-parameter list tool with no output schema, the description is reasonably complete. It tells the agent what files are returned (uploaded app files for the current user). However, it doesn't mention whether the list is ordered, limited, or includes metadata like upload dates or app IDs, which could matter for an agent selecting a specific app file. Given the tool's simplicity, this is mostly acceptable.

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 0 parameters, and schema description coverage is 100% (trivially so, since there are no properties to document). With zero parameters, the baseline is 4 per the rubric. The description doesn't need to add parameter semantics when there are none.

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 'List uploaded app files belonging to the current user' has a clear verb (list) and resource (uploaded app files), and scopes it to the current user. It distinguishes from siblings like app_upload, app_install, and app_delete which perform actions rather than listing. A 5 would require more specificity about what an 'app file' is, but this is clear enough.

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 read-only listing use case ('List uploaded app files') but provides no explicit guidance on when to choose this versus related tools like device_list_apps, ios_list_apps, or app_upload. The user-scoping ('belonging to the current user') provides some context, but alternatives and exclusions are not stated.

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 file (APK/IPA) to the server. Supports chunked uploads for large files (max 100MB per chunk). For single upload, provide fileName + fileData. For chunked upload, also provide chunkIndex + totalChunks.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileDataYesBase64-encoded file data (max ~100MB per chunk)
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
totalChunksNoTotal number of chunks for chunked uploads
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 for behavioral disclosure. It does mention chunk size limits (100MB) and that chunkIndex is 0-based. However, it doesn't disclose upload completion semantics, whether chunked uploads assemble automatically, error handling, or whether uploads can overwrite existing files with same name.

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 in the first sentence. The two-sentence structure efficiently covers both upload modes. It's appropriately sized for the tool's complexity, though it could arguably be slightly more organized with separators between the single and chunked instructions.

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 essentials for a 5-param, 2-required-param upload tool with no output schema and no annotations. It documents the two usage modes and size limits. However, it lacks details on return values (what success looks like), prerequisites (auth requirements), and post-upload 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?

Schema description coverage is 100%, so each parameter already has documentation in the schema. The description does add value by explaining the logical grouping (single mode requires fileName+fileData; chunked adds chunkIndex+totalChunks), which clarifies the semantics beyond individual parameter descriptions. However, it doesn't add significant new meaning beyond what the schema conveys.

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 uploads an app file (APK/IPA) to the server, with a specific verb+resource. It also distinguishes between single and chunked upload modes. However, it doesn't explicitly differentiate from siblings like app_install or app_delete; while app_upload is clearly distinct by name and purpose, the description could note that this is the 'upload' step separate from 'install' or '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?

The description provides specific guidance on how to choose between single vs. chunked uploads by specifying which parameters to provide for each mode. It also gives a concrete size threshold (max 100MB per chunk). However, it doesn't state when one should use chunked vs. single (e.g., 'use chunked for files >100MB'), only how to structure each mode.

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).
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 explicitly flags itself as a mutating operation requiring user confirmation, which is exactly the disclosure needed. It also discloses HTML wrapping behavior for description and the project name subtlety (often same as URL segment after org). Slight gap: no mention of failure modes or permission requirements, but key mutating-warning is stated directly.

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?

Compact and informative — five sentences covering purpose, return value, safety warning, and the most important param nuances. Slightly dense but every sentence earns its place. None of it is redundant with 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?

No output schema, so the description compensates by naming the return (id + browse URL). With 5 parameters and 100% schema coverage, plus key behavioral warnings (confirm-first, HTML wrapping, project name quirk), the description provides solid context for a moderately-complex create tool. Would benefit from a mention of error output format, but coverage is strong overall.

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 5 parameters. The description adds genuine value beyond the schema: clarifies the project arg matches the URL segment after the org, notes description gets wrapped in <p> tags, and explains tags are stored as semicolon-separated internally. These are non-obvious behaviors the schema doesn't convey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 verb+resource ('Create a new AzDO work item') and explicitly notes it returns the new id + browse URL. Distinguishes cleanly from siblings azdo_get_work_item and azdo_search_work_items via the create semantics.

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 'ALWAYS confirm with the user before calling' with the reason listed (mutating operation). The 'project' clarification and default workItemType guidance give concrete context on when/how to invoke. Strong behavioral guardrails present.

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.
Behavior3/5

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

No annotations are provided, so the description carries the disclosure burden. It discloses credential handling (uses stored credential, no inline), notes HTML stripping behavior, and states it returns an actionable error if AzDO is not configured. These are genuinely useful behavioral details beyond what the schema conveys, though a read-only safety hint would have added more.

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 three-sentence paragraph that front-loads the core purpose and return fields. It efficiently covers return format, credential semantics, and error behavior without wordiness. Loses one point for being a dense block rather than using clearer structural separators, though the density is justified by the field enumeration.

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 tool with 100% schema coverage and a detailed return-field list, the description is thorough. It discloses return fields, credential requirements, HTML-stripping behavior, and error handling. No output schema exists, so enumerating the return fields is appropriate and adequately compensates. The only minor gap is the absence of a declared read-only hint, which annotations would normally cover.

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 covers 100% of the single parameter with a clear description ('AzDO work item ID (e.g. 12345). Positive integer.'). The description reinforces the integer ID requirement and adds the return-field context that illuminates what the parameter drives, but doesn't need to elaborate further given the high schema coverage. Baseline 3 plus a small bonus for reinforcing the positive-integer constraint in prose.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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+resource ('Fetch a single Azure DevOps work item by integer ID') and enumerates exactly which fields are returned. It clearly differentiates from siblings like azdo_search_work_items (search by query) and azdo_create_work_item (creation). The scope is precise and 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 states it uses the calling user's stored credential and does not accept inline credentials, providing useful contextual guidance. However, it does not explicitly say when this tool should be used versus alternatives like azdo_search_work_items, nor does it give exclusions. The credential disclosure is helpful but doesn't constitute full when-to-use guidance.

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.
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 50-item return cap, clarifies that only IDs are honored from the SELECT clause (batch-fetching full fields), and notes the search scope. This is meaningful behavioral disclosure beyond what's in the schema, though it doesn't mention auth requirements or read-only safety.

Agents need to know what a tool does to the world before 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 yet information-dense. It packs the core purpose, the query language reference, two concrete examples, a critical caveat about SELECT clause behavior, and the return cap into a compact paragraph with efficient formatting. 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 search tool with 100% schema coverage and no output schema, the description covers the essential aspects: what it searches, how to query, return limits, and the projection behavior. It could note whether results are sorted or how to handle pagination for more than 50 results, but for typical usage it's reasonably 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 both parameters are documented. The description adds meaningful value beyond schemas: it explains the WIQL syntax, clarifies that SELECT columns beyond IDs are ignored, and provides real query examples. The maxResults parameter's behavior and cap are documented in both schema and description.

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

Purpose5/5

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

The description clearly states what the tool does: 'Search AzDO work items with WIQL (Work Item Query Language)' with specific verb+resource. It distinguishes itself from azdo_get_work_item by noting it returns the 'same projection,' and the sibling list shows it's unique as the search variant among azdo_create/get work item 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 for when to use this tool (searching with WIQL queries) and gives concrete WIQL examples to illustrate usage. It describes the return cap of 50 items but doesn't explicitly state when NOT to use it or contrast with another search alternative (though jira_search is a sibling for a different platform).

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)
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 return format ({ ok, packageName, apks: [...] }), the split APK behavior (config splits, dynamic feature modules), and the role field values, which is substantial behavioral disclosure 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.

Conciseness4/5

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

The description is a single dense paragraph, appropriately sized. It front-loads the core purpose, then adds return format details and usage pointers in a logical flow. Slightly verbose with the return JSON but this is concise and valuable information packed 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 two-parameter read-only tool with no output schema, the description adequately covers the purpose, return format, and downstream usage (device_file_pull). The success/error behavior (ok flag) is disclosed. Given no output schema exists, the return format documentation partially compensates for that 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 coverage is 100%, so both parameters (udid, packageName) are fully documented in the schema. The description doesn't add additional parameter semantics beyond what the schema provides, but the schema already fully describes both params, 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 verb (List), resource (APK file paths), and mechanism (`pm path`). It distinguishes itself from sibling tools like device_file_list (which lists files broadly) and device_file_pull (which pulls bytes) by explicitly framing this as an APK-specific path 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 Guidelines4/5

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

Clearly states the tool returns paths and sizes, and directs users to device_file_pull for fetching bytes with explicit mention of the 5MB cap and 20MB maxSizeBytes. However, it doesn't explicitly state when NOT to use it or name alternatives directly, though the pull tool reference is implied guidance.

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)
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. The description mentions what data is returned (level, charging state, temperature), which is useful. However, it doesn't disclose whether this requires an active device session, whether it's non-mutating, or any rate-limit/auth considerations. The return fields listed add some value but leave the operational context unclear.

Agents need to know what a tool does to the world before 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, efficient sentence that captures the purpose and the key fields returned. Zero wasted words and the essential details are immediately available.

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 single-parameter read tool, the description covers the basic return values, which is adequate. However, no output schema exists to document the return format/structure, and the description is vague about whether it returns structured metrics or raw values. Given the tool's simplicity, it's acceptable but could note the return format or units (e.g., percentage, Celsius).

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 single udid parameter is documented as 'Device serial number (UDID)'). The description adds no additional parameter context beyond what the schema provides. A baseline of 3 is appropriate since the schema fully documents the one parameter and it's a simple, self-explanatory required field.

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 gets battery status including level, charging state, and temperature for an Android device. It uses a specific verb ('Get') with a clear resource ('battery status of an Android device'). It's slightly generic compared to the sibling ios_battery, but the Android-platform qualifier helps distinguish it from other device_* 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 description implies when to use it (when you need device battery info), but provides no explicit when-not-to-use guidance or alternative suggestions. It's clear this is a diagnostic/status tool vs actions like device_shell or device_info, but no exclusions or alternatives are named. There's no mention of preconditions like requiring a connected/focused device.

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)
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 for behavioral disclosure. 'Clear all data and cache' does communicate the destructive nature of the operation, which is the key behavioral trait. However, it doesn't mention side effects like user sign-out, in-app state loss, or whether cache vs data can be selectively cleared. Given zero annotations, it's workable but leaves details unstated.

Agents need to know what a tool does to the world before 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 wasted words. The first sentence states the action clearly and the second anchors it to an intuitive equivalent users know. Every element 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 destructive mutation tool with no annotations, the description communicates the core operation ('clear all data and cache') and its equivalence to Clear Storage. It lacks warnings about irreversibility, user session loss, and doesn't note that this tool is irreversible vs alternatives. With no output schema and no annotations, it could do more to explain post-conditions, but the essential semantics are captured.

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 and packageName) are already well-documented with clear descriptions including an example. Per baseline rules, a 3 is appropriate when the schema does substantive documentation work. The description adds the packageName-to-app-data correlation which is consistent with 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+resource combination ('Clear all data and cache for an app on an Android device') and adds the equivalent 'Clear Storage' in Settings reference, which gives the agent a concrete mental model. It clearly distinguishes from siblings like device_clear_app_locale and app_delete, as it's specific to clearing app data 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 Guidelines3/5

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

The description implies when to use this (when needing to reset an app's data/cache on Android), and the 'Equivalent to Clear Storage in Settings' provides useful framing. However, it doesn't explicitly state when NOT to use it, and importantly doesn't warn that this is destructive (logs users out, resets app state) or contrast it with device_terminate_app or app_delete or device_clear_app_locale. No alternatives are named.

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
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 the Android 13+ requirement, which is valuable. However, it doesn't disclose that this is a read/toggle-style operation with no destructive side effects, nor does it describe what happens if no override exists or what the return value looks like. The Android version constraint is the main behavioral note.

Agents need to know what a tool does to the world before 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 waste. Each sentence earns its place: what it does, its counterpart, and the platform version requirement. Efficient and front-loaded with the action.

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 required params, no output schema, no nested objects) and the description covers the core purpose well. However, it doesn't specify behavior when no override is set, error conditions, or the return value. Given the simplicity, this is adequate but not thorough.

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 and packageName) are already documented in the schema with clear descriptions. The description adds no additional parameter-level insight beyond what the schema provides, 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?

The description clearly states what the tool does: drops the per-app locale override so it falls back to device system language. It identifies the resource (Android app locale override) and the verb (clear/drop). It names a direct sibling counterpart (device_launch_app_in_language), providing good differentiation 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 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 (to remove a locale override set by device_launch_app_in_language) by explicitly naming the counterpart tool. However, it doesn't explicitly state when NOT to use it or list alternative tools like device_set_device_language, which sets the device-wide language rather than per-app.

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)
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 explain the mechanism (helper service stops pushing mocked fixes and apps fall back to real GPS/network provider), which is useful context. However, it doesn't mention edge cases like what happens if no mock is active, whether the real location provider was disabled concurrently, or idempotency 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 sentences, zero waste. The description is front-loaded with the primary action, then adds the counterpart reference and behavioral explanation. 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?

This is a simple single-parameter, no-output-schema tool operating with an evident counterpart. The description is complete for this complexity level — it identifies the action, the mechanism, and the fallback behavior. The only minor gap is edge-case behavior (idempotency, no-mock-active scenario), which a 1-param tool might reasonably omit.

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 single 'udid' parameter fully documented as the device serial number. The description adds no parameter-specific detail beyond the schema, which is acceptable given the parameter is trivial and well-documented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships 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+resource ('Stop mock GPS on an Android device') and explicitly names its counterpart (device_set_location). This distinguishes it from related sibling tools like device_set_location and ios_clear_location while 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 Guidelines4/5

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

The description provides clear context by explicitly naming the counterpart tool (device_set_location) and explaining the behavioral effect (apps fall back to real GPS/network provider). It doesn't explicitly state when not to use it or mention alternatives, but the sibling relationship with device_set_location gives adequate contextual 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)
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 mechanism (reads text length, sends DELETE keycodes, moves cursor to end) and the requirement to focus the field first. It doesn't describe failure modes or the return value, but for a clear-text operation the disclosed mechanics 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?

Two sentences, front-loaded with the purpose, then mechanism, then prerequisite and alternative. Zero wasted words; every sentence earns its place by either stating what it does or how to use it.

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-field clear operation with a single udid parameter and no output schema, the description covers purpose, mechanism, prerequisite (focus), and an alternative approach. It's slightly limited by not describing failure behavior (e.g., what happens if no field is focused), but the core information is complete for an agent to select and 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?

There is only one parameter (udid) at 100% schema coverage, and udid is a standard device serial identifier with no ambiguity. The description focuses on behavior rather than parameters, but with a single self-explanatory required parameter, the schema fully documents it and no additional semantics are 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 tool clears the focused text field on Android by sending DELETE keycodes equal to the current text length, after moving cursor to end. This is specific (verb=clear, resource=focused text field on Android) and distinguishes from siblings like device_type, ios_clear_text, and device_clear_app_data.

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 to tap the field to focus it first as a prerequisite. Also names an alternative: 'To clear and re-type in one call, use device_type with clearFirst:true instead.' This provides clear when-to-use guidance and names the sibling alternative directly.

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)
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, and it delivers substantially. It explains the internal technical reason (shell process lacks foreground/READ_CLIPBOARD_IN_BACKGROUND on 13+), and crucially discloses that it returns an 'empty-clipboard sentinel' rather than the raw OS error. This empty-sentinel behavior is a critical behavioral trait that could otherwise mislead an agent into thinking the clipboard is genuinely empty.

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, focused paragraph that front-loads the core purpose ('Read the current clipboard content') before diving into version-specific caveats. It's well-structured, and every sentence earns its place by covering purpose, OS-version differences, and the recommended workaround. Slightly dense in the middle section but appropriately so given the complexity of the cross-version 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?

For a simple single-parameter, no-output-schema tool, the description is thorough. It covers the core operation, the version-dependent failure mode, the sentinel return value, and the mitigation strategy. It could arguably be complete at 5 for its simplicity, but the deep technical rationale (shell permissions) is perhaps more detail than strictly needed, and the fact that it reads as more iOS-comparative than necessary tempers the score slightly.

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) has 100% schema description coverage ('Device serial number (UDID)'), so the schema already fully documents it. The description adds no parameter-specific detail beyond the schema, which is acceptable given the baseline of 3 for high coverage. No additional syntax or format guidance is needed for a simple string UDID 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 what the tool does: 'Read the current clipboard content from an Android device.' It uses a specific verb (read) plus resource (clipboard content), and it distinguishes itself from the sibling device_clipboard_set by explicitly noting the 13+ blocking behavior and recommending the set-then-paste alternative. It also differentiates from the iOS clipboard tools (ios_clipboard_get_hid, ios_get_pasteboard) by specifying 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 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 by explaining the Android version dependency: reliable on 12 and earlier, blocked on 13+. It names the specific alternative approach (device_clipboard_set for round-tripping text on 13+) and warns explicitly not to rely on read-back on 13+. This goes beyond implied usage and provides actionable context for the agent.

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)
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 explains the KEYCODE_PASTE injection being 'built into the device control protocol,' discloses that empty string clears clipboard, and implies a state-modifying operation. Good disclosure of side effects without 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 concise sentences, each earning its place: the primary purpose, the paste injection detail, and the empty-string clearing edge case. No fluff or redundant restatement of parameter names.

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 clipboard-set tool with 3 simple params and full schema coverage, the description covers the essential behavioral nuances (paste injection, clear semantics). It doesn't mention return values, but with no output schema and a fire-and-forget device control operation, that's acceptable. Missing only minor details about return confirmation.

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 3 parameters (udid, content, paste). The description adds context by connecting the paste parameter to the KEYCODE_PASTE behavior and clarifying empty string semantics, complementing rather than redundantly restating 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?

Specific verb+resource: 'Set the Android device clipboard via the device control channel.' It clearly states what it does, including the paste injection behavior and empty-string clearing. Distinguishable from siblings like device_clipboard_get and ios_clipboard_set_hid.

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 paste:true behavior and explicitly notes that no separate Ctrl+V is needed, which guides correct usage. It doesn't enumerate exclusions or when-not-to-use scenarios, but provides clear context for the main usage pathway.

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

device_current_appBInspect

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

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID)
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 states this is a read-only query (get current app) and specifies what it returns (package name and activity), which covers the core behavior. However, it doesn't describe edge cases like what happens when the home screen or system UI is foreground, whether a lock screen counts, or the exact return format/type.

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, two clauses, with zero waste. It's front-loaded with the primary purpose. Slightly more detail could have been included about return format, but for a simple read-only tool this is appropriate.

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?

This is a simple tool with 1 parameter and no output schema. The description names what it returns (package name and activity) but doesn't describe the return structure or format. Given the lack of output schema and annotations, a bit more detail on edge cases (e.g., behavior when device is locked, home screen foreground) would improve completeness, but the current description is adequate for a simple query 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 has 100% coverage on its single parameter (udid described as 'Device serial number (UDID)'), so the schema fully documents the parameter. The description doesn't add parameter-specific semantics beyond what the schema provides. Baseline 3 applies since schema coverage is complete.

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 what the tool does: 'Get the currently active (foreground) app on an Android device.' It uses a specific verb+resource combination and returns package name/activity. However, it doesn't explicitly distinguish itself from the similar sibling 'ios_active_app' or device app-related tools, though the Android-specific naming implicitly handles that.

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 (get foreground app on Android device) but provides no explicit when-to-use guidance or exclusions. It doesn't mention when this is preferable to alternatives like device_page_source, device_screen, or device_find_element. No prerequisites or conditions are stated, though the Android-specific name provides partial guidance.

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.
Behavior5/5

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

No annotations provided, so description carries full burden. It discloses the mechanism (keycode 187 APP_SWITCH shell, policy-gated), the wait-for-settle behavior, the locates-and-swipes approach, and the return shape ({ success, action, ... }). This is rich behavioral disclosure for a side-effecting UI automation 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, front-loaded with the core action, followed by use cases and mechanism detail. Slightly verbose with implementation specifics (keycode 187, policy-gated) that could arguably be trimmed, but each clause earns its place for transparency.

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 3-param tool with 100% schema coverage and no output schema. The description covers the mechanism, the use case, the return shape, the optional all flag behavior, and default packageName behavior. No meaningful gaps remain for an agent to correctly select and invoke this tool.

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

Parameters3/5

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

Schema coverage is 100% with each parameter well-documented ('Tap Close all instead of swiping a single card', 'package name... If omitted, dismisses the first/frontmost card'). The description adds marginal context by mentioning the return includes an action field, but parameters are fully explained by the schema, 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?

Specific verb+resource: opens Recents, dismisses an app card via swipe, with optional 'Close all'. Clearly distinguishes from siblings like device_terminate_app (which kills directly) and device_swipe (generic swipe) by naming keycode 187 (APP_SWITCH). The intent 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?

States clear use cases: 'clearing background apps or verifying an app was killed.' Implicitly distinguishes from device_terminate_app (which terminates in-process rather than via Recents UI). Doesn't explicitly name an alternative when NOT to use it, but the context is clear.

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).

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)
holdMsNoHold-in-place duration before motion in ms (default: 500)
durationMsNoMotion duration from start to end in ms (default: 400)
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 multi-phase gesture mechanics (hold, then motion), default timings, the coordinate space (physical pixels from page_source bounds), and the deliberate-grab requirement. It does not explicitly state that a drag is a mutating/screen-changing operation or mention any permission/auth needs, but the gesture mechanics disclosure is substantive and useful.

Agents need to know what a tool does to the world before 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 deliver purpose, differentiation, use cases, and coordinate semantics with zero filler. Every sentence earns its place, and the most critical selection-differentiation detail (how it differs from swipe/long_press) 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 tool has 7 params (5 required) with 100% schema coverage and no output schema (returns void presumably). The description covers the gesture mechanics, defaults, coordinate space, alternatives, and use cases. The only gaps are edge-case behavior (e.g., zero durations, out-of-bounds coords) and whether the drag can cross screen boundaries, but for a gesture tool with full schema coverage this is largely 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 baseline is 3. The description adds value by explaining the semantic roles of the coordinate parameters within the gesture flow: (x1,y1) is the hold point for the deliberate grab, and (x2,y2) is where the drag ends. It also explains the role of holdMs (grab) and durationMs (motion). However, it does not detail edge cases like what happens if holdMs is 0 or coordinate bounds.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships 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+resource ('Drag-and-drop on an Android device') and clearly details the mechanism (hold at (x1,y1), move to (x2,y2) over duration). It explicitly distinguishes itself from sibling tools device_swipe (no hold) and device_long_press (no motion), providing concrete if/then decision criteria.

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 alternative tools and when NOT to use them ('Distinct from device_swipe... and device_long_press...'). It gives concrete use cases ('app-icon reorder, drag-into-folder, slide gestures that need a deliberate grab') that map to when this tool is appropriate, which is strong guidance for selection.

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)
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 the sorting behavior ('Sorted smallest-first so the most specific element comes back first') and the scope filter (only elements with resource-id, text, or content-desc present). However, it does not state whether this is a read-only operation, whether it may take a screenshot, side effects, or performance characteristics. The key behaviors disclosed are useful but the read-only nature is implicit rather than 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, each earning its place: sentence one defines scope and output, sentence two explains sorting order, sentence three gives concrete usage guidance with examples. No filler, no redundancy with 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?

Given no output schema and no annotations, the description does a good job explaining return contents (attributes, bounds, center coords, locator strategies) and sorting behavior. However, it does not disclose the read-only nature explicitly, error conditions (e.g., empty region, invalid coordinates), or the relationship to sibling tools like device_find_element or device_locators_for. For a moderately complex enumeration tool with 6 params and no annotations, it is fairly complete but could mention error/edge 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 description coverage is 100%, so all 6 params are documented in the schema. The description adds semantic value beyond the schema: it explains what 'intersects' means for the coordinates, and mentions the limit's role (capping returned elements). It clarifies the physical-pixel unit in the description and coordinates context. The schema provides per-field definitions, so the description modestly supplements rather than restates. Given 100% coverage, baseline 3 applies, but the description adds meaningful contextual meaning around the region semantics and the limit.default.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships 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'), the specific resource ('addressable UI elements'), the filtering criterion ('bounding box intersects the given physical-pixel rectangle'), and what each element contains ('attributes, bounds, center coords, ranked locator strategies'). It also distinguishes from likely siblings like device_page_source or device_find_element by framing it as region-scoped enumeration without full XML parsing.

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 it: 'Use to enumerate the contents of a region (bottom nav, dialog, list section) without parsing the full XML.' This explains the use case well and contrasts it against full-XML page parsing, but does not explicitly name alternative tools or state when NOT to use it. It does not mention exclusions like non-addressable elements or interaction tools.

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
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. It discloses the return format ({ok, remotePath, count, entries}), the protocol used (file-sync, no shell roundtrip), and an edge behavior (symlinks resolved one level). This is solid behavioral disclosure for a read-only listing operation, though it doesn't detail error cases or permissions.

Agents need to know what a tool does to the world before 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, zero wasted words. Every sentence adds value: what it does, protocol note, return shape, and common roots. Front-loaded with the core purpose and immediately follows with actionable 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 fairly simple two-parameter read-only listing tool, this description is well-rounded. It documents the return structure inline, gives practical path examples, and notes the symlink behavior. It lacks an explicit output schema but compensates by documenting the return shape in prose. Error handling and permission requirements are not addressed, but breadth is appropriately capped for a low-complexity tool.

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

Parameters3/5

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

Schema coverage is 100% with both parameters (udid, remotePath) documented in the schema. The description adds value by clarifying common root paths and showing example values (/sdcard/Download), plus the entry fields (name, isDir, size, modTime) which enrich what parameters would return. This slightly exceeds the baseline 3 for full schema coverage.

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

Purpose5/5

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

The description clearly states 'List files and directories at a path on the device', a specific verb+resource combo. It distinguishes from sibling tools like device_file_pull and device_file_push by naming the file-sync protocol (no shell roundtrip) which separates it from device_shell. It also documents the exact return shape.

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 by listing common roots (/sdcard/, /sdcard/Download, /sdcard/DCIM) which helps an agent know typical paths to use. However, it doesn't explicitly state when NOT to use this tool or name alternatives like device_shell, though the file-sync protocol note implies the distinction.

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.
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: explicitly states it returns base64-encoded content, describes the default 5MB cap and 20MB override limit, discloses that it refuses directories and oversized files before transferring, and documents the exact return shape. This is exceptional transparency for a tool with 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?

Three dense sentences with zero waste. Every element earns its place: the action, the encoding format, the size constraints with defaults and overrides, the refusal conditions, and the return schema. Highly efficient and 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 3 params, no output schema, and no annotations, this description covers the essential behavior comprehensively: size limits, refusal conditions, return format. It omits nothing critical for an agent to invoke correctly. Slightly incomplete in not describing error conditions beyond refusal cases, but the core contract is fully 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?

Schema description coverage is 100%, so the schema already documents all three parameters well (udid, remotePath, maxSizeBytes). The description adds value by explaining the default size cap behavior and the return contract, but doesn't add parameter-level semantics beyond what the schema provides. Baseline 3 is appropriate given 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 'Pull a file from the device' with a specific verb+resource. It also clearly differentiates from siblings: device_file_push (write direction) and device_file_list (listing), making the pull direction unambiguous and well-scoped.

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 on when to use it (pull files from devices) and its size limits/overrides. It doesn't explicitly name alternative tools for exclusions, but the pull direction vs push/list siblings is self-evident. The maxSizeBytes override behavior is clearly documented.

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/
Behavior4/5

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

No annotations are provided, so the description carries full behavioral disclosure burden. It discloses the 20MB decoded size hard cap, the metacharacter restriction on remotePath, and the return shape { ok, remotePath, sizeBytes }. It doesn't mention auth/permissions needs or overwrite behavior, but the disclosed constraints are meaningful and beyond basic 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?

Four dense sentences with zero waste. Each sentence carries distinct useful information: operation+format, allowed destinations, size cap+security constraint, and exception routing with return shape. Front-loaded with the primary 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?

For a 3-param tool with no output schema and no annotations, the description covers operation, encoding, destination constraints, size limits, security notes, alternative routing, and return format. It could mention overwrite behavior or permission requirements, but for a file-push utility the coverage is solid and practical.

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 value beyond the schema: it clarifies content is base64-encoded (matching the schema's description but reinforcing encoding format), specifies the 20MB decoded cap interpreting content size, and explains remotePath's constraints (no shell metacharacters, must be an allowed absolute path). This adds genuinely useful 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 clearly states 'Push a base64-encoded file to the device' with a specific verb+resource pairing. It distinguishes this from device_file_pull (pull direction) and app_install (for APKs explicitly), and the sibling list contains both device_file_pull and app_install, showing intentional differentiation.

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 including allowed destinations (/sdcard/, /data/local/tmp/), what those dirs are for (frida-server, tcpdump), hard size cap, metacharacter constraint, and explicitly directs APK cases to app_install instead. This is strong 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.

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
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 usefully discloses that the output is in PHYSICAL pixels and requires no scaling — a valuable behavioral detail. However, it doesn't disclose whether the find fails (behavior when no match found), returns first match only, or whether both text and contentDesc can be combined, leaving some behavior opaque.

Agents need to know what a tool does to the world before 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 carrying essential information. The first states the purpose and search criteria; the second imparts the critical coordinate-scaling detail. Zero 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 locator tool with 100% schema coverage and a clear integration point (device_tap), the description is largely complete. It explains the core output transformation (physical pixels). It's slightly short on failure behavior and match ambiguity (multiple elements matching the same text), but for this complexity level with full schema coverage it's 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%, with each of the four parameters (text, udid, resourceId, contentDesc) already described in the schema. The description adds that matches are by 'visible text or content description,' which maps to two params, but doesn't add meaning beyond the schema for resourceId or how parameters interact (e.g., AND vs OR semantics). 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 ('Find') and resource ('UI element on an Android device'), specifies the search criteria (visible text or content description), and differentiates itself from siblings by noting it returns physical pixel coordinates usable directly with device_tap. This distinguishes it from device_tap_by_text, device_locators_for, and 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 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 (to locate an element before tapping) by explaining the output is directly consumable by device_tap. However, it doesn't explicitly state when NOT to use it or name alternative tools (e.g., device_tap_by_text for direct text-based tapping, device_elements_in_region for region-based queries), which would strengthen usage guidance.

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)
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 behavioral-transparency burden. It discloses the return format (short summary + matching logcat lines, newest last), the filter sources, and the semantic meaning of an empty result. It does not detail rate limits, time-window semantics of 'recent', or whether it mutates state, but as a read-only diagnostic it is well covered given no annotations 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?

Three sentences that each earn their place: purpose+timing, filter details, and interpretation of empty result. Slightly dense with technical detail in the filter clause, but no wasted words. It is effective and front-loaded; could arguably be trimmed but the density serves the diagnostic use case.

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 diagnostic tool with 2 params (100% schema coverage) and no output schema, the description thoroughly covers what the agent needs: when to invoke, what filters are applied, expected return shape, and how to interpret both populated and empty results. The completeness is high for its complexity class—every decision point the agent might face is 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 description coverage is 100% (both udid and max are documented in the schema). The description adds behavior for max ('Newest last') which the schema already states, and clarifies output ordering but not much beyond the schema. The description restates the 'newest last' ordering for the return rather than adding new parameter meaning, 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?

Description states a clear purpose: 'Read recent Android focus-change events from logcat' with a specific verb (Read), resource (logcat focus events), and scope (recent). It names concrete log sources (ViewRootImpl, WindowManager, InputMethodManager). Although there are no direct siblings doing logcat focus reads, the description differentiates from device_type and device_tap by explicitly positioning it as the diagnostic step between tap and 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?

Exceptionally clear usage guidance: specifies exactly WHEN to use it ('AFTER a tap on an input field and BEFORE device_type'), names the race condition it diagnoses ('type went into the wrong field'), and explains how to interpret the result (empty result = tap did NOT change focus; lists two specific failure modes: missed tap or non-focusable element). This goes beyond 'when to use' into 'how to interpret outcomes', which is excellent.

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)
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 this is a read-only operation (getting a URL) and that it returns a URL string. However, it doesn't mention what happens if Chrome isn't open or no page is loaded (error vs blank), device prerequisites (Chrome must be installed/running), or whether multiple tabs are handled (which URL is returned). These gaps are notable for a device-state-reading 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?

Two sentences, both earning their place: the first states the purpose, the second highlights the efficient benefit (no page-source parsing). It is front-loaded and compact, though the second sentence edges slightly toward marketing language rather than hard functional 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 read tool with no output schema, the description provides the core value proposition (returning URL string without parsing source). It could be more complete about edge cases (no Chrome running, multiple tabs), but given the low complexity and that this is a straightforward getter operating within a larger device tool family, it's reasonably complete. There are related siblings (ios_get_browser_url, device_page_source) but the description's differentiation is adequate.

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

Parameters4/5

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

Schema description coverage is 100% (udid is documented as 'Device serial number (UDID)'). With full coverage, baseline is 3, but the description's note about needing the device's UDID to target a specific Android device adds useful context beyond the schema. The description doesn't add format/syntax details but doesn't need to given the single, self-explanatory 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?

Description uses a specific verb+resource: 'Get the current URL loaded in Chrome on an Android device.' It clearly identifies the resource (Chrome browser on Android) and the action (get URL). It distinguishes well from siblings like device_page_source (full source) and device_navigate_url (navigation), and relates to ios_get_browser_url as the Android counterpart. However, it doesn't explicitly name these siblings as 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 notes 'without needing to parse page source,' which implies it's a lighter-weight alternative to device_page_source for URL extraction. It implies the context (when you just need the URL, not the full page source) but doesn't explicitly state when NOT to use it, such as when the target is a different browser or a WebView within an app rather than Chrome.

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

device_infoAInspect

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)
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 key behavioral insight about coordinate systems (physical pixels matching page_source bounds) which is genuinely useful beyond what the schema shows. However, it doesn't mention return format, whether it's read-only (safe), or any side effects. The coordinate insight is valuable context but the behavioral profile is partially 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, both high-value. The first states the purpose; the second delivers the critical coordinate-system context that links this tool to gesture tools. No filler, no redundancy. This is an exemplary concise 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?

Given a read-only info tool with one well-documented parameter and no output schema, the description covers the essential aspects: what it returns (detailed info, screen size), why it matters (physical pixel coordinates for gestures), and how it relates to page_source bounds. The coordinate guidance fills a potential knowledge gap. It could arguably benefit from a note about output structure, but the no-output-schema context lowers that burden.

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 documented as 'Device serial number (UDID)'). The description adds no additional parameter-specific meaning beyond schema, so the baseline 3 applies. The udid parameter is self-explanatory given the sibling tool family and general device tool context.

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 gets detailed device info including physical screen size. It distinguishes from siblings like ios_device_info, device_battery, device_network_info by focusing on general device info and specifically calling out the physical screen size relevance to coordinate systems. However, it doesn't fully enumerate what 'detailed info' includes beyond screen size.

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 on when this matters: device_tap/device_swipe use physical pixel coordinates, so retrieving device info (screen size) is relevant before gesture operations. This implicitly guides the agent to fetch this before performing coordinate-based interactions. It doesn't name an alternative tool explicitly, but the coordinate guidance is actionable context.

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.

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)
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 excels here by disclosing the routing behavior (control channel vs shell), the fallback mechanism, and the special handling for system-policy keys. This is rich behavioral context that an agent needs to understand execution nuances.

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 information-dense, packing key purpose, accepted values, and routing behavior into a compact block. It's front-loaded with the core purpose. Slightly verbose on the routing explanation, but every clause earns its place given the complexity of the 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?

For a 2-parameter tool with no output schema, this description is quite complete. It covers accepted values, routing behavior, and fallback logic. It could mention what happens on failure or what the return value is, but the behavioral coverage is strong. The description is adequate for an agent to select and 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?

While schema coverage is 100% and both parameters are described in the schema, the description adds value by clarifying the keycode parameter's dual nature (numeric OR named) and listing the specific accepted named keys. It also explains the behavioral difference between system-policy and regular keys, which adds meaning beyond the schema's simple type 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 the tool's function: 'Send a keycode to a device' with specific verb+resource. It distinguishes itself from siblings like device_tap/device_swipe by focusing on keycodes. However, it doesn't explicitly differentiate from ios_key_hid or webpage_press_key, relying on the 'device' prefix for context.

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: it explains that system-policy keys always go through shell, while other keys try the control channel first with fallback behavior. It also lists the accepted key names, giving concrete usage direction. This is strong behavioral 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_launch_appAInspect

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)
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 case-insensitive substring matching behavior for display names, which is genuinely useful. However, it doesn't mention what happens on failure (app not found, invalid package), side effects, or whether a launch while already running brings to foreground vs restarts. For a launch tool with zero annotations, 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.

Conciseness4/5

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

Two concise sentences with concrete examples (com.android.chrome, 'Chrome'). Front-loaded with the core verb and object. The example package names add practical clarity. Uses as the term 'OR' and effectively front-loads the important dual-input capability.

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 launch tool with only 2 simple parameters, 100% schema coverage, and no output schema, the description covers the essential decision points: what it does, accepted input forms, and matching behavior. It could mention failure states but overall provides sufficient 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.

Parameters4/5

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

The schema already covers both parameters at 100%, and the description adds meaningful detail beyond the schema: it elaborates that packageName can be either a package name or display name, and defines the substring/case-insensitive matching semantics. This adds clear value over the bare schema text, which only says 'Package name (com.x.y) OR display name (case-insensitive substring)' — the description reinforces and expands this.

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 launches an Android app, with a specific verb + resource combination. It adds useful detail about accepting either a package name OR display name, and explains the matching semantic (case-insensitive substring). It doesn't explicitly differentiate from siblings like device_launch_app_in_language or ios_launch_app, but the Android scope and dual-name capability are 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 description clarifies the two acceptable input forms (package name vs display name) and describes the lookup behavior. It does not explicitly state when to use this vs device_launch_app_in_language or device_navigate_url, but the Android-specific naming and the launch-focused purpose give reasonable implicit context. No explicit exclusions or alternatives are named.

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
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 key behaviors: force-stops the app first for cold launch, uses the per-app LocaleManager API via a specific command, override persists until cleared/uninstalled. It complements the device_clear_app_locale sibling by implying how to reverse this. Good disclosure without 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?

Three sentences, dense with useful information: what it does, prerequisites, mechanism, side effects, and persistence. Every sentence earns its place. Could be slightly tightened but is appropriately front-loaded with the core purpose 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?

For a 3-parameter launch tool with no output schema, the description covers prerequisites, mechanism, side effects (force-stop, persistence), and reversal path (device_clear_app_locale exists as sibling). The behavior is clearly specified including what the override persists through. No output schema needed since launch tools typically return simple success indicators.

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 documents all 3 parameters (udid, packageName, locale with an example 'fr-FR'). The description adds value by explaining the locale parameter is BCP-47 format implicitly through the schema example and explains the broader mechanism, but doesn't add much parameter-specific semantics beyond what the schema provides. Description mentions the persistence side-effect which contextualizes 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 clearly states the verb (Launch), resource (Android app), and the specific scope (forced into a language/locale without changing system settings). It distinguishes this from siblings like device_launch_app (plain launch) and device_set_device_language (changes system language) and ios_launch_app_in_language (iOS counterpart). The platform and API details 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 Guidelines4/5

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

The description clearly specifies Android 13+ (API 33) as a prerequisite and mentions it's distinct from changing system settings, implicitly contrasting with device_set_device_language. It notes the force-stop behavior but doesn't explicitly name alternative sibling tools or give when-not-to-use conditions beyond the OS version constraint.

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). Shows only free devices and devices currently used by you.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

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. The description does add useful behavioral context by noting it only shows free devices and devices currently used by you, which is a genuine filtering behavior. However, it doesn't disclose the return format, ordering, or whether device availability changes over time.

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?

Two short sentences, no wasted words. The description is front-loaded with the primary purpose and immediately appends the key filtering constraint. Could arguably be a single sentence but the current structure is efficient and readable.

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 zero-parameter, no-output-schema tool, the description is reasonably complete. It states the tool type (Android and iOS), the filtering behavior (free + yours), and the purpose. It doesn't clarify how many devices typically appear or how to interpret results, but with zero parameters the interface surface is minimal and this is adequate.

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?

There are 0 parameters, so there is nothing for the description to add beyond what the schema provides. With 0 parameters, the baseline is 4, and the description appropriately requires no parameter documentation. This is a no-argument tool where the schema fully covers the interface.

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?

Clear verb+resource: 'List available devices' specifies action and target. It distinguishes itself as a device-listing tool among many device_* siblings, though it doesn't explicitly distinguish from device_info or ios_device_info which might be confused for similar purposes.

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 ('list available devices') but provides no when-to-use or when-not-to-use guidance. It doesn't name alternative tools or clarify when to prefer this over related device_* tools like device_info or app_list. The filtering note (free devices + devices you use) gives implicit context but no exclusions.

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

device_list_appsAInspect

List installed apps on an Android device. Optionally filter to user-installed apps only.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID)
userOnlyNoOnly list user-installed apps, excludes system apps (default: true)
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 describes the operation (listing apps) but doesn't disclose whether this is read-only, what permissions/auth are required, or how a large app list is returned (pagination/truncation). For a tool with zero annotation coverage, the behavioral description is thinner than expected.

Agents need to know what a tool does to the world before 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 zero wasted wording. Front-loaded with the primary action and immediately follows with the optional filter behavior. 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 2-param list tool with no output schema, this is reasonably complete. The description explains the tool's purpose, the optional filter, and the udid target is self-explanatory given schema. It doesn't over-explain return formats, which wouldn't be expected given the simplicity. Slightly more on return format could push to 5 but it's not necessary 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 description coverage is 100% for both params (udid and userOnly are both documented in the schema). The description adds value by explaining the userOnly parameter's purpose (filtering to user-installed apps, excluding system apps), which complements rather than merely repeats the schema. However, the description doesn't add anything beyond the schema for udid.

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 'List installed apps on an Android device' with a specific verb (list) and resource (installed apps on Android device). It distinguishes reasonably from siblings like app_list and ios_list_apps through the Android/device context, and adds the user-only filter option which differentiates it.

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 the optional userOnly filter which provides some usage context, but gives no explicit guidance on when to use this tool vs alternatives like app_list or device_shell. There are no stated exclusions or scenarios where a sibling would be preferred.

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
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 transparency burden. The description does disclose the behavior well - it explains it returns a ranked priority list, notes the coordinate mode picks the smallest containing element, and clarifies the return matches the UI inspector format. However, it doesn't disclose edge cases like what happens when multiple locators match, error behavior for invalid coordinates, or whether non-Android platforms are supported.

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. The three sentences each earn their place: purpose+input modes, output format, and usage rationale. It doesn't waste words, though it could potentially be more concise by merging the last two sentences. Generally well-structured for a tool with 6 parameters.

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 6 parameters, 1 required, no output schema, and no annotations, the description covers the essential semantics well. It explains the dual input modes, the output format, and ties to page-object generation workflow. However, it lacks details on edge cases, failure behavior, or whether requesting both coordinates AND text simultaneously is an error. Given the tool's moderate complexity, this is a complete-but-not-exhaustive 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 has 100% coverage with descriptions for all 6 parameters (x, y, text, udid, resourceId, contentDesc). The description adds meaning beyond the schema by clarifying the mutual exclusivity of lookup modes ('Either coordinates OR text/contentDesc/resourceId'), noting x/y must be used together, and explaining that text matches both text AND content-desc (which the schema only hints at). This adds semantic value beyond the 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 clearly states the tool's purpose: generate ranked locator strategies for a UI element on Android. It specifies both supported lookup modes (coordinates OR text/contentDesc/resourceId) and explicitly describes the output (priority-ordered list matching the UI inspector format: id, text, content-desc, accessibility selector, XPath). This is a specific verb+resource combination that clearly distinguishes from siblings like device_find_element and device_elements_in_region.

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 input modes ('Pass either coordinates OR a text/contentDesc/resourceId') and states the purpose ('Use these to fill page-object selectors when generating test scripts'). It does not explicitly name alternative tools to use instead (like device_find_element for direct lookup), but the guidance that this replaces re-deriving locators is clear context. Missing explicit 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.

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).

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)
durationNoHold duration in ms (default: 800)
Behavior3/5

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

No annotations are provided, so the description carries some behavioral burden. It communicates the coordinate convention (physical pixels from page_source bounds) which is genuinely useful. However, it doesn't disclose behavior like whether the hold is exact or approximate, whether the duration default matters for triggering certain menus, or any side effects/state changes.

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 with no fluff. It front-loads the core action and adds the important coordinate-system caveat. Every sentence earns its place 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 interaction tool with 100% schema coverage and no output schema needed (post-action effects are the output), the description covers the essential context: what it does, coordinate convention, and typical use cases. Slight room for improvement on edge-case behavior, but it's largely complete for this tool class.

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 documents all four parameters (x, y, udid, duration with default 800ms). The description adds the note about physical pixels, which reinforces the schema. This is the baseline 3 case: schema does the heavy lifting with some minor reinforcement from the description.

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

Purpose5/5

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

The description clearly states 'Long press at (x,y) on an Android device screen' with a specific verb, resource, and coordinate scope. It distinguishes this from sibling tools by naming the action type, and it explicitly mentions the coordinate system (PHYSICAL pixels) which adds critical scoping 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 gives some usage context by listing what long-press actions typically trigger ('context menus, drag handles'). However, there's no explicit when-to-use vs alternatives guidance, no exclusions, and no comparison with related tools like device_tap or device_drag_drop, though the purpose difference is largely self-evident.

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 Chrome on an Android device. Much simpler than manually tapping the address bar. Launches Chrome with the given URL directly.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesURL to open (include https://)
udidYesDevice serial number (UDID)
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. The description states it launches Chrome directly, implying it triggers a navigation rather than just opening a browser. However, it doesn't disclose details like whether the URL replaces the current page, whether it requires Chrome to be installed, session behavior, or what happens on failure. Reasonable but minimal 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?

Two concise sentences that efficiently convey purpose and value. No wasted words or redundant information. The comparison to manual tapping is useful and adds context without bloat.

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?

This is a relatively simple tool (2 params, 100% schema coverage, no output schema). The absence of output schema means the description should ideally hint at return values or success indicators, which it doesn't. It also doesn't distinguish from similar sibling tools like android_devtools_navigate. For a navigation tool of this simplicity, it's marginally adequate but could mention expected outcome or related 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%, and both parameters (url, udid) have descriptions in the schema. The description doesn't add meaning beyond the schema—it mentions 'the given URL' but doesn't elaborate on URL format requirements beyond what the schema's 'include https://' note already provides. Baseline 3 is appropriate since the schema handles parameter documentation adequately.

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+resource: 'Open a URL in Chrome on an Android device' and indicates it 'Launches Chrome with the given URL directly.' It's clear and specific about what the tool does. However, it doesn't explicitly differentiate from the sibling ios_navigate_url or android_devtools_navigate tools, though the Android/Chrome context provides some implicit distinction.

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 by contrasting with 'manually tapping the address bar,' which implies this is the automated equivalent for opening URLs. It doesn't explicitly state when NOT to use this tool or mention alternatives like android_devtools_navigate, but the context is reasonably clear for the use case. Missing explicit exclusions or alternative tool references.

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)
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. The description indicates this is a read-only data retrieval operation (getting network info), but does not disclose whether it requires specific permissions, whether the device must be connected to WiFi, whether signal strength might be null when not on WiFi, or how the data is returned. It's a read operation so 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.

Conciseness4/5

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

One concise, efficient sentence that front-loads the purpose and lists the returned data points. No filler or redundancy. Could arguably add a bit more behavioral context, but as written it's appropriately sized with zero waste.

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 read tool with one fully-described parameter, the description is reasonably complete. It covers what's returned (SSID, IP, signal strength). However, no output schema exists, so the description does not specify the return format or data types for these fields. The tool is simple enough that this is acceptable 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?

Schema description coverage is 100% with a single parameter (udid) that is well-described in the schema as 'Device serial number (UDID)'. The description does not add anything beyond the schema for the parameter itself, but it does clarify what data the tool returns, which complements the parameter meaning. Baseline 3 is appropriate for complete 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 (Get) and resource (network info from an Android device), and lists the specific data points returned: WiFi SSID, IP address, and signal strength. It distinguishes this from device_info (general device info), device_toggle_wifi (WiFi control), and shows it's Android-specific versus iOS equivalents.

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 (querying network state of a device) but does not explicitly state when to use this tool versus related alternatives like device_toggle_wifi, session_network_logs, or android_devtools_capture_network. The Android device reference gives some context but no explicit when/when-not guidance or exclusions.

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

device_notificationsBInspect

Read current notifications on an Android device. Returns structured list of active notifications (app, title, text).

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID)
Behavior3/5

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

The description adds useful context beyond the schema by noting the return is a 'structured list of active notifications (app, title, text)', indicating the read-only nature (mentioning 'Read'). However, no annotations exist and the description doesn't disclose potential limitations like notification access permissions, OS version restrictions, or timeout behavior. Reading is non-destructive by implication but not explicitly affirmed.

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 concise sentence that efficiently conveys the purpose and return structure. There's no wasted verbiage. Could arguably add a usage qualifier but earns high marks for efficiency.

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 read tool with one well-documented parameter and no output schema, the description is serviceable. It explains the return structure clearly ('structured list of active notifications (app, title, text)'), compensating for the lack of an output schema. However, it lacks mention of potential edge cases like empty notifications, permission issues, or how it compares to device_shell or other system inspection 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?

The single parameter 'udid' is fully documented in the schema (100% coverage) as 'Device serial number (UDID)'. The description doesn't add anything beyond what the schema provides—no format hints or context about required device state. Baseline 3 is appropriate given full 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 tool's function: 'Read current notifications on an Android device' with a specific verb (Read) and resource (notifications). It also describes the return structure ('structured list of active notifications (app, title, text)'). It doesn't strongly distinguish from siblings, but among many android/device tools it's reasonably unique in 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?

No guidance on when to use this tool vs alternatives. It doesn't mention prerequisites (e.g., needing a device session or notification permission), whether it requires a connected/live device, or note that some notifications may not be accessible. No exclusions or alternative tool references.

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)
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 important behavior: bounds are physical pixel coordinates usable directly with device_tap/device_swipe, Android only dumps rendered nodes (so off-screen elements absent), and case-insensitive grep semantics. The only minor gap is not explicitly disclosing whether this is a read-only operation, though that's strongly implied.

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 information-dense and front-loaded with the primary purpose first. It's slightly longer than strictly necessary but every sentence adds distinct value (coordinate system, filtering, grep shortcut, off-screen caveat). The formatting with explicit tool name callouts is helpful for navigation.

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 thorough. It explains behavior (offscreen rendering limitation), coordinates, filtering semantics, output formats, and prioritizes alternative tools. A small gap: it doesn't describe the xml output structure detail or performance characteristics, but for a dump-inspection tool this is adequate.

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

Parameters4/5

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

Schema coverage is 100%, so the schema documents all 5 parameters well. The description adds meaningful context beyond the schema: explains the coordinate system for bounds, distinguishes `search` (looser, case-insensitive grep) from `text` (exact match), and clarifies the `format` enum semantics. This goes beyond what the schema alone 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 tool retrieves UI hierarchy XML of a device, with specific scope (physical pixel bounds, filtering by text/class, compact description format). It differentiates from siblings like device_find_element, device_scroll_to_element, and device_wait_for_element by explicitly naming them as alternatives for specific use 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?

Provides explicit guidance on when to use this tool (fast check for element presence via `search`), when NOT to rely on it (scrolled-off-screen elements not in dump), and names specific alternatives (device_scroll_to_element, device_find_element, device_wait_for_element). Also explains the distinction between `search` (loose grep) and `text` (exact match).

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
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 disclosure burden. It does well by explicitly documenting the fallback mechanism ('Tries control channel first; falls back to `cmd statusbar` shell on error') and the return shape ('Returns { ok, action, transport }'). It lacks some behavioral details like the semantics of transport failure or what ok=false implies, but the disclosed fallback and return contract are valuable 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?

The description is compact and front-loaded, with every sentence earning its place. It opens with the core purpose, enumerates the three actions with behavioral specificity, adds the OEM caveat and fallback mechanism, and closes with the return contract. 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?

For a simple 2-parameter tool with full schema coverage and no output schema, the description covers the essentials: purpose, per-action behavior, OEM caveat, fallback mechanism, and return format. The only minor gap is the absence of a when-to-use vs. when-not-to-use statement, but given the tool's simplicity and self-contained action enum, the description is adequately 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 does add detail beyond the schema by explaining what each action enum value does behaviorally (e.g., 'pull down Quick Settings'), which the schema's terse 'Which panel operation to perform' does not convey. However, it doesn't add format/constraint detail beyond the schema for the udid parameter, and the action meanings are already fairly self-explanatory from the enum names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships 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+resource: pull down notification panel, Quick Settings, or collapse panels. It enumerates the three distinct actions (notifications, settings, collapse) and differentiates the behavior of each, which distinguishes it from sibling tools like device_notifications and device_dismiss_recent_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?

The description provides clear behavioral context: for each action it explains what happens ('pull down the first panel for notifications'), and notes an OEM-specific caveat ('some OEMs require notifications first' for settings). However, it doesn't explicitly state when NOT to use this tool versus alternatives like device_notifications or device_shell, though the action enum and clear purpose make that largely self-evident.

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)
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 of disclosure. It richly discloses behavior: subscribes to shared control session (no duplicate process), server-side remux into mp4 on server host, no on-device storage, no FLAG_SECURE limits, no 180s cap, auto-stop prevents indefinite disk fill. This is thorough, though it doesn't mention return format details for recordingId (partially mitigated by the unnamed 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?

The description is 6 sentences and dense with useful details, but every sentence earns its place: purpose, session behavior, codec/container details, limitations (no on-device storage/FLAG_SECURE/180s), auto-stop, return value, concurrency constraint. No wasted words 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 recording-start tool with no output schema, the description covers the essential behavioral contract well: what it returns (recordingId), when it stops, concurrency limits, storage implications, and relation to device_record_stop. It's slightly lengthy but comprehensive. The only minor gap is not detailing what happens to the mp4 file after recording (retention/location), though this may be outside the tool's scope.

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 both udid and maxDurationSec have descriptions. The description adds meaningful context beyond the schema by explaining the default (300) and max (600) in text, and clarifying that omitting maxDurationSec uses the default auto-stop cap. The description also adds the 'one recording per device' constraint. It doesn't describe formats or formats beyond schema, but the schema is already clear.

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

Purpose5/5

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

The description clearly states the tool starts a screen recording on an Android device, with a specific verb (start) and resource (screen recording). It distinguishes itself from siblings like device_record_stop and android_performance_record_start by explicitly mentioning the mp4 remuxing, no FLAG_SECURE limitation, and the distinct companion stop tool. This differentiation is helpful given the 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 explains the auto-stop behavior (maxDurationSec default 300, max 600), states 'Only one recording per device at a time', and references the companion device_record_stop for the recordingId. It also clarifies it subscribes to the shared device control session without creating a duplicate process, helping agents avoid redundant setup.

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
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 behavioral detail that this is a side-effectful operation (closes the remux pipeline) and explains why it matters ('so the mp4 has a valid moov atom'). It also discloses it returns an on-server file path rather than downloading content. This is meaningful beyond the bare 'stop recording' phrasing.

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, all earning their place: purpose, critical behavioral note about the moov atom, and the return-value contract. No filler or fluff. It could arguably be slightly more compact, but every clause adds information for an agent deciding whether and how to invoke it.

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 tool with no output schema and no annotations, the description covers the essentials: what it does, its prerequisite, its clean-closure behavior, and what it returns. It doesn't describe error cases (what happens if recordingId is invalid or recording already stopped), but for a companion stop tool this is adequate given the return contract is well spelled out.

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 recordingId is described as 'recordingId returned by device_record_start' in the schema itself. The description reinforces this by naming the source tool and the return contract (hostPath, sizeBytes, durationMs, codec/resolution). Since there's only one param with full schema coverage, the description adds minimal extra beyond linking it to the return 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+resource: 'Stop a screen recording started by device_record_start.' It names the paired tool explicitly, distinguishes from siblings like ios_record_stop and android_performance_record_stop, and references the remux pipeline which identifies it as the Android/device screen recording counterpart. This clearly differentiates from flow_recording_stop and performance recordings.

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 implicitly establishes usage context by referencing device_record_start as its prerequisite pairing, which tells the agent when to use this tool (after starting a recording). It doesn't explicitly state when-not-to-use or name alternatives like ios_record_stop, but the pairing is self-explanatory enough given the sibling list contains similar record-stop tools.

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. Call this when finished with a device. Holds also expire automatically after an idle period.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID) to release
Behavior4/5

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

With no annotations, the description carries full burden. It discloses the key behavior: releasing stops the device from counting against the parallel-device limit and holds auto-expire. However, it doesn't mention idempotency or error conditions, leaving some edge-case behavior undisclosed.

Agents need to know what a tool does to the world before 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 and purpose; every word earns its place. 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 one-parameter tool with no output schema, the description covers the purpose, usage guidance, and the auto-release behavior, making it sufficient for the agent to understand when and why to invoke it. It omits details about return values, but that is not critical for this simple 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?

The schema already documents the only parameter 'udid' as 'Device serial number (UDID) to release' with 100% coverage. The description adds no further parameter-specific semantics, 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?

Description clearly identifies the action: 'Release your hold on a device', which is a specific verb+resource. It distinguishes from sibling device tools by focusing on releasing a hold and explains the consequence (stops counting against parallel-device limit). This is unique among siblings, making 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 Guidelines5/5

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

Provides explicit guidance: 'Call this when finished with a device' and notes that holds 'expire automatically after an idle period', covering when to use and when not to rely on it. No alternative tool is referenced, but none is needed given the unique release functionality.

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
Behavior4/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 does well: it states idempotency for on/off, discloses that rotate disables auto-rotation, and describes the return payload (ok, action, screenState, orientation?). This is genuinely useful behavioral context beyond what any annotation could summarize. Minor gap: doesn't note whether screen power operations require wake lock or affect ongoing tests, but the core 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?

Three sentences with zero redundancy. Each sentence earns its place: one defines the overall scope, one enumerates the three actions with their behavior, and one states the return payload. Front-loaded with the core purpose and immediately actionable 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 3-parameter tool with full enum coverage and no output schema, the description is quite complete. It covers the action semantics, the conditional parameter relationship, the auto-rotation side effect, and the return shape. It's slightly weaker on failure-mode context (e.g., what happens if device asleep during rotate, or network/permission errors), but for this simplicity level the description 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% and enums cover both action and orientation constraints. The description adds meaningful semantics beyond the schema: it clarifies the conditional requirement that orientation is required when action=rotate and ignored otherwise, and explains the actual effect of each action value (wake vs sleep vs orientation change). This adds real value above the raw enum 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 (Control) with a clear resource (device screen power and rotation) and enumerates all three actions (on/off/rotate) with precise behavior for each. It clearly distinguishes from sibling device_* tools like device_battery, device_screenshot, and device_toggle_wifi since it's specifically about screen power and orientation.

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 explains what each action does in detail, including idempotency behavior and side effects (auto-rotation gets disabled for rotate). However, it doesn't explicitly say when to prefer this over alternatives, nor when NOT to use it. For a device-control tool with no natural sibling conflict, the practical guidance is embedded but not explicit about exclusions or prerequisites (e.g., requiring a launched session).

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.

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.
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 transparently discloses the default behavior (bundled element list), the coordinate space (device-tap coord, no scaling), and the performance tradeoff (includeElements fetch adds a roundtrip). Could mention image format/resolution details, but what's disclosed is genuinely useful and actionable.

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 information-dense and every clause earns its place, but it runs slightly long (4-5 sentences) and front-loads the core purpose while pushing alternatives to the end. No filler or repetition—just detailed but not bloated. Minor deductions for 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 2-param tool with full schema coverage and no output schema, the description is complete: it explains default behavior, coordinate-space caveat, performance tradeoffs, when to use alternatives, and how to opt out of the bundled fetch. It compensates fully for the missing output schema by describing the return shape (JPEG + element list with bounds). No gaps remain.

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 both parameters (udid, includeElements) documented in the schema. The description adds context for includeElements beyond the schema ('Set false to save tokens on screens you only need to look at') which is valuable, but udid gains no additional meaning. Baseline 3 is appropriate given full schema coverage plus a small bonus from the includeElements 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?

Clear verb+resource ('Take a screenshot of a device') with specific detail: returns JPEG plus a labeled UI element list. Distinguishes from siblings like device_screen, android_mjpeg_screenshot, and ios_screenshot by explaining the bundled element list that eliminates a roundtrip to device_page_source. The description names sibling alternatives explicitly.

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 device_tap_by_text for elements with a visible label; use these bounds only as a fallback.' Also names android_video_stream as the alternative for continuous observation/debugging stuck flows, and explains when to set includeElements=false. This is model-tier usage guidance.

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

device_scrollBInspect

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
Behavior3/5

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

No annotations are provided, so the description carries full burden of behavioral disclosure. It does mention the tool operates in video coordinate space automatically, which is meaningful behavioral context. However, it doesn't disclose scroll duration/speed, whether the action is animated or instant, whether it's destructive/reversible, or any physical gesture nuances. For a scroll gesture tool with no annotation coverage, 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.

Conciseness4/5

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

The description is two sentences long with zero filler. It front-loads the core purpose ('Scroll the screen in a direction on an Android device') and adds one valuable behavioral detail about coordinate space. Efficient and well-structured, though it could potentially mention the amount parameter semantics more explicitly.

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?

This is a simple gesture tool with 3 parameters (2 required), full schema coverage, and no output schema. The description covers the core purpose and the important coordinate-space behavior. However, it doesn't clarify the relationship to the closely-named sibling device_scroll_to_element, which is a notable gap since agents must choose between them. For a simple tool, this is adequate but could be more 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 three parameters (udid, amount, direction). The description adds value by explaining the video coordinate space context for the direction semantics, but doesn't elaborate on the 'amount' parameter beyond what the schema provides (fraction of screen). Baseline 3 is appropriate given full 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 states a specific action (scroll the screen) on a resource (Android device) in a direction, which is clear. It distinguishes from sibling tools like device_swipe by noting 'No coordinate math needed', though it doesn't explicitly name the alternative tool (device_scroll_to_element) that handles scrolling to a specific element rather than a direction.

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 about the video coordinate space automatically being handled, which is a helpful usage detail. However, it doesn't explicitly differentiate when to use this tool versus device_scroll_to_element or device_swipe, nor does it state when NOT to use it. Usage context is implied but not explicit.

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
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 'ANY' matching semantics, coordinate units (PHYSICAL pixels), and scroll cap (maxScrolls). However, it doesn't disclose side effects (actual UI scrolling changes visible state), failure behavior when element not found after maxScrolls (return null? error? empty?), or whether scrolling resets to top first. These gaps matter for a tool that physically manipulates the screen.

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?

Two sentences, front-loaded with purpose and key semantics. The 'ANY of the provided locators' and 'PHYSICAL pixels' details are high-value. Slightly compact—could add a failure-mode sentence—but every existing word earns its place with no waste.

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 6-param tool with 100% schema coverage and no output schema, the description covers the essential mechanics (matching, scrolling, coordinates). But there's no output schema so the return format (e.g., {x, y} structure) is undisclosed, and failure behavior when element not found is unstated. Given the tool physically manipulates a device and has meaningful failure cases, this is a moderate 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 coverage is 100%—all six parameters have descriptions. The description adds the 'ANY' OR-matching semantics and 'PHYSICAL pixels' coordinate note, which is genuinely useful beyond the schema. But it doesn't clarify edge interactions like what happens if no locators are provided at all (only udid required), or whether direction 'up' vs 'down' resets scroll position first. Baseline 3 is appropriate given 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?

Specific verb+resource: 'Scroll the screen until an element matching ANY of the provided locators appears, then return its coordinates in PHYSICAL pixels.' This clearly distinguishes from siblings like device_scroll (mere scrolling), device_find_element (no scrolling), and ios_scroll_to_element (iOS platform). Mentions the 'ANY of the provided locators' logic which differentiates it from a single-locator find.

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 context: scrolls until element appears, up to maxScrolls times, returns coordinates. It's implicit that this is for Android/iOS device UI automation vs web alternatives. However, it doesn't explicitly state when-not-to-use this vs device_find_element or device_wait_for_element, nor spell out that this is Android-specific (no 'Android' word, though siblings iOS have separate ios_scroll_to_element).

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"
Behavior5/5

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

With no annotations provided, the description carries full burden of behavioral disclosure, and it delivers richly. It reveals the internal mechanism (bundled locale-change helper with reflection into ActivityManagerNative.updateConfiguration), persistence behavior (survives reboot), and multiple caveats: Samsung One UI/MIUI may re-apply their locale, Android 14+ requires hidden_api_policy=1 (set automatically), and MDM-managed devices may refuse CHANGE_CONFIGURATION grant. This is comprehensive behavioral 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 dense, well-organized paragraph of ~75 words covering purpose, mechanism, alternative, and caveats. Every sentence earns its place—there's no filler. Information is front-loaded with the primary purpose first, then the alternative, then caveats. This is efficient and effectively 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?

Given this is a persistent, device-wide mutation tool with no annotations and no output schema, the description is remarkably complete. It covers the action, persistence, mechanism, affects-all-apps scope, alternatives, and platform-specific caveats (Samsung/MIUI, Android 14+, MDM). For a tool of this complexity and side-effect profile, the description provides agent-burden-bearing context that fully compensates for 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 coverage is 100%, so the schema fully documents all 4 parameters (udid, language, country, script). The description adds implicit context about the language/country usage but doesn't add parameter-specific detail beyond what the schema states. Per the rubric, with high coverage the baseline is 3, and the description doesn't substantially augment 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?

The description clearly states the purpose: 'Change the Android device's system language and locale' with explicit scoping (persistent, affects every app, survives reboot). It names the specific verb (change), resource (Android device's system language/locale), and key characteristics. It also distinguishes from sibling tool device_launch_app_in_language, which is named explicitly as the alternative for per-app testing.

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 when to use it (change whole device) and when NOT to: 'For per-app testing without changing the whole device, prefer device_launch_app_in_language'. It names the alternative tool directly and gives clear directive. This meets the highest tier of usage guidance with explicit when/when-not/alternatives.

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
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 excellently. It discloses side effects (auto-installs helper service on first call), version requirement (API 26+), app-wide scope, and the crucial limitation that mock-detection-aware apps will refuse the fix. This is exemplary transparency for a tool with 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.

Conciseness4/5

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

The description packs significant useful detail into three sentences without wasted words. It's slightly dense but every clause earns its place — scope, mechanism, version constraint, and limitations all covered with minimal fluff. Not maximally concise because the sentences are somewhat long, but highly efficient overall.

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 zero annotations, no output schema, and a tool that mutates device state, the description provides comprehensive context: what it does, how it works (bundled helper service), version requirements, scope, and inherent limitations. The isFromMockProvider caveat is exactly the kind of operational nuance an agent needs before invoking.

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 4 params (udid, latitude, longitude, accuracy) are already documented in the schema. The description adds no additional parameter-level meaning beyond what the schema provides, but the baseline of 3 is appropriate when the schema fully covers params.

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

Purpose5/5

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

The description specifies a clear verb+resource+scenario: 'Mock GPS coordinates on an Android device for testing location-aware apps.' It precisely distinguishes from siblings like ios_set_location and device_clear_location by naming the platform (Android) and the mock mechanism. This is excellent purpose clarity.

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 (testing location-aware apps, API 26+ constraint, scope across apps). It doesn't explicitly name alternative tools or when NOT to use it, though the ios_ siblings make the Android scope implicit. The 'apps that check isFromMockProvider' warning effectively signals limitations on when this mock approach works.

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

device_shellCInspect

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
Behavior2/5

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

No annotations are provided, so the description carries full burden of behavioral disclosure. It doesn't mention that shell commands can be destructive, require special permissions (e.g., root/adb), may fail on locked devices, or that there are no restrictions on what commands can execute. For a potentially powerful command execution tool, this is a significant transparency gap.

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

Conciseness4/5

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

A single concise sentence that conveys the core purpose. Efficient and front-loaded. Could add usage guidance, but as a standalone description it's well-structured and free of waste.

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?

For a low-level shell execution tool with no annotations and no output schema, the description is under-specified. It doesn't mention return format, error handling, timeout behavior, or safety implications. Given the power of arbitrary shell execution, this warrants more context. A shell tool is inherently more complex and dangerous than a filtered list, yet gets less description than the TDQS 4.3 example.

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 and command) are documented in the schema. The description adds 'on an Android device' clarifying the target platform but adds nothing about command syntax, output format, or execution context beyond what schema provides. Baseline 3 is appropriate given full 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 (execute), resource (shell command), and target (Android device), with output returned. It distinguishes from ios_shell which targets iOS devices, though it doesn't explicitly name this sibling. This is clear but relies on the sibling name for differentiation rather than stating it.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives like device_info, device_panel, or other device-level commands. For a low-level shell tool that could overlap with many higher-level device tools, there's no guidance on when raw shell access is appropriate versus using dedicated tools like device_launch_app or device_key.

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
x1YesStart X coordinate
x2YesEnd X coordinate
y1YesStart Y coordinate
y2YesEnd Y coordinate
udidYesDevice serial number (UDID)
durationNoSwipe duration in ms (default: 500)
Behavior3/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 gives one valuable behavioral detail: the coordinate space is physical pixels from device_page_source, eliminating scaling guesswork. However, it doesn't disclose what happens on failure (e.g., swipe off-screen), whether there are bounds/clamping behaviors, or what the return value indicates about success or failure.

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 tight sentence that efficiently conveys the core action plus the essential coordinate-system clarification. Every word adds value. It could potentially add a brief note on alternatives or error conditions, but the current format is appropriately concise and 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 100% schema coverage and no output schema, the description adequately covers the main concerns: what it does, coordinate semantics, and the physical-pixel clarification. It's missing edge-case guidance (off-screen coordinates, minimal swipe distance to register, interaction with duration) but is reasonably complete for its 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 schema already documents all 6 parameters. The description adds value by clarifying that x1/y1/x2/y2 are physical pixels referencing device_page_source bounds, which goes beyond the schema's generic 'Start X coordinate' descriptions. However, duration's default value (500ms) is only in the schema, and the description doesn't add guidance on reasonable ranges or the effect of duration on swipe 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 clearly states the verb (swipe), the resource (device screen), and the coordinate semantics (physical pixels from device_page_source bounds). It distinguishes itself from related tools like device_tap, device_scroll, and device_drag_drop by specifying swipe directionality with start/end coordinates. The mention of 'no scaling needed' adds a critical usability 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 explains the coordinate system (physical pixels matching device_page_source bounds), which is essential context for correct invocation. However, it doesn't explicitly state when to prefer this over device_scroll, device_drag_drop, or the iOS-specific ios_swipe variants, nor when NOT to use it. The coordinate clarification helps but doesn't differentiate from alternative gesture tools.

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.

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)
Behavior5/5

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

No annotations are provided, so the description carries full behavioral disclosure burden. It reveals a non-obvious 3-second session-start cost on first call, the coordinate space transformation semantics (tap-coord vs visual pixels), and explicitly warns about the #1 failure mode of skipping scale. This is exceptionally transparent 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 description is dense with high-value content and front-loaded the core purpose immediately. It's longer than ideal but every section earns its place: coordinate sources, priority order, fallback formula, and a concrete warning. Well organized with headers. Slightly verbose for the format but justified given the complexity of coordinate-space mapping.

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-param tool with no output schema, this description is thoroughly complete. It covers the coordinate space ambiguity, the scaling formula, the session-start cost, the primary/fallback sourcing strategy, and the most common failure mode. The agent has everything needed to invoke correctly without guessing. This exceeds completeness expectations for a simple tap 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% with parameter descriptions, and the schema fields (udid, x, y) are self-explanatory. The description adds substantial value by explaining the coordinate computation formula (scale = device_width / rendered_chat_width) and warning not to assume constants. The description supplements rather than repeats the schema — a slight deduction since parameters themselves are covered well by 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 'Tap at (x,y) coordinates on a device screen' with a specific verb+resource. It distinguishes itself from siblings like device_tap_by_text, ios_tap, and device_long_press by defining the coordinate space explicitly. It also identifies its coordinate source relationship to device_page_source and device_screenshot.

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 with a priority order: use page_source bounds as PRIMARY source, and visual estimate only as FALLBACK for widgets not in page_source. It names the specific sibling tools to reference (device_page_source, device_screenshot) and explains which to use when, including the coordinate-space relationship.

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)
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 transparency burden and delivers comprehensively. It discloses the ~150ms focus-settle wait for EditText matches, the candidate-ranking heuristic (interactive widgets beat passive labels), auto-scroll behavior, and the critical parallel-call race condition warning about device_type. This far exceeds what structured fields would convey.

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 substantive but dense, packing multiple important behavioral caveats into what could be split more cleanly. The critical sequential-ordering warning is front-loaded after the focus-settle note, which is appropriately prominent. Every sentence carries information, though the length (approaching 700 characters) makes it a heavier read than strictly necessary; the CRITICAL note is slightly buried midway rather than leading.

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 7-parameter tap tool with no output schema, the description is remarkably complete: it covers selection strategy, fallback path, disambiguation rules, timing behavior, and concurrency constraints. Given the tool's complexity (scanning logic, ranking, auto-scroll, focus handling), this description provides everything an agent needs 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 all 7 parameters are already documented in the input schema. The description adds value by explaining the semantic relationship between text/contentDesc parameters (both match via the 'text' param which 'matches text or content-desc'), clarifies the resourceId pinning behavior for multi-match disambiguation, and explains autoScroll/maxScroll intent. Minor deduction: scrollDirection semantics are clear from schema alone and don't need description reinforcement.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships 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 ('Find a UI element by text, content-description, or resource-id and tap it') and clearly distinguishes this from the sibling device_tap(x,y) tool. It explicitly names the alternative (device_tap with bounds from device_page_source) and explains when each should be used, providing strong differentiation.

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 ('NOT always usable — for elements without stable text/contentDesc/resourceId... use device_tap instead'), names the exact alternative tool, describes candidate ranking behavior, and gives a CRITICAL sequential-ordering instruction relative to device_type. This is exemplary usage guidance exceeding the rubric's 'explicit when/when-not/alternatives' bar.

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)
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 the multi-step behavior (control channel, am force-stop fallback, pidof verification), calls out edge cases (Samsung FGS resurrection), surfaces diagnostic info, and defines the return contract explicitly with the key names. This is excellent behavioral 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?

Three sentences, front-loaded with the core purpose, followed by mechanism and return value. Efficient and well-structured. Slightly longer than strictly necessary but every clause earns its place, especially the diagnostic edge-case detail and the return 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 2-param tool with no output schema, the description is thorough: it explains the mechanism, verification, failure handling, and return contract. The return keys ({stopped, wasRunning, transport, retryRecommended}) compensate for the missing output schema. One minor gap: it doesn't state what happens when the app isn't running (i.e., stopping a non-running app), but the wasRunning return field partially covers 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%, with both parameters (udid, packageName) already described in the schema. The description adds the packageName example context but does not substantially deepen meaning beyond the schema, which already adequately documents both parameters. Baseline 3 is appropriate 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 uses a specific verb ('force-stop') plus a resource ('Android app by package name'), clearly distinguishing this from sibling tools like device_launch_app, ios_terminate_app, and device_clear_app_data. It states exactly what the tool achieves and how.

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 case (force-stopping a running Android app) but does not explicitly contrast it with alternatives like device_clear_app_data, device_launch_app, or ios_terminate_app. It provides internal fallback strategy details but no when-to-use vs when-not-to-use guidance relative to siblings.

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
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 state-changing nature (enable/disable) but doesn't mention potential side effects such as disconnecting paired devices, time delays, or permission requirements. For a state-modifying operation with zero annotation coverage, the description could note more 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?

A single concise sentence that states exactly what the tool does with zero wasted words. Front-loaded with the verb and resource. Appropriate length for a simple two-parameter toggle 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?

For a simple toggle tool with 2 fully-documented parameters and no output schema, the description is mostly adequate. However, it doesn't address potential failure scenarios (e.g., unsupported devices, airplane mode conflicts, toggling requiring additional permissions) or the expected return/confirmation behavior. The description covers the core purpose but misses edge-context that would aid the agent.

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

Parameters3/5

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

Schema description coverage is 100% — both parameters (udid and enable) are documented in the schema. The description adds the high-level purpose but repeats essentially the same information ('enable' maps to 'true to enable'). Baseline 3 is appropriate since the schema carries the parameter documentation weight; the description offers minimal additional semantic value.

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

Purpose4/5

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

The description clearly states the tool's function: 'Enable or disable Bluetooth on an Android device.' It uses a specific verb (Enable/disable) with a clear resource (Bluetooth) and platform (Android). It doesn't explicitly distinguish from the sibling tool device_toggle_wifi, though the resource (Bluetooth) is evident enough to differentiate.

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

Usage Guidelines3/5

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

The description implies Android device usage through explicit platform mention, but provides no when-to-use guidance, no exclusions, and no alternatives. It doesn't note any prerequisites like the need for root/adb permissions or whether toggling affects device state beyond the obvious. Fine for a simple toggle but lacks explicit guidance.

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

device_toggle_wifiBInspect

Enable or disable WiFi on an Android device.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesDevice serial number (UDID)
enableYestrue to enable WiFi, false to disable
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 behavior (enable/disable WiFi) but doesn't disclose side effects (e.g., whether this affects current network connections, whether existing connections are restored on re-enable, or whether it requires specific permissions/root). For a mutating device-setting tool with zero annotation coverage, 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?

One declarative sentence, zero waste. Every word earns its place. The structure is clear and immediately readable after the tool name.

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 boolean toggle with full schema coverage, the description is mostly adequate. However, it omits contextual details like the effect on existing WiFi connections, whether toggling is instantaneous, or any verification step the agent should perform afterward to confirm WiFi state changed. Given sibling device_toggle_bluetooth exists, a brief cross-reference would improve 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 coverage is 100%, with both parameters (udid and enable) documented. The description explains the toggle semantics for 'enable' (true/false), which adds a small amount of meaning beyond the raw schema. However, it doesn't add detail beyond what the schema already conveys, so the 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?

Clear verb+resource: 'Enable or disable WiFi on an Android device.' It states the action (toggle) and the target (WiFi) and platform (Android). Distinguishes from sibling device_toggle_bluetooth by naming the specific radio being toggled, though it doesn't explicitly contrast with 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 Guidelines2/5

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

No guidance on when to use this tool versus alternatives. It doesn't mention when you'd need WiFi toggled (e.g., for network testing), nor does it exclude cases like when device_toggle_bluetooth or device_network_info would be more appropriate. It's clearly a device-level setting toggle, so some usage is implied, but no explicit context or exclusions are given.

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.

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)
Behavior5/5

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

Rich behavioral disclosure beyond annotations: racing behavior and its consequences, method-specific failure modes (Samsung IMEs intercepting . / @ / _ as autocomplete/action shortcuts), auto-fall-back to IME for non-ASCII, and clearFirst reading current length from UI to send exactly matching backspaces. All of this adds substantive context in absence of annotations, which carry zero information here.

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?

Front-loaded with the critical ordering warning first, then method options, then optional params. The content is dense but deliberately organized. Slightly long, though every sentence earns its place — the race-condition example and Samsung IME caveats are high-value behavioral details, not padding.

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-param text-input tool with no output schema and no annotations, the description is comprehensive: covers all three methods with reliability and device-specific caveats, explains the interplay with focusing tools, documents optional params, and handles edge cases (non-ASCII fallback, Samsung IME interceptions). No obvious gaps remain for a correct agent 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?

While schema coverage is 100%, the description adds material meaning beyond the schema: it explains WHY keys is the default (decomposes ASCII to keycode events), describes the non-ASCII fall-back mechanism, clarifies what clearFirst actually does (reads length from UI and sends matching backspaces), and defines pressKey behavior for common type-then-submit flows. This is genuinely additive guidance, not schema restatement.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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+object ('Type text into the focused field on Android'), clearly stating the resource (focused Android field). It distinguishes from sibling tools like device_tap/device_tap_by_text by explicitly warning to call this AFTER those complete, and the method options differentiate it from ios_send_keys, session_send_keys, etc.

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 the tool (after device_tap/device_tap_by_text completes), warns against parallel invocation with a concrete observed failure case (banking-app login race condition with concatenated username+password), and provides per-method usage guidance including which to prefer ('keys' default most reliable) and Samsung IME caveats for shell and ime methods.

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

device_uninstall_appCInspect

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)
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 (uninstall) but doesn't disclose side effects like loss of app data, whether it requires the app to be currently installed, whether installation state affects the operation, or resulting behavior (shell-level vs. full uninstall). For a destructive operation with zero annotation coverage, this is a significant transparency gap.

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

Conciseness3/5

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

The description is one short sentence with zero waste. However, for a destructive operation on a real device, this brevity comes at the expense of useful information like result expectations or error conditions. It's efficient but arguably under-specified for a mutating 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?

For a destructive tool with no annotations, no output schema, and a domain (device management) where correctness matters, the description is too thin. It doesn't explain return behavior, error cases (package not found), or whether app data is removed. While the tool is simple (2 params), the absence of behavioral guarantees for a destructive action makes this incomplete. A single sentence noting the destructive nature and result format would materially 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?

Schema description coverage is 100% — both udid and packageName have descriptions in the schema. The packageName example 'com.example.app' is helpful. The description itself adds minimal parameter semantics beyond the schema, so the baseline of 3 applies since the schema already does the heavy lifting. Neither the schema nor the description explains what happens if the package isn't installed.

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: 'Uninstall an app from an Android device by package name.' It clearly distinguishes this from sibling tools like ios_uninstall_app (different platform) and device_terminate_app (which terminates rather than uninstalls). It's specific about the mechanism (by package name). It loses a point for not explicitly calling out the Android-specific scope in the description title, though the tool name and description make it clear.

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 doesn't mention that ios_uninstall_app exists for iOS devices, nor does it distinguish from device_terminate_app (which stops an app rather than removing it) or app_delete/app_upload for generic app management. No prerequisites or side effects (e.g., requiring the app to be installed first, or that this removes shared data) are mentioned.

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)
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 polling/blocking behavior ('poll until... or timeout'), default timeout via schema, and the physical-pixel coordinate return format. This is meaningful behavioral context beyond the schema, though it doesn't state failure behavior on timeout or whether it throws an error.

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?

Two concise sentences that are front-loaded with the core behavior. Every clause adds value — the physical-pixel detail is a useful hook to device_tap. Could arguably be a 5, but it could have mentioned default values or failure semantics in passing; still 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 5-param polling utility with no output schema and no annotations, the description explains the mechanism (poll, timeout), the return format (physical coordinates), and the primary consumer (device_tap). It's slightly light on timeout failure behavior and doesn't hint at output schema, but the core usage loop is fully described.

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 well-described params (text, resourceId, udid, timeout, interval all have descriptions). The description adds the key semantic that text accepts 'visible text or content-desc' and that coordinates are in physical pixels, which enriches value. Baseline 3 applies since schema already does the heavy lifting; description adds modest 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?

Description states a specific verb+resource: 'Poll the UI until an element with the given text or resource-id appears, or timeout.' It clearly distinguishes from siblings like device_find_element (which snapshots) and device_tap (which acts on found coordinates), and ties directly to device_tap output format.

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 'until X appears, or timeout' describes the polling/waiting behavior clearly, and the note that it returns coordinates 'ready for device_tap' establishes a clear downstream usage pattern. However, it doesn't explicitly state when-not to use it vs. device_find_element, device_elements_in_region, or device_scroll_to_element, which are close siblings.

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
Behavior4/5

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

With no annotations provided, the description bears the full burden of behavioral disclosure. It is clearly a read operation (lists references), discloses the ownership requirement, and specifies what data is returned. While it doesn't discuss errors (e.g., component not found, unowned component), the description covers the core behavioral contract reasonably well for a read-only 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.

Conciseness4/5

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

The description is dense and efficient — three sentences that cover purpose, return values, and a prerequisite without fluff. It could arguably front-load better by leading with the specific action before any context, but it does open with 'List every test step...' which is the strongest possible lead. No wasted sentences.

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 this is a simple read-only lookup with one parameter, full schema coverage, and no output schema, the description provides what's needed: the exact return fields (recording id, display id, name, step index), the reference type (COMPONENT_REF), and a usage context (deletion guard). A minor gap is the absence of error-path detail, but for a low-complexity 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 description coverage is 100%, and there's only a single parameter (componentId) which the schema fully documents as 'Component (fragment) recording ID to look up usage for'. The description reinforces that this is the fragment to look up. With full schema coverage and a single, self-explanatory parameter, the description adds little beyond the schema, 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 begins with a specific verb+resource: 'List every test step that references a given component (fragment) via a live COMPONENT_REF.' It clearly distinguishes itself by explaining it backs a deletion guard and returns specific fields (recording id, display id, name, step index). This is a well-scoped purpose that stands apart from its 170+ siblings by its specific domain (flow component references for deletion safety).

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 deletion-guard context ('a component in use cannot be deleted') which tells the agent when this is relevant, and states a clear ownership prerequisite ('must be a fragment owned by the authenticated user'). It doesn't name explicit alternative tools to use vs. not, but the deletion-guard framing provides clear contextual guidance for why and when to invoke this.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoX coordinate (tap/doubleTap/longPress/swipe start; assert target element)
yNoY coordinate (tap/doubleTap/longPress/swipe start; assert target element)
toXNoSwipe end X
toYNoSwipe end Y
textNoText to type (sendKeys)
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).
attributeNoAttribute to read for text assertions. iOS: label, value, name. Android: text, content-desc, resource-id. Defaults to platform primary text attribute when omitted.
assertTypeNoAssertion type (required when action=assert). exists/notExists check element presence; textEquals/textContains compare an attribute value.
durationMsNoSwipe/longPress duration ms (default 300)
recordingIdYesRecording ID from flow_recording_start
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 beyond the schema: automatic page source + element capture on each recorded step, coordinate space reference to windowSize, pressButton being 'performed live on the device,' assert performing NO device gesture but recording verification logic, and assertion failures marking steps FAILED with mismatch surfaced in errorMessage. These are meaningful behavioral disclosures not present in structured fields.

Agents need to know what a tool does to the world before 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 in the opening sentence, then uses a clean bulleted list for the 9 action types. Each bullet is one line or a short clause. Every sentence earns its place — the pressButton line adds platform mapping detail, the assert bullet explains replay-time verification. No filler, no repetition of schema content that wouldn't add 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 14-parameter, 9-action tool with no output schema and no annotations, the description is quite thorough. It covers usage context (during recording, referencing windowSize), all action types with their parameter requirements, platform differences, and assert/replay semantics. Minor gap: it doesn't explicitly document the recordingId parameter's purpose (though the schema's 'from flow_recording_start' covers it) or describe return values like step IDs. But given no output schema exists, this is a small omission.

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 on top: it clarifies which parameters apply to which actions (swipe needs toX/toY), clarifies coordinate space (video/iOS-automation referencing windowSize), explains defaults (attribute defaults to platform primary text, durationMs default 300), and elaborates on assertType semantics (exists/notExists vs textEquals/textContains comparison behavior). This exceeds what the schema alone 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 verb+resource statement ('Perform and record one action step on the device') and explains it does both the action AND the recording with automatic page source + element capture. It clearly distinguishes itself from sibling recording tools by being the step-recording action tool, while flow_recording_start, flow_recording_replay, etc. handle other phases. The 9 enumerated action types add substantial specificity beyond the schema enum.

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 this tool (during a recording session, referencing flow_recording_start's windowSize for coordinates). It thoroughly documents each action variant, including required parameters per action (swipe needs toX/toY) and platform differences (Android keycodes vs iOS native). However, it does not explicitly state when NOT to use this tool or mention alternatives like device_tap/device_swipe for non-recording gestures.

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
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 disclosure. It clearly states that all steps are lost (destructive behavior), which is effective. However, it doesn't disclose what happens to the recording state after cancellation (e.g., whether it can be restarted, whether recordingId becomes invalid, or side effects on the session). The core destructive nature is well conveyed, but additional lifecycle context 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.

Conciseness5/5

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

Two sentences, zero wasted words. The first states the action and consequence; the second provides the alternative. Every word 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 single-parameter destructive action with no output schema, the description is largely complete. The destructive consequence and the alternative path are both covered. The only minor gap is lack of detail on what happens to the recording resource afterward, but given the low complexity (1 param, no output), the description 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%, with the recordingId parameter clearly documented as 'Recording ID from flow_recording_start.' The description itself doesn't add parameter detail beyond what the schema provides, but the schema fully covers the single parameter, hitting 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 uses a specific verb ('cancel and discard') with a clear resource ('in-progress recording') and explicitly states the destructive consequence ('all steps are lost'). It also distinguishes itself from the sibling tool flow_recording_save, 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 instructs when NOT to use this tool and names the alternative: 'use flow_recording_save instead if you want to keep them.' This provides clear when/when-not guidance relative to the directly competing sibling tool.

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
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 that remaining steps are renumbered, the returned list reflects new 1-based indices, and deleting the appLaunch step (index 1) is rejected. This meaningfully exceeds schema info. Could add more (e.g., confirmation behavior, irreversible action warning), but the critical behaviors are disclosed.

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

Conciseness5/5

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

Four sentences, all substantive. Front-loaded with the primary action, then usage rationale with concrete examples, then behavioral notes on renumbering and the appLaunch restriction, then a pointer for obtaining the index. 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?

Complexity is moderate (delete operation with renumbering behavior and a restriction). The description handles the important edge cases (appLaunch rejection, renumbering, index source). No output schema exists, but the description explains what the return reflects (renumbered step list). Could mention idempotency or failure behavior, but coverage is solid for this 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 both parameters are documented in the schema. The description adds that stepIndex should come from a flow_recording_action / flow_recording_get response, which is useful cross-tool context beyond the schema. However, it doesn't add format or meaning beyond what schema provides for either 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?

Clear verb+resource ('Delete one step from an in-progress recording'). Distinct from siblings (flow_recording_replace_step, flow_recording_insert_component, flow_recording_save) since it specifically removes a step from an in-progress recording before save. Also states the limitation (cannot delete appLaunch step, index 1).

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 states when to use: removing a mis-recorded step without discarding and re-recording the whole flow. Provides concrete examples (assert bound to wrong element, stray tap). Context that it must happen before flow_recording_save and references sibling tool flow_recording_action/flow_recording_get for obtaining stepIndex. Doesn't explicitly name alternatives, but the flow-recording operation family is clear.

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
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 behavioral burden, which it handles reasonably well. It discloses the mutation behavior (replaces the COMPONENT_REF step, drops linkage), the limitation (one level only), and the auth requirement (user ownership). It doesn't describe reversibility or whether the original component remains intact, leaving some gaps, but the core 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 well-structured sentences with zero wasted words. It front-loads the action, then covers consequences, limitations, and requirements efficiently. Every sentence contributes substantive 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 annotations and no output schema, the description does most of the work, and it covers the key concerns: the semantic meaning of detach, the one-level limitation, ownership requirements, and post-detach behavior. It doesn't specify error conditions or whether there's an inverse operation to re-link, but for a 2-parameter tool with a clear scope this is a solid, near-complete description.

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. The description adds context around stepIndex ('COMPONENT_REF step to detach') and recordingId ('Test recording ID containing the component reference') but this largely mirrors schema language. The description's context about what 'detach' means adds some value beyond the schema, warranting a 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 specific verb 'Detach (materialize) a component reference' with the resource ('in a test') and the outcome (replaces live COMPONENT_REF with private editable copy). It distinguishes from sibling tools like flow_recording_insert_component and flow_recording_replace_step by explaining this is specifically about breaking the component linkage.

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 what happens after detaching (future edits no longer propagate), provides the 'one level only' constraint, and states the ownership requirement ('must belong to the authenticated user'). It implies when to use (when you want editable private steps rather than a shared component), though it doesn't explicitly name a non-usage case or alternative tool.

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)
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 does state that the tool verifies the recording belongs to the authenticated user, which is a meaningful behavioral disclosure. However, it does not discuss privacy implications of ownership verification, failure behavior (what happens on non-owned or missing recordings), or pagination for large recordings.

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?

Two sentences, front-loaded with the core action and then details of what is returned. Efficient and information-dense without padding. Only minor loss for not being split into clearer sub-sections.

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 tool with 100% schema coverage and no output schema, the description adequately covers purpose, verification behavior, and return contents. The ownership verification is a valuable extra detail. It's largely complete for the tool's simplicity and rich 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 coverage is 100% and there is a single parameter (recordingId) fully described as 'Flow recording ID (from flow_recording_list)'. The description adds the context that the recording's steps are returned, but the schema already explains the parameter adequately. 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 fetches a specific flow recording with its steps, verifies ownership, and returns metadata plus ordered steps with action types, coordinates, element info, and timestamps. The verb 'Get' + resource is specific, and it clearly distinguishes from siblings like flow_recording_list, flow_recording_replay, and flow_recording_save.

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 a read operation for viewing a recording's details after obtaining its ID from flow_recording_list (as noted in the schema param). However, there's no explicit when-to-use vs. alternatives guidance, no exclusions, and no mention of how it differs from flow_recording_replay or other step-manipulation tools.

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)
Behavior4/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 meaningful behavioral traits: the component stays linked (updates propagate to all tests), the reference expands at replay time, and a user-ownership constraint exists ('both must belong to the authenticated user'). This is solid behavioral disclosure for a mutation operation, though it doesn't address reversibility or failure behaviors.

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 tight paragraph covering purpose, linking behavior, replay expansion, param bindings, and ownership constraint. It's front-loaded with the core purpose. Slightly dense but 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?

The tool is moderately complex (4 params, nested object paramBindings, ownership constraints, live-reference semantics), and the description covers the live-linkage behavior, replay expansion, param substitution, and auth requirement. No output schema exists, so the description could note what the operation returns, but the behavior is otherwise well 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?

Schema description coverage is 100%, so each parameter is already documented in the schema. The description adds the paramBindings semantics ({{name}} placeholders) which complements but slightly overlaps the schema. Since all 4 params are fully documented in-schema and the description reinforces their 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 clearly states the tool inserts a LIVE reference to a reusable component into a saved test after a given step, differentiating it from copying/detaching behaviors. It clarifies the linked-not-copied semantics and expansion at replay, distinguishing it from sibling tools like flow_recording_detach_component and flow_recording_delete_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 explains when to use it (inserting a reusable component reference) and how it differs from copying ('not copied — stays linked'). However, it doesn't explicitly name alternative tools or provide negative guidance about when NOT to use it, though the flow_recording_detach_component sibling clearly covers the inverse operation.

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

flow_recording_listBInspect

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
Behavior3/5

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

With no annotations provided, the description bears full burden for behavioral disclosure. It states it returns 'recording metadata including name, platform, device, step count, and timestamps' which gives some output expectations. However, it doesn't disclose auth requirements beyond 'authenticated user', default result limits, ordering behavior, or error semantics. Reasonable but incomplete.

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

Conciseness4/5

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

Single concise sentence that front-loads the primary action and follows with useful return-value context. No wasted words or redundant restatement of the tool name. Efficient and readable.

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 list tool with a rich input schema (5 well-documented optional filters) and no output schema, the description is adequate but not complete. It covers the core purpose and return metadata but omits details like default pagination behavior, whether results are ordered, and how to combine filters. Given no annotations, the description could reasonably disclose rate/size limits or result truncation 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?

Schema description coverage is 100%, so the schema fully documents all 5 parameters. The description adds the return-metadata context (name, platform, device, step count, timestamps) which helps an agent understand what fields might be present. Baseline 3 is correct since schema handles parameter documentation, though the description could note defaults or combination semantics for limit/offset.

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 flow recordings belonging to the authenticated user, with a specific verb ('List') and resource ('flow recordings'). It distinguishes from siblings by clarifying scope (authenticated user's recordings), which differentiates from flow_recording_get (single) and flow_recording_start (create). However, it doesn't explicitly contrast against the many related flow_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 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 vs alternatives like flow_recording_get, flow_recording_replay, or device_record_list. It mentions filtering parameters implicitly through the 'including... metadata' phrase but offers no exclusions or alternative tool references. Context for pagination or default behavior is absent from the description body.

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 target element)
yNoY coordinate (tap/doubleTap/longPress/swipe start; assert target element)
toXNoSwipe end X
toYNoSwipe end Y
textNoText to type (sendKeys)
actionYesAction type to record in place of the existing step
waitMsNoWait duration ms (for wait action)
keyCodeNoAndroid keycode (keyPress, e.g. 3=HOME, 4=BACK)
keyNameNoHardware button name for pressButton. Required when action=pressButton.
expectedNoExpected value (required for textEquals and textContains assertions).
attributeNoAttribute to read for text assertions. iOS: label, value, name. Android: text, content-desc, resource-id.
stepIndexYes1-based index of the step to replace
assertTypeNoAssertion type (required when action=assert).
durationMsNoSwipe/longPress duration ms (default 300)
recordingIdYesRecording ID from flow_recording_start
Behavior4/5

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

No annotations were provided, so the description carries the full burden. It explicitly discloses that the action is performed live on the device, that replacing appLaunch step (index 1) is rejected, and that it shares action params with flow_recording_action. A minor gap is it doesn't state return format or failure behavior if the recording 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?

Four sentences, all informative. Each sentence earns its place: the operation description, the live-execution caveat, the use case, the appLaunch restriction, and the param cross-reference. No padding 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 complex tool with 15 params and no output schema, this description is highly complete. It covers the key behavioral constraints (live execution, appLaunch restriction, in-place overwrite), the relationship to sibling tools (flow_recording_action, flow_recording_delete_step, flow_recording_save), and points to the shared param contract. Schema covers all params so no missing parameter documentation.

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 context about stepIndex being 1-based (in schema) and that action accepts the same params as flow_recording_action, but doesn't add meaning beyond what the schema already documents for most parameters. The 'same action params' cross-reference is helpful but the schema already covers all parameters in 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 uses a specific verb+resource ('Replace one step of an in-progress recording') and clearly states what happens: performs the action live then overwrites the step at stepIndex instead of appending. It distinguishes from flow_recording_action by explaining the difference (overwrite vs append) and explicitly names the sibling 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 excellent when-to-use guidance: 'Use this to fix a mis-recorded step... in place rather than deleting + re-recording + reordering.' It also names the alternative behavior (flow_recording_action) and the timing constraint (before flow_recording_save). This exceeds typical guidance.

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)
Behavior4/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 important behaviors: coordinate fallback mechanism, per-step pass/fail result summary, and that validation failures are auto-skipped so replay never blocks. This is genuinely useful 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?

Three tightly-written sentences, each carrying distinct information: what it does, how it returns results, and the non-blocking behavior. Zero 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?

The tool has no output schema but the description explains the return format (full result summary with per-step pass/fail status). It covers the core behavior, non-blocking failure handling, and coordination fallback. Could add explicit notes about device prereqs or interaction with flow_replay_status, but generally complete for a replay 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 documents all 5 parameters well. The description adds context around validateElements (confirming failures auto-skip) and platform auto-detection, but mostly reinforces what the schema already states. 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 the tool replays a flow recording on a device, executing steps in order with element locators and coordinate fallback. It distinguishes reasonably from siblings like flow_replay_start/flow_replay_abort, though it doesn't explicitly contrast with flow_replay_start, making the differentiation somewhat implicit given flow_replay_start is in the 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 Guidelines4/5

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

The description indicates this is a single-invocation replay of an existing recording, contrasted implicitly with flow_replay_start/abort/status which appear step-oriented. It conveys the use case (replay a recording with auto-skipped validation) but doesn't explicitly name alternatives or state when not to use 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_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)
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 read-only nature implicitly ('List', 'Returns one row per replay') and the user-scoping constraint, and notes it returns durationMs (a computed value). However, it does not describe pagination behavior fully, ordering guarantees beyond 'newest first' being in the schema, or what happens when there are zero replays. The lack of a true statement about non-mutating behavior and no explicit side-effect disclosure is a moderate gap for a tool with no 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 a tight 3-sentence block with no filler. It front-loads the core purpose, then delivers return-value details, then use cases. Every sentence earns its place without redundancy or verbosity.

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-style tool with 2 well-documented parameters and no output schema, the description is complete. It specifies the return shape (one row with id, status, totals, timestamps, durationMs), the use cases, and the user-filtering behavior. There is little more an agent would need to know 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%, so both parameters (recordingId, limit) are already documented. The description adds context by linking recordingId to flow_recording_list output and mentions the default limit of 25 and newest-first ordering, which slightly enriches the schema's bare descriptions. But it adds minimal meaning beyond what the schema already provides, so the baseline of 3 holds.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships 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 all replay runs of a saved recording'), specifies the resource (recording run history), and details what one row returns (id, status, totals, timestamps, durationMs). It also distinguishes itself from the sibling flow_replay_summary and flow_recording_replay by focusing on run history/trend analysis rather than triggering or summarizing a single replay.

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 use cases ('Useful for trend analysis... and finding the most recent failure to drill into') and states the scope ('Filtered to the authenticated user'). This gives clear guidance on when to invoke this tool for historical/analytical purposes versus the sibling replay tools.

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
Behavior4/5

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

With no annotations provided, the description carries full burden. It clearly discloses mutation (reverts/restores content), the version limit (last 10), ownership requirement, and error behavior (not-found for unknown recording/version). This is solid behavioral disclosure. Could be slightly higher if it noted data loss implications or whether revert itself creates a new snapshot, but current coverage is good.

Agents need to know what a tool does to the world before 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 filler. Every sentence adds value: what it does, how the versioning works, and the ownership/error behavior. Front-loaded with the primary action. Zero waste.

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 moderately complex tool (revert semantics with versioning) but has only 2 well-documented params and no output schema. The description covers: the operation scope, snapshot mechanics, ownership constraint, and failure modes. Completeness could improve by noting whether the revert itself pushes a new snapshot onto the version stack (which would affect state), but the description is substantially complete 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 both parameters are already documented in the schema. The description adds the semantic that 'version' references a snapshot number and that 'recordingId' identifies the recording, but beyond that it doesn't add format/syntax details the schema lacks. Baseline 3 is appropriate given 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?

Description clearly states the verb ('Revert'), resource ('test recording'), and specific scope: restoring steps and meta (name/category/tags) from a stored version snapshot. It distinguishes from siblings like flow_recording_save, flow_recording_get, and flow_recording_delete_step by specifying it's a version-restore operation. Clearly a revert/undo action within the flow_recording 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 explains the snapshot mechanism (written on every mutating save, last 10 versions kept), which gives the agent context for when this tool is applicable. It also mentions ownership constraint (must belong to authenticated user) and not-found behavior. However, it doesn't explicitly state when NOT to use it or nominate alternatives (e.g., using flow_recording_save to save a new version instead), so it lacks the explicit exclusion/differentiation that would earn a 5.

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
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 of behavioral disclosure. It does meaningfully disclose the non-obvious behavior of waiting for pending background captures (page source + screenshots) before persisting, which is valuable sequencing context an agent wouldn't otherwise know. It implies a write/persist operation through 'Save to database'.

Agents need to know what a tool does to the world before 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 zero wasted words. Front-loaded with the core purpose, followed by the key behavioral detail about waiting for pending captures. 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 is complete enough for this tool: both parameters are covered at 100% schema coverage, no output schema exists so return values need no explanation, and the critical behavior (waiting for background captures) is disclosed. It's a simple save operation in a broader workflow, and the description covers what matters.

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 (name, recordingId) already well-described in the schema. The description adds minimal value beyond the schema, though the recordingId is clearly tied to flow_recording_start in the schema itself, giving the lifecycle 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 uses a specific verb+resource combination ('Save a completed recording to the database') and clearly distinguishes the tool's lifecycle role. It positions this as the terminal persistence step in the flow-recording workflow, clearly differentiated from siblings like flow_recording_start, flow_recording_cancel, and flow_recording_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 this is used to finalize a recording, contrasting with start/cancel/list siblings in the flow_recording family. However, it doesn't explicitly state when NOT to use it or name alternative tools. The 'completed recording' qualifier provides clear context on when this 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_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
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 behavioral burden. It effectively discloses the key side-effect (automatically captures app state and adds an appLaunch step) and the return value (recordingId). It doesn't disclose failure states or required permissions, but the sequential handoff behavior is well explained. Slight deduction for not noting whether a recording must be cancelled/reverted if abandoned.

Agents need to know what a tool does to the world before 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 waste. First sentence states purpose plus the two key side effects; the second explains the return value and sequential workflow. 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 stateful start tool with no output schema and no annotations, the description does well: it covers the return value, the automatic side effects, and the follow-up workflow. It slightly lacks guidance on edge cases (e.g., what if a recording is already in progress, or how to abandon a started recording, which flow_recording_cancel covers).

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 4 parameters (name, udid, category, platform). The description adds no parameter-specific semantics beyond what the schema provides. Per the baseline rule for high coverage, a 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 ('Start recording') plus the resource ('new scenario on a device'). It clearly states what the tool does, describes side effects (captures initial app state, adds appLaunch step), and distinguishes it from sibling flow_recording_* tools by defining its role as the entry point that returns a recordingId.

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 usage flow: call this first to get a recordingId, pass it to flow_recording_action for each step, then flow_recording_save when done. This is clear when-to-use guidance and explicitly names the sequential sibling tools, which is strong alternative/sequential context.

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
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 it excels. It discloses the terminal-state no-op behavior, the watchdog bounds, and even the subtle detail that flow_replay_status may take a few seconds to reflect 'aborted' because an in-flight device call cannot be interrupted mid-flight. This is exemplary transparency beyond what any annotation would convey.

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 appropriately sized for the behavioral complexity it needs to convey—roughly three sentences that each earn their place. It front-loads the core purpose ('Abort an in-flight replay... Forces the replay to a terminal aborted state') and appends important caveats (no-op behavior, delay in status reflection). It's somewhat dense but not wasteful.

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 involves nuanced semantics (in-flight cancellation, terminal states, watchdogs, delayed status reflection) that the description captures comprehensively. Despite having only one simple parameter, no output schema, and no annotations, the description leaves no important behavior unexplained. It even anticipates a potential user confusion (why status might lag) and addresses it directly.

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 (replayId) is well documented in the schema. The description adds value by specifying the parameter's provenance (returned by flow_replay_start or flow_recording_replay), reinforcing where to obtain it. Since the schema already documents the parameter clearly and there is only one parameter, the description's added semantic context is solid without being redundant.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships 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 combination ('Abort an in-flight replay') and explicitly names the initiating tools (flow_replay_start, flow_recording_replay), which clearly distinguishes it from sibling tools like flow_replay_start and flow_replay_status. It also specifies the outcome (terminal 'aborted' state), 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 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 when a replay stops making progress (e.g., after a device/control-connection error) rather than polling flow_replay_status indefinitely. It also explains alternative behaviors—a watchdog (90s per-step, 15min overall) auto-terminates, and this tool is for cancelling sooner or cancelling an unneeded replay. It also conditions a no-op for already-terminal replays, which is valuable.

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.
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 of behavioral disclosure. It clearly discloses that it runs in the background, returns immediately, auto-skips validation failures, and implicitly signals a poll-able async workflow. The destructive nature of the resetAppData parameter is well documented within the param description, and the disabled-interactive-input limitation surfaces a genuine behavior an agent could otherwise be surprised by. It doesn't detail return format or error behavior, but given zero annotations the description 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?

Three tight sentences that earn their place: the action and return contract, the alternative-tool disambiguation, and the validation-failure behavior. No filler, no restating of the schema, and the most decision-relevant info (you get an ID back, poll separately) is front-loaded in the first sentence.

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

Completeness4/5

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

The tool returns a replayId and is part of a multi-tool workflow (flow_replay_start → flow_replay_status/abort/step). The description adequately ties into that workflow by naming the poll tool and explaining the async contract. With no output schema, the description carries the burden of explaining what the caller receives, which it does. It could describe the replayId's other downstream consumers (flow_replay_abort, flow_replay_step) and what the other 3 params do behaviorally, but the core workflow is sufficiently specified.

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 beyond the schema by explaining the orchestration contract (replayId → flow_replay_status poll loop) and gives semantic guidance in resetAppData about when to enable it (enrollment/first-run/logged-out flows) and the destructive consequence. The description enriches the two required params' purpose by framing them as the minimal invocation while the optional params clarify tradeoffs. The main upstream param (recordingId) could reference where recordings come from, but flow_recording_list is already named 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?

Description uses a specific verb ('Kick off a flow replay in the background') with a clear resource and key behavior (returns replayId immediately). It explicitly distinguishes from the sibling tool flow_recording_replay by noting it runs in background vs. monitoring live, and it clearly names what to pass the result to (flow_replay_status). This is a model example of a purpose that differentiates 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 states when to use this tool ('Use this instead of flow_recording_replay when you want to monitor live or do other work while the replay runs'), naming the exact alternative and the disambiguating condition. Also discloses the behavioral constraint that validation failures are auto-skipped due to MCP lacking interactive input, informing when the tool should NOT be expected to pause for confirmation. This fully satisfies the when/when-not/alternatives requirement.

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
Behavior4/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 verifies the replay belongs to the authenticated user, which is a meaningful behavioral constraint. It also states the return payload (step index, pass/fail, overall status). It doesn't mention rate limits or whether polling is expected to be called repeatedly, but the core behavioral traits are disclosed.

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

Conciseness5/5

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

Three sentences, zero waste. Front-loads the purpose, then the return data, then the behavioral guard. Every sentence earns its place and no redundant phrasing.

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?

No output schema exists, so the description explains return values (step index, pass/fail, overall status). Given the single parameter tool with clear schema coverage and no nested objects, the description adequately compensates for missing output schema. It doesn't describe pagination or error states, but this is a simple polling tool and the description 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 the schema already documents replayId as being returned by flow_replay_start. The description reiterates the same provenance in the first sentence, which adds marginal value but doesn't add new semantic depth 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?

Description clearly states the tool polls status of a replay started via flow_replay_start, and specifies what it returns (current step index, completed step pass/fail, overall status). The verb 'poll' is specific, the resource is clear, and it differentiates itself from flow_replay_abort, flow_replay_summary, and flow_replay_step 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 clearly indicates this is for in-progress or recently completed replays and references flow_replay_start as the origin. It doesn't explicitly state when NOT to use it or name alternative polling tools, but the context of polling replay status is clear. Could be improved by mentioning when to use flow_replay_summary or flow_replay_step instead.

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)
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 warns that the payload is 'Heavy', which is valuable performance guidance. It enumerates the full data shape returned, so the agent knows what to expect. It doesn't explicitly state the tool is read-only/non-mutating, but given the flow_replay_* sibling set (with start/abort as mutation ops), the read-only nature is reasonably inferable from 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 description is a tightly packed single sentence followed by an imperative usage warning. Every clause earns its place, and the heavy-payload warning is front-loaded near the end. It could arguably be split into shorter sentences for scanability, but it's efficient and wastes no words. Slightly verbose list of fields, but that list is the core value proposition.

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 diagnostic read tool with 100% schema coverage and zero parameters needing explanation, the description is largely complete. It explains what triggers it (stepIndex from summary), what granularity it returns (one step), and warns about cost (heavy). No output schema exists, so the field enumeration in the description serves the role of documenting return values. The main gap is not explicitly stating the tool doesn't mutate state, but the replay_* sibling set makes that 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 schema already documents both parameters thoroughly (replayId and stepIndex with 1-based note). The description adds value by explaining stepIndex comes from flow_replay_summary and clarifies the 1-based semantics, which the schema also states. The description's enumeration of returned fields relates to the output rather than the input params, so it adds marginal but non-duplicative context over 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 it returns full data for ONE step of a replay, enumerating exactly what's included (action type, recorded element, locators, coordinates, page-source XML, scores, error message). The scope is crisp (one step vs the summary/status siblings), and it explicitly distinguishes from flow_replay_summary via the 1-based stepIndex note. Very specific verb+resource+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 provides clear usability guidance: 'Heavy — call selectively for steps you want to diagnose.' This tells the agent when to use it (diagnosis) and implies when NOT to (avoid calling for every step given the payload weight). It references flow_replay_summary as the source for the step index, establishing a sequencing relationship. However, it does not explicitly name an alternative lighter tool for non-diagnostic needs, so it misses full points.

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)
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 states the output is 'an image you can view directly' which is useful. However, it doesn't disclose potential cost or performance implications of fetching screenshots, whether invalid kind values error out, or what the diff overload actually means visually. The 'visual diff overlay' explanation is good context, but there's room for more 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 concise sentences, zero waste. Front-loaded with the core purpose, then explains kind variants, then adds a usage-timing note. 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 screenshot-fetching tool with 100% schema coverage on 3 simple parameters and no output schema, the description is largely complete. It covers the purpose, the kind semantics, and even advises on selective usage. The only gap is minor — no mention of what happens with out-of-range stepIndex or error behavior — but for this tool's simplicity, it's 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%, so the schema already documents all three parameters (kind, replayId, stepIndex). The description adds meaning by explaining the three kind enum values and the '1-based' step index is already in the schema. The description contributes marginal value by clarifying the recorded/live/diff semantics beyond the schema's terse 'Which image to 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 clearly states what the tool does: 'Return the screenshot for one step of a replay as an image you can view directly.' It's specific about the verb (return/view), the resource (screenshot for one step of a replay), and the output format (image). It differentiates the three kind values and is distinct from the siblings like 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 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 ('Use selectively — not every step needs visual inspection') and distinguishes the three kind options (recorded vs live vs diff). However, it doesn't explicitly name sibling alternatives or state when NOT to use this tool in favor of other screenshot tools like device_screenshot or session_screenshot, though the replay-scoping makes this fairly implicit.

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
Behavior4/5

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

With no annotations provided, the description carries full burden. It transparently discloses the compact/small footprint ('Always small') and describes what data is included (totals, per-step rows with status/action/duration/diff scores, error excerpt). It doesn't mention pagination limits or truncation behavior for error excerpts, but the scope of returned data is well 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?

The description is two sentences and every sentence earns its place. The first sentence states purpose and output contents, the second gives explicit usage guidance and names the alternative tool. Zero filler 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?

Despite no output schema, the description enumerates the exact return contents (totals, counts, one row per step with status/action/duration/diff scores/error excerpt). The 'call this first, then flow_replay_step for detail' workflow guidance makes this fully complete for decision-making. Single simple parameter, clear scope.

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% for the single replayId parameter, so the schema already documents it. The description goes beyond by explaining what the parameter is used for conceptually (analyzing a replay summary). However, it doesn't add type or format details for replayId beyond 'Replay ID' in the schema. Baseline of 3 with slight enhancement due to the context around 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 this is a 'Compact replay summary for analysis' that returns replay metadata plus per-step details (status, action, duration, diff scores, error excerpt). It explicitly distinguishes from flow_replay_step by noting the summary is 'Always small' and is the first thing to call. This clearly separates it from its sibling flow_replay_step.

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: 'call this first when analyzing a replay, then use flow_replay_step for full per-step detail.' This is an explicit usage instruction that names the alternative tool and establishes the correct call order, making it very clear when to use this tool versus the sibling.

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
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 effectively conveys that this is a read-only inspection operation revealing viewable images, and indicates the downstream resolution step. However, it doesn't disclose return format details, whether images are embedded or referenced, or any performance/complexity considerations for a detail-fetch 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 a compact two-sentence block that front-loads the purpose and immediately follows with actionable workflow guidance. Every sentence serves a purpose—the first states what it does and what you get, the second explains the inspection workflow and next step. No wasted words, though slightly denser than the tightest possible 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 description adequately covers the tool's purpose, return value (images you can view), and workflow placement for a simple single-parameter detail-fetch tool. The reference to sibling tools adds helpful context. However, given no output schema and no annotations, it could benefit from noting what distinguishes this detail view beyond the images (e.g., whether metadata like scores or explanations are included) to be 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% with a single parameter (review_id), and the schema itself documents it as 'Review id from list_visual_reviews,' which precisely describes the source. The description reinforces the source relationship by referencing list_visual_reviews. Since there is only one simple parameter already well-documented in the schema, the description adds appropriate but minimal additional 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 tool gets full detail for one AI Visual Review candidate, specifically listing the actual baseline, live, and diff images viewable directly. It explicitly distinguishes from list_visual_reviews (which lists candidates) and names resolve_visual_review as the follow-up decision tool, establishing clear differentiation among the 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 clearly indicates when to use this tool ('use this to inspect a candidate and form your own verdict') and connects it to the follow-up action of calling resolve_visual_review. While it doesn't explicitly state when NOT to use it or name alternatives, the workflow context (inspect then resolve) provides strong practical guidance for appropriate usage.

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. 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.
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.
Behavior5/5

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

With no annotations provided, the description fully carries behavioral disclosure. It states that results match Apple's reports, that the audit sees the screen at the instant of execution and can under-report during animations (with measured evidence), that it requires iOS 17+, and that it auto-starts a session if needed. It also explains the element parameter's filtering limitation and error behavior. This is exceptionally 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 detailed but every sentence provides necessary operational context: purpose, equivalence, navigation prerequisite, issue details, timing caveat, and requirements. It is somewhat long, but for a tool with this complexity, the structure is efficient and front-loaded with 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?

The description covers prerequisites (iOS 17+, session), expected output (issue details with element, type, rect), parameter semantics (auditTypes, element), and timing behavior. With no output schema, it compensates by describing what each issue includes. It is complete for an AI agent 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%, so the baseline is 3. The description adds extra meaning beyond the schema: it explains the element binding uses the same resolution as ios_tap_by_label, clarifies that XCTest can only audit the whole app and this parameter only filters, and notes that auditTypes narrow the run for speed. This enriches the schema without replacing 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 performs an accessibility audit on the current iOS screen, using Apple's XCTest engine. It distinguishes itself from sibling tools by specifying the current-screen scope and the specific audit checks (contrast, tap targets, labels, traits). This is a specific verb+resource+scope with 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?

The description provides clear context on when to use: after navigating to the target screen, and it explicitly names companion tools (ios_tap_by_label / ios_navigate_url) for prerequisite actions. It also mentions timing constraints and requirements like iOS 17+. However, it does not explicitly state when not to use or compare against alternative audit tools, though no direct siblings exist.

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
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 is a read-only query tool, and the description doesn't explicitly state it's non-destructive (though 'Get' implies reading). The requirement for an active automation session is useful transparency, but it doesn't describe error behaviors (e.g., no active session, no foreground app) or pagination/format details. 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, zero waste. The first sentence states purpose and return values; the second adds the critical prerequisite. Every word earns its place 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 simple read-only query tool with one fully-documented parameter and no output schema, the description is reasonably complete. It could note that the return format (bundleId, name, pid) and session requirement are covered, but it doesn't address what happens without an active session. Still, for a tool of this simplicity, it covers the essential ground adequately.

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 parameter 'udid' is fully documented in the schema as 'iOS device UDID'. The description adds no additional parameter semantics beyond what the schema already provides. Baseline 3 is appropriate when the schema handles the documentation burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships 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 ('Get'), the resource ('currently active foreground app'), and the device platform ('iOS device'). It also specifies the return payload fields (bundleId, name, pid). It clearly differentiates from iOS-specific siblings like ios_list_apps (all apps) and ios_ps (process list) by scoping to the foreground 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?

The description states a clear prerequisite ('Requires an active iOS automation session'), which is important usage context. It does not explicitly name alternative tools or when-not-to-use, but the purpose is sufficiently specific that an agent can infer when this is the right choice versus ios_list_apps or ios_ps. The iOS platform scoping is clear.

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
Behavior4/5

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

With no annotations provided, the description carries full burden of behavioral disclosure. It discloses that each run terminates and relaunches the app (a side effect/destructive behavior), that it uses an on-device automation agent (a dependency), and names a required runner method (device.perf.launchTime). This is good transparency for a measurement tool with no 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.

Conciseness4/5

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

The description is three sentences, compact and efficient. It front-loads the core purpose (measure cold launch time) before methodology and dependency details. Every sentence earns its place, though it could be slightly tighter around the methodology clause.

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 benchmarking tool with no output schema and no annotations, the description does a solid job: it states units, what's measured, the averaging semantics, the measurement technique, and the dependency requirement. There is no output schema to document return format, so the description should ideally hint at the return shape (e.g., average ms value), which it doesn't explicitly do, but overall it's well balanced given the tool's moderate complexity.

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

Parameters4/5

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

Schema coverage is 100% and the description adds meaningful context: it clarifies that runs defaults to 3, and the overall methodology ties all three parameters together (udid, bundleId, runs). The description adds the cold-launch semantics beyond the schema's basic param types.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships 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 measures cold app-launch time in ms for a bundle id, averaged over N cold launches. It names a specific verb+resource+unit (measure COLD launch time), and distinguishes itself from the android_app_launch_time sibling and general device_launch_app tools by the explicit 'COLD' emphasis and averaging behavior.

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 measurement methodology (terminates + relaunches, times until running/idle) which clarifies when this tool is appropriate for launch-time benchmarking vs. the general launch tools. However, it doesn't explicitly contrast against device_launch_app, ios_launch_app, or android_app_launch_time, nor state when NOT to use this tool.

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 (capacity, charging state). No automation session required.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID
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's a read-only status query (implied by 'Get battery status'), which is semi-transparent. The 'No automation session required' note adds useful behavioral context about the tool's execution requirements. However, it doesn't describe return format, what happens when the device is unreachable, or whether any special permissions are needed.

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 tight sentence with essential information front-loaded. Every word earns its place — the tool's function, the data returned, and the key prerequisite (no session needed) are all conveyed efficiently. Very concise without being under-specified.

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 status tool with one parameter, a single well-documented parameter at 100% schema coverage, and no output schema required, the description adequately covers the use case. The 'No automation session required' note addresses a practical operational concern. Given the low complexity, this is complete enough.

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 there's only one parameter (udid), which the schema documents as 'iOS device UDID.' The description doesn't add anything beyond the schema, but with a single well-documented parameter at 100% coverage, the baseline of 3 is appropriate. No compensation 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 uses a specific verb+resource combination ('Get battery status') with clear detail on what's returned (capacity, charging state). It's distinct enough from sibling ios_* tools, though there is a generic 'device_battery' sibling that could overlap. 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 states 'No automation session required,' which provides a useful context signal about when this tool is appropriate. However, it doesn't explicitly state when NOT to use it or differentiate from the generic device_battery sibling. Some usage context is provided but no exclusions or alternatives are named.

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

ios_clear_locationBInspect

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
Behavior2/5

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

No annotations are provided, so the description carries full burden of behavioral disclosure. It states the intended effect (restores real GPS fix) but doesn't describe what happens if no simulated location was set, whether this affects other apps or sessions, any permissions needed, or what the success/error behavior looks like. Minimal behavioral context beyond the core 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 sentences, zero waste. States the purpose and provides a useful counterpart reference. Perfectly concise and front-loaded.

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 single-parameter tool with a clear inverse relationship, the description covers the core purpose well. However, given there are no annotations and no output schema, it could add value by describing edge cases (e.g., calling when no location was simulated) or confirming it's a safe non-destructive operation. Adequate but not rich.

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 documented as 'iOS device UDID'), so the schema carries the parameter load. The description adds nothing about the udid parameter but also doesn't need to given full coverage. 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?

Clear verb+resource (clears simulated GPS location) with a clear statement of effect (device returns to real CoreLocation fix). Names its counterpart ios_set_location for context. Does not explicitly distinguish from device_clear_location sibling, but the iOS-specific scope is evident from the name and mention of CoreLocation.

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 counterpart reference suggests it pairs with ios_set_location but does not explicitly state when to use this vs alternatives like device_clear_location. No explicit when/when-not guidance, but the context of being the inverse of ios_set_location is implied. No exclusions or alternative tool names mentioned beyond the counterpart.

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.
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 burden. It notably explains the behavioral difference from backspace-based clearing ('reliable for any field length'), which is useful behavior insight. It also discloses the auto-start session behavior. It doesn't mention whether the clear is reversible or what happens to the clipboard, but the core behavior is well disclosed. With no annotations available, this 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.

Conciseness4/5

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

The description is compact (2 sentences plus a pattern hint) and information-dense. Everything included is useful: purpose, reliability comparison, usage modes, pattern, and session requirement. Slightly dense but all content 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 action tool with only 4 params (1 required), a clear usage pattern, and full schema coverage, this is complete. It covers selection mode (focused vs labeled), the workflow context (before send_keys), and session requirements. No output schema exists, so no return-value documentation is needed, and the behavior is simple enough that what's provided suffices.

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 documents all parameters. The description adds context about the label parameter (omit vs pass behavior) and type/strategy usage ('used only when label is given'), which enriches schema meaning. However, it doesn't add much detail beyond that; strategy enum values are self-explanatory in the schema. Baseline 3 is appropriate since 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 is specific: 'Clear a text field on an iOS device using the native element-clear command.' It clearly states the verb (clear), the resource (text field on iOS device), and the method (native element-clear command). It distinguishes from siblings by noting reliability 'unlike sending backspaces' and its focus-field behavior differs from the generic device_clear_text.

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: omit label to clear the focused field (with instruction to tap first), pass label to target a specific field. It provides a clear usage pattern ('Pattern: tap field → ios_clear_text → ios_send_keys'), which is actionable and distinct from the generic device_clear_text sibling. It also notes session requirements.

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 CoreDevice pasteboard service (WDA-free, 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
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 return value semantics (UTF-8 text or empty string) and documents the failure mode on iOS 17.x/no-tunnel ('no HID available'). It also reveals the underlying mechanism (CoreDevice pasteboard, WDA-free). This is a read operation, and the description implicitly conveys the safety profile without explicit 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.

Conciseness4/5

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

Two concise sentences with efficient front-loading: it immediately states the verb+resource and mechanism. Every clause adds value, including the return format and platform caveat. Minimal waste, though the technical jargon (CoreDevice, HID, WDA) is dense.

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-param read tool with no output schema, the description covers mechanism, return format, and limitations comprehensively. It addresses success case, edge case (empty string), and failure scenario (iOS 17.x/no tunnel). The only gap is not clarifying the relationship/distinction with the sibling ios_get_pasteboard which appears to serve a similar 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 description coverage is 100% with a single required param (udid, described as 'iOS device UDID'). The description doesn't add meaning beyond the schema, but with full coverage the baseline is 3, which is appropriate. The description's behavioral detail substitutes for any param enrichment.

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 clearly states it reads the device clipboard via the CoreDevice pasteboard service. It identifies the specific mechanism (WDA-free, no app foregrounding) which distinguishes it from sibling tools like ios_get_pasteboard/ios_set_pasteboard. However, there are multiple clipboard-related siblings (ios_clipboard_get_hid, ios_get_pasteboard, device_clipboard_get) and the description doesn't explicitly differentiate from ios_get_pasteboard.

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 niche via 'WDA-free, no app foregrounding' which suggests when to prefer this tool (when you want to avoid WDA/foregrounding). It also documents a platform limitation ('no HID available' on iOS 17.x/no-tunnel). However, it doesn't explicitly state when NOT to use it or name alternative tools (like ios_get_pasteboard) as options.

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

ios_clipboard_set_hidBInspect

Write the device clipboard (pasteboard) via the CoreDevice pasteboard service (WDA-free, 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
Behavior3/5

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

With no annotations provided, the description carries full burden. It usefully discloses the WDA-free/no-foregrounding mechanism and the failure mode on iOS 17.x/no-tunnel. However, it doesn't state side effects (e.g., whether existing clipboard content is replaced), return format, or whether it's destructive to the current clipboard state. The disclosed failure condition is genuinely helpful, but broader effect transparency is thin.

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?

Two sentences, front-loaded with the core action and mechanism, with the failure condition as a caveat. Efficient and waste-free. Loses one point for not naming sibling alternatives in the same breath.

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 required scalar params, no output schema) so the description doesn't need to explain return values. However, given the unclear fallback relationship with ios_set_pasteboard and device_clipboard_set siblings, the description should clarify when this variant is preferred. The failure mode caveat is good but the alternative-selection 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%, with both parameters (udid, text) documented. The description adds marginal value by clarifying the mechanism context but adds no parameter-specific detail beyond what the schema provides. Baseline 3 is appropriate given 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 (Write), the resource (device clipboard/pasteboard), and the mechanism (CoreDevice pasteboard service, WDA-free, no app foregrounding). It does not explicitly distinguish from sibling ios_clipboard_get_hid, ios_set_pasteboard, ios_get_pasteboard, or device_clipboard_set, though the 'HID/WDA-free' phrasing hints at a distinction without naming an alternative.

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

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 mechanism-based alternative to other clipboard tools but never explicitly states when to use this vs ios_set_pasteboard or device_clipboard_set. It notes a limitation ('no HID available' on iOS 17.x / no-tunnel) which implicitly advises against use in those conditions, but lacks explicit when-to-use/when-not-to-use guidance naming alternatives.

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 CoreDevice HID (WDA-free) WITHOUT lifting — mouse-button-down / touch-down. The contact stays held until ios_release_hid. Use for hold-then-steer interactions WDA 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
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 contact stays held until a separate release, returns an error string on unsupported iOS versions/tunnels, and uses screen-point coordinates. This is substantive 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?

Three densely informative sentences covering mechanism, usage context, coordinate semantics, and failure mode. Zero wasted words; all content 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 stateful hold tool with no output schema but clear failure semantics, the description conveys the essential mechanics, the paired-release dependency, and the platform limitation. Could note interaction with ios_release_hid more explicitly, but overall adequate for the tool's complexity.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds value by explaining coordinate meaning (iOS screen points) and the norm/fraction behavior context ('matches the frontend, avoids point-guessing'), reinforcing schema semantics for x/y and norm.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 specific action: press-and-HOLD a contact down without lifting, contrasting with release. It names the mechanism (CoreDevice HID/WDA-free) and distinguishes from ios_release_hid and other HID siblings. Very specific verb+resource+state.

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

Usage Guidelines4/5

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

States when to use (hold-then-steer interactions WDA cannot express) and notes it stays held until ios_release_hid. However, it doesn't explicitly contrast with sibling ios_long_press_hid or ios_tap_hid to explain when NOT to use this tool vs those alternatives.

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
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 of behavioral disclosure. It discloses scope exclusions (telemetry/in-house automation), the no-session-required trait, and the output shape (aggregate analytics). It doesn't fully describe edge cases like empty device or formatting, but the observable behavior coverage is solid for a read-only 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 tight sentences, zero filler. Every sentence earns its place: scope+output (sentence 1), exclusions (sentence 2), pointer to sibling + prerequisite (sentence 3). Front-loaded with 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 read-only aggregation list tool with one parameter, 100% schema coverage, and no output schema, the description is complete: it states scope, exclusions, the alternative for detail, and session requirement. Nothing material is left ambiguous for the agent's selection and 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 a single parameter (udid) described as 'iOS device UDID.' The description adds value by confirming udid refers to the iOS device for which crashes are listed and not needing automation session context. With only one self-evident parameter, the description complements rather than repeats the schema 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 clearly states the verb (List) and resource (crash reports on iOS device) plus the specific aggregation dimensions (total, per-app, per exception type, per-day timeline). It distinguishes from siblings like ios_crash_detail (full log) and ios_crash_list, and even names the alternative tool explicitly.

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 the agent to use ios_crash_detail with a returned crash id for full logs, names the alternative tool, and clarifies that telemetry/in-house automation processes are excluded. Notably states 'No automation session required,' which is a concrete usage prerequisite that helps the agent decide when to invoke this tool.

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
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 reveals this is a read-only fetch (it returns parsed metadata + raw content), which is helpful, but it doesn't disclose what 'raw content' entails, whether the report is returned as a string or structured object, size/truncation behavior, or failure states (e.g., what happens if the id is invalid). The one behavioral note ('No automation session required') is useful but thin coverage 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?

Single well-formed sentence that packs the core purpose, the id sourcing caveat, and the session requirement note. Zero wasted words. Front-loaded with the primary 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?

For a simple 2-parameter, no-output-schema fetch tool, the description covers the essential workflow. However, with no annotations and no output schema, the description is the only disclosure mechanism, and it leaves the return format, failure behavior, and whether udid is needed when no session is active somewhat under-specified. Adequate for a straightforward read tool but could add return-format hints given the lack 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% with both parameters ('udid' and 'id') documented, so the schema does the heavy lifting. The description references how to obtain the id ('from ios_crash_analytics'), which adds meaningful context for the 'id' parameter beyond the schema's plain 'Crash report id (file name)' phrasing. No additional detail is added for 'udid', so it's an adequate but not exceptional contribution given full 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 states the tool returns 'Full parsed metadata + raw content of one crash report' with a clear verb+resource structure and qualifies that it's 'by id from ios_crash_analytics'. It distinguishes itself from ios_crash_analytics (which lists multiple) and ios_crash_list. However, it doesn't explicitly contrast with sibling ios_crash_detail's platform counterpart beyond being iOS-specific.

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: retrieves a single crash report 'by id from ios_crash_analytics', which tells the agent the source of the id. It also notes 'No automation session required,' clarifying an important precondition. However, it doesn't explicitly state when NOT to use it or mention alternatives (e.g., ios_crash_symbolicate for symbolicating), though the workflow implication is reasonably clear.

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

ios_crash_listBInspect

List crash reports on an iOS device. No automation session required.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID
patternNoFilter pattern (e.g. "*.ips")
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 mentions 'No automation session required' which is useful, but doesn't disclose what the output format looks like, whether the list includes all crash types (app crashes, watchdog, jetsam), how many reports are returned, or whether the returned data is limited in any way.

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?

Two concise sentences with no wasted words. The main functional statement and the session requirement are both efficiently conveyed. Could perhaps be more descriptive, but for its scope it's admirably compact.

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?

This is a relatively simple listing tool with only 2 simple parameters and no output schema. The description covers the core functionality and the session requirement. However, since there are related tools (ios_crash_detail, ios_crash_analytics, ios_crash_symbolicate) and no annotation coverage, a bit more context about the workflow with these tools and the output format would improve 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 both parameters (udid, pattern) are already documented in the schema. The description adds minimal extra meaning beyond 'filter pattern (e.g. *.ips)' which is in the schema. Baseline 3 is appropriate since the schema performs the documentation duty adequately.

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?

Clear verb+resource ('list crash reports on an iOS device'). The tool name ios_crash_list and description clearly distinguish it from siblings like ios_crash_detail, ios_crash_analytics, and ios_crash_symbolicate, which serve different purposes. However, it doesn't explicitly differentiate from the android_crash_list counterpart beyond the 'iOS device' qualifier.

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 states 'No automation session required' which provides some usage context. However, the only ios_crash sibling is ios_crash_analytics, and the description doesn't explain when to list vs analyze crashes, nor when the 'pattern' filter should be used versus retrieving full crash details.

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)
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 clearly explains the resolution mechanism (atos on host), what happens for unresolvable frames (returned as-is), and the platform-specific prerequisites (Xcode DeviceSupport, .dSYM UUID matching). It doesn't mention potential errors, performance characteristics, or output format, but the key behavioral caveats are well disclosed.

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

Conciseness4/5

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

The description is a single dense but well-organized paragraph. It front-loads the primary mechanism, then covers system frames, app frames, edge cases (unresolvable), and defaults. It's information-dense but every sentence contributes value. Slightly long but justified given the multi-faceted behavioral 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?

Given the complexity of symbolication (host tools, .dSYM matching, Xcode DeviceSupport prerequisites, faulting-thread default), the description covers the essential operational aspects thoroughly. No output schema exists, so the description could have noted the return format, but the description is otherwise comprehensive for a moderately complex 4-parameter 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 baseline is 3. The description reinforces the id (crash report from ios_crash_analytics) and dsymPath (matched by Mach-O UUID) semantics beyond the schema. It doesn't add detail about udid or allThreads beyond what the schema already provides, but the description's enrichment of the two more nuanced parameters is adequate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships 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: symbolicate a crash report, resolving stack frames from imageName+offset into symbol+offset (file:line) using atos. It specifies the input source (id from ios_crash_analytics) and distinguishes clearly from sibling tools like ios_crash_list, ios_crash_analytics, and ios_crash_detail which analyze/discover crashes rather than symbolicate them.

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: the id comes from ios_crash_analytics, app frames resolve only when a matching .dSYM is provided via dsymPath, and system frames resolve from Xcode's DeviceSupport symbols only when the device was prepared. It also states the default behavior (only faulting thread) and how to change it (allThreads). This gives clear when-to-use and prerequisite context.

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

ios_device_infoBInspect

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
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 'no automation session required' trait, which is the key behavioral distinction. However, it doesn't disclose what specific fields are returned, whether the device must be connected/unlocked, or potential failure modes (e.g., device not found, permissions). For a read-only info tool with no annotations, 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.

Conciseness4/5

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

The description is a single, efficient sentence that packs purpose, platform, and schema-free operation into minimal words. No verbosity or wasted content. Slightly front-loaded with the key info in the opening clause.

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 one-parameter read tool with no output schema, the description covers the what and a key behavioral trait. However, it doesn't enumerate which specific fields are returned (activation state, serial, product type, iOS version are named in the description itself, so partially covered). The lack of an output schema means the agent can't see return structure, and the description doesn't fill that gap fully (e.g., value formats, whether fields may be null).

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 `udid` parameter is fully described in the schema as 'iOS device UDID'), so baseline is 3. The description adds nothing beyond the schema for the parameter itself, but the schema already handles it adequately. The description does imply the UDID is required to identify the device, which is minimal added value.

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 ('Get detailed device info from an iOS device') with a clear resource and scope. It distinguishes from sibling `device_info` (generic) by specifying iOS-specific detail and explicitly noting no automation session is required. It doesn't explicitly differentiate from `ios_diagnostics`, but the purpose is clear enough.

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 'no automation session required,' which is useful context implying this works outside a session, contrasting with session-based siblings like `ios_start_session`/`ios_shell`. However, it doesn't explicitly state when to prefer this over `device_info` or `ios_diagnostics`, nor any exclusions or prerequisites.

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

ios_diagnosticsBInspect

Get device diagnostics (battery, HDMI, WiFi) from an iOS device. No automation session required.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID
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 adds the 'No automation session required' behavior note, which is useful. However, it doesn't mention what the tool returns, whether it performs a live poll vs. cached values, whether it might be slow, or whether it requires the device to be connected/awake. For an aggregate diagnostics tool, return-format expectations would be valuable.

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?

Two sentences, zero wasted words. Front-loads the purpose and adds the standalone/session note efficiently. The parenthetical listing of component types adds scope clarity without bloat.

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 an aggregate diagnostics tool with a single param and no output schema, the description is reasonably complete on inputs. However, it doesn't describe the output structure (how battery/HDMI/WiFi results are presented), which an agent would want to know before invoking an aggregate diagnostic. No annotations exist to compensate, and there's notable sibling overlap (ios_battery, device_battery, ios_network_info-like tools) that could benefit from clearer differentiation.

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 'udid' parameter, and the description reinforces the iOS device context implied by the parameter description. The description doesn't add format or semantics beyond 'iOS device UDID' but the schema fully covers the only parameter, 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?

Clear verb+resource: 'Get device diagnostics (battery, HDMI, WiFi) from an iOS device.' Distinct from siblings like ios_battery (specific), ios_device_info (device info), and device_battery (generic). The parenthetical enumerates the diagnostic categories, offering reasonable specificity.

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?

States 'No automation session required' which is a useful usage condition indicating it can be called standalone. However, there's no guidance on when to choose this aggregate tool vs. individual tools like ios_battery, ios_network_info, or device_battery. No exclusions or alternative tool references despite many sibling overlaps.

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
Behavior3/5

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

No annotations were provided, so the description carries the full burden. The description is honest about the conditional behavior ('if it is visible') and discloses the session auto-start behavior. However, it doesn't disclose what happens when no keyboard is visible (silent no-op vs error), which sessions it applies to, or any destructive implications. For a non-destructive dismissal 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?

Two sentences, zero wasted words. The first sentence states the action and condition; the second adds the session precondition. Highly efficient and appropriately sized for a single-parameter 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 single-parameter tool with full schema coverage, the description is essentially complete. It covers the action, the condition, and the key prerequisite (session). A brief note about return/error behavior when no keyboard is visible would make it fully complete, but given the tool's simplicity this is 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% with a single parameter (udid) described as 'iOS device UDID'. The description doesn't add anything beyond the schema about how udid is used, but with only one self-evident parameter and full coverage, the baseline of 3 is appropriate. The parameter's meaning is fully clear from the schema alone.

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 (dismiss the software keyboard) on a specific target (iOS device) with a clear condition (if visible). It's distinguishable from siblings like ios_send_keys and ios_key_hid which reference keyboard interaction rather than dismissal. Slightly docked because the 'iOS device' scope is implied by the tool name but the action is 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 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 it (when a keyboard is visible and needs dismissing) and includes the precondition that an active iOS automation session is needed, auto-started if not present. However, it doesn't explicitly state when NOT to use it or mention alternatives like ios_send_keys for other keyboard operations, though the simple scope makes this reasonably inferable.

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)
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 describes the gesture mechanics (hold then move over duration) and states the active-session requirement. However, it doesn't disclose behavior like whether the drag may trigger long-press context menus, what happens on failure, or response format. Decent 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?

Three efficient sentences: action + mechanics, distinction + use cases, coordinate/requirement notes. Zero filler, all sentences earn their place with front-loaded action verb.

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?

Complexity is moderate (7 params, no output schema). The description covers the gesture fully, prerequisites, and use cases. With full schema coverage and no output schema, the description provides adequate context for an agent to select and invoke correctly. Could mention what the return value looks like, but 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% with all 7 parameters documented. The description adds value by explaining holdMs as the grab-phase duration and durationMs as motion duration, plus describing coordinates as 'screen points'. It clarifies the semantic relationship between parameters (hold before motion), going slightly beyond the schema's individual 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+resource: 'Drag-and-drop on an iOS device' with the exact gesture mechanics (hold at (x1,y1), move to (x2,y2)). It explicitly distinguishes from ios_swipe (no explicit hold) and provides concrete use cases (icon reorder, drag-into-folder, slide-to-confirm), making it clearly 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?

Explicitly states when to use ('home-screen icon reorder, drag-into-folder, slide-to-confirm') and distinguishes from ios_swipe which lacks the hold phase. It also specifies a prerequisite ('Requires an active iOS automation session'). This is strong usage 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 CoreDevice HID path (WDA-free): 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)
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 critical behaviors: press-and-HOLD at both ends with configurable dwell times, single-contact only, and the failure mode returning 'no HID available' on iOS 17.x/no-tunnel. The norm=true fraction semantics are thoroughly explained, matching frontend coordinates. Minor gap: it doesn't describe return value format on success, but the failure-mode disclosure 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.

Conciseness4/5

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

The description is dense but well-organized, front-loading the core mechanism (press-and-HOLD at from, move, release) before elaborating on the distinctive hold behavior and use cases. Slightly long with the norm fraction math inline, but each sentence earns its place; 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?

For a complex gesture tool with 8 params, 2 nested objects, and no output schema, the description addresses well: the distinguishing behavioral mechanism vs ios_swipe_hid, coordinate-space conventions (points vs norm fractions), timing defaults, single-contact constraint, and the iOS 17.x/no-tunnel failure mode. Despite no output schema, it even discloses the failure return string, which is essential operational context.

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 baseline is 3, but the description goes well beyond: it explains holdStartMs/holdEndMs semantics in behavioral terms (let the app pick the item up, let the drop/snap register), elaborates norm=true as a scale-free frontend-matching fraction system (pixelInScreenshot ÷ screenshotSize), and clarifies that waypoints share the same coordinate space as from/to. This adds genuine value beyond 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+resource structure ('Drag-and-drop via the CoreDevice HID path'), explicitly distinguishes itself from ios_swipe_hid by noting it holds at BOTH ends, and lists concrete use cases (reordering, sliders, canvas drag-and-drop with jigsaw pieces/cards). This clearly differentiates it from the many sibling drag/swipe/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?

The description names the key alternative (ios_swipe_hid) and explains why this tool is preferred (bare swipe fails to grab or land the drop), plus identifies target use cases (reordering, sliders, canvas drag-and-drop). It lacks explicit when-NOT-to-use guidance, but the alternative naming and use-case list provide strong contextual direction.

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

ios_end_sessionCInspect

End a iOS automation session on an iOS device, releasing resources.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID
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 states 'releasing resources' but doesn't disclose important behavioral details: whether the session must have been started by ios_start_session, whether UDID must correspond to an active session, what happens if you call it on an inactive session, whether it fails silently or throws, and whether other session tools become unusable afterward. For a stateful session-management tool, 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.

Conciseness4/5

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

Single concise sentence, no wasted words. It communicates the core purpose efficiently. However, it could have used the space to add meaningful behavioral detail rather than minimalistic phrasing.

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?

This is a stateful mutation tool (ending a session) with no annotations and no output schema. The description should disclose lifecycle dependencies (management of sessions), error states, and consequences of ending the session. Despite having only 1 parameter, the context around session management is insufficiently specified for an agent to safely invoke 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?

Schema description coverage is 100% and there is a single required parameter (udid) documented as 'iOS device UDID'. The description adds minimal information beyond the schema. Since coverage is high, baseline 3 is appropriate, though the description could clarify the udid identifies which session to end.

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

Purpose3/5

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

The description states a specific action (end a session) on a specific resource (iOS device) and notes it releases resources. It is reasonably clear but doesn't deeply differentiate from sibling tools like ios_start_session (which is obvious) or session_quit / session_back which could overlap in purpose. No mention of what distinguishes this from session_quit.

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

Usage Guidelines2/5

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

No guidance on when to use this tool vs alternatives. Given siblings like ios_start_session, session_quit, session_back, session_list exist, it would be valuable to clarify whether this complements ios_start_session and when to prefer it over session_quit. No exclusions or context provided.

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

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID
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 no automation session is required and that it returns a PNG image, both useful. However, it doesn't disclose potential wait times, whether it captures the full current screen state, or any nuance about the fast path (e.g., whether it uses a different capture mechanism with any 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, no filler. It states the action, the return type, the key differentiator (no session required), and names the alternative. 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 simple one-parameter tool with no output schema and full param coverage, this is nearly complete. It explains when to use it vs. the sibling and what it returns. It could add a note about how the capture differs from ios_screenshot (e.g., speed or fidelity), but for a straightforward screenshot tool this 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?

Schema description coverage is 100% (the single udid parameter is documented as 'iOS device UDID'), so the baseline is 3. The description doesn't add any meaning beyond the schema — it doesn't explain what UDID values are valid or how to obtain one. With one parameter and full coverage, the schema alone suffices.

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 takes a screenshot of an iOS device and returns a PNG image. It identifies the specific resource (iOS device) and the action (screenshot). It distinguishes from its sibling ios_screenshot by noting it requires no automation session. However, the distinction isn't fully explicated in terms of what the sibling requires.

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 (ios_screenshot) and gives the condition for choosing this tool: 'when the iOS automation session is not running.' This is an explicit when-to-use recommendation with a named alternative, exactly what the usage guidelines dimension rewards.

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.

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
Behavior5/5

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

With no annotations, the description fully covers behavioral traits: recursive deletion, return values (`deleted` and `failed`), the `force` flag semantics, and a clear warning that it is destructive and has no undo. This goes well beyond minimal 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?

The description is four sentences with no waste. Each sentence adds distinct value: action, recursion, use case, return behavior, force flag, and destructiveness. It is front-loaded and 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 destructive operation with four parameters and no output schema, the description covers the essential aspects: what happens (recursive delete), what to expect (return values), how to handle failures (`force`), and the context (cache clearing). It is sufficiently complete for an agent 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.

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 small amount of context by explaining `force` in terms of 'continue past individual failures' and referencing ios_file_list for bundleId root selection, but it largely restates 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 opens with a specific verb and resource: 'Delete a file or directory tree on an iOS device.' It clarifies recursive deletion and references the sibling ios_file_list for root selection, which distinguishes it from related 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?

It provides a clear usage context by stating 'the usual use is clearing an app's cached state between test runs' and references ios_file_list for root selection. However, it does not explicitly state when not to use this tool or name alternatives for non-deletion operations.

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"
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 important edge case of unreadable entries (type: null plus error), which prevents a single bad child from hiding the listing. It does not discuss auth, permissions, or side effects, but for a read-only listing tool, the key 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?

Four well-organized sentences. Each sentence earns its place: purpose/return, bundleId guidance, depth guidance, and error behavior. 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 4-parameter tool with no output schema and no annotations, this description covers purpose, parameters, return set, and error handling. It tells the agent exactly what to expect and how to choose bundleId. The only minor addition could be an example invocation, but the current description is sufficiently 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 context beyond the schema: bundleId scopes to an app's database/caches/logs vs shared media, and depth controls recursion. This meaningfully supplements the schema descriptions, especially for bundleId and remotePath's root 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 opens with a specific verb and resource: 'List files and directories on an iOS device.' It clearly states the return payload (name, type, size, modification time) and differentiates from sibling tools like ios_file_stat (single file stats) and device_file_list (generic) by specifying iOS context and the distinction between app container and shared media browsing.

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 guidance on when to include bundleId (to browse an app's own container) versus omitting it (shared media), and when to increase depth for recursion. It implicitly distinguishes from other file tools by focusing on listing behavior, but does not explicitly name alternative tools or state exclusions.

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
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 warns that oversized files are refused rather than truncated, reports the actual size in errors, and explains the rationale (silently clipped data is indistinguishable from corrupt). It also discloses the hard ceiling on maxBytes, which is critical context for avoiding data loss.

Agents need to know what a tool does to the world before 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 long, front-loaded with the core purpose, and every sentence earns its place. The warning is concise but impactful, and the final sentence provides a practical fallback without padding.

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 behavioral details and parameter guidance, but since there is no output schema, it does not fully specify the response structure (e.g., whether the base64 is wrapped in a JSON object with additional fields). This leaves minor ambiguity about the exact return format, though the core content is stated clearly.

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 the interplay between maxBytes and file size (raising it or narrowing the path to avoid refusal) and cross-referencing bundleId selection with ios_file_list, providing context 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 'Read a file off an iOS device and return its contents as base64,' which identifies the verb, resource, and output format. It distinguishes itself from siblings like ios_file_list (list files), ios_file_stat (metadata), and ios_file_push (write) by specifying the read-and-return 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 provides actionable guidance by recommending 'Check size first with ios_file_stat when unsure' and explaining how to handle oversized files (narrow the path or raise maxBytes). It also references ios_file_list for bundleId selection conventions, giving context for when to use this tool versus others.

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
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 explicitly states two behavioral traits: 'creating parent directories as needed' and 'Overwrites an existing file at that path.' This is useful transparency for a write operation. It does not discuss permissions, failure modes, or atomicity, but the core side effects (overwrite, directory creation) 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 carrying meaningful information. The first sentence is action-oriented, the second provides usage context and a sibling reference, and the third states the overwrite behavior. No wasted words or redundancy with 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 file push tool with no output schema, the description is fairly complete: it defines the action, input format, key behaviors (parent dirs, overwrite), and the bundleId vs. shared media distinction. It lacks details about success/failure responses and edge cases like invalid paths, but those are not critical for basic operation. Sibling tools provide further context, but the description alone is sufficient for an agent to invoke it correctly in common scenarios.

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 beyond the schema, particularly for bundleId: 'Same bundleId root selection as ios_file_list — pass it to seed an app's own container.' This clarifies the purpose of an otherwise abstract parameter and links it to a sibling tool's behavior, exceeding 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 and resource: 'Write a file onto an iOS device from base64 content,' clearly distinguishing it from sibling file operations like ios_file_list (listing) and ios_file_pull (reading). It also clarifies key behaviors like parent directory creation and overwriting, 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 Guidelines4/5

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

It explicitly states the intended use case: 'seed an app's own container with fixture data, a config file or a test database before launching it.' It also references ios_file_list for the same bundleId root selection, providing context on when this tool is appropriate. However, it does not explicitly mention when not to use it or name direct alternatives, 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_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
Behavior4/5

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

With no annotations provided, the description carries full behavioral transparency burden. It discloses what the tool returns (type, size, modification time), notes the performance characteristic (cheaper than listing), and references the bundleId root selection behavior. It does not explicitly state side effects (though 'get metadata' implies a safe read) or error behavior, but coverage is good for a simple stat 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, front-loaded with the main purpose and then immediately providing usage guidance. Every phrase earns its place: no filler, no redundancy, and the structure makes 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?

Despite no output schema, the description explicitly lists the return fields (type, size, modification time), which is sufficient for an agent to know what to expect. It also covers when to use the tool, cost implications, and the root selection behavior. For a low-complexity stat tool with three parameters, this is 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 value by clarifying the bundleId parameter's meaning through a direct reference to ios_file_list ('Same bundleId root selection'), which provides semantic context beyond the schema text. The remotePath and udid parameters are adequately covered by the schema, and the description's mention of 'when you already know the path' reinforces remotePath 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 clearly states a specific verb ('Get metadata'), resource ('one file or directory on an iOS device'), and the exact fields returned ('type, size and modification time'). It also distinguishes itself from sibling tools like ios_file_list and ios_file_pull by noting it's cheaper than listing and is the way to check size before pulling.

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 when the path is already known, as a cheaper alternative to listing, and to check file size before pulling. It names the sibling tool ios_file_list for bundleId root selection. However, it does not explicitly state when not to use this tool or enumerate all alternatives, so it falls short of a full 5.

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
strategyNoElement finding strategy to try first. Defaults to trying class chain → predicate string → accessibility id → name → xpath in order.
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 the fallback behavior (returns similar visible labels on no match), explains the strategy mechanism (defaults to trying class chain → predicate string → ... → xpath in order), and mentions session auto-start. It does not describe whether this is a read-only operation or detail the return structure beyond coordinates, but the disclosed behaviors are genuinely valuable.

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 well-structured sentences, front-loaded with the primary purpose and return values. Every sentence adds information: what it returns, what happens on no-match, when to prefer it, and the session prerequisite. Minor inefficiency in the parenthetical expansion of the strategy order, but overall tight and purposeful.

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 4 parameters, full schema coverage, no output schema, and no annotations, the description covers the key operational aspects: behavior, return values, no-match fallback, and session handling. It doesn't specify the exact output structure but explains what the agent receives (coordinates, bounds, matching strategy). The mention of retry labels on no-match is especially helpful for interactive tool 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 description coverage is 100%, so all 4 parameters (type, udid, label, strategy) are documented in the schema. The description adds context on the strategy parameter's default ordering mechanism but does not add meaning beyond what the schema already provides for the other parameters. Baseline 3 is appropriate given the schema's 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 clearly states what the tool does: finds a UI element on an iOS device by accessibility label or text. It specifies the return values (center coordinates, bounds, matching strategy) and distinguishes itself from siblings like ios_tap_by_label and device_find_element by scoping to iOS and offering a retry list on no-match.

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 this (or ios_tap_by_label) over eyeballing coordinates from a screenshot,' naming a concrete alternative and explaining when to use this tool instead. It also notes the session requirement (auto-starts if needed), giving clear operational context.

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)
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 sampling window nature, that FPS is passive (reflects current on-screen content rather than driving anything), and that utilization metrics are conditional ('when available'). It does not describe the return format details or potential failure modes, but the key behavioral characteristics 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.

Conciseness4/5

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

The description is three sentences and information-dense. Each sentence earns its place: sentence 1 states purpose and returns, sentence 2 differentiates from siblings, sentence 3 covers prerequisites and usage context. Slightly longer than strictly needed but 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 two-parameter tool with 100% schema coverage and no output schema, the description covers purpose, return values, platform restriction (physical device), session requirements, and the practical caveat about driving the app first. The only gap is lack of description of the output structure/format, though no output schema exists to compensate for that.

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 documents both parameters (udid, durationMs with min/max/default). The description adds meaningful context beyond the schema by explaining the durationMs is a 'short window' and that FPS reflects current on-screen state, which relates parameter semantics to tool behavior. It doesn't enumerate parameters explicitly but the schema already handles this 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?

The description uses a specific verb+resource ('Sample on-device rendering FPS for a physical iOS device') and specifies the exact return values (mean/min/max FPS plus GPU/renderer/tiler utilization when available). It clearly distinguishes itself from sibling tools by explicitly naming android_fps as its iOS 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?

The description provides clear context: 'No automation session required' and explains that FPS reflects 'whatever is on screen during the window' with guidance to 'drive the app first for a meaningful reading.' It stops short of explicitly naming alternatives or when-not-to-use, but the context is strong and self-contained.

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
udidYesiOS device UDID
pointsYesOrdered waypoints of the stroke (first = touch-down, last = lift)
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 polyline lands exactly as given, that points are ordered (first=touch-down, last=lift), that omitting 't' auto-spaces evenly and controls speed→momentum, and that a minimum of 2 points is required. It also states the prerequisite of an active iOS automation session. This is strong behavioral disclosure, though it doesn't elaborate on failure modes or what happens with an inactive session.

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 (two sentences) and front-loaded with the core purpose. Every sentence earns its place: the first establishes what the tool does and differentiates it, the second explains the parameter semantics and prerequisites. It's well-structured but slightly dense with technical detail that could arguably be trimmed without loss.

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 gesture tool with two well-documented parameters at 100% schema coverage. No output schema exists, but nothing about the return value is critical for invocation. Given the complexity of gesture timing, the description adequately covers the main considerations (ordering, timing, minimum points, session prerequisite) without needing to enumerate every edge case.

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 documents both parameters (udid, points) well. The description adds meaningful semantics: 'points' is described as an ordered list with {x, y, t?}, and crucially explains that 't' is ms from touch-down and that omitting it auto-spaces evenly AND controls speed→momentum. This adds behavioral meaning to the 't' parameter beyond the schema's 'Milliseconds from touch-down (optional)'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships 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 freeform stroke as ONE continuous touch on an iOS device. It explicitly distinguishes itself from ios_swipe ('any gesture a straight ios_swipe cannot express'), lists concrete use cases (curves, arcs, signatures, unlock patterns), and names the sibling it differentiates from. Very specific verb+resource+scope.

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 when to use it ('curves, arcs, signatures, unlock patterns, or any gesture a straight ios_swipe cannot express') and implicitly defines when not to (straight gestures should use ios_swipe). It also documents the 't' omission behavior controlling speed/momentum — clear operational context for when to provide timing versus use defaults.

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

ios_gesture_path_hidAInspect

Replay a freeform stroke as ONE continuous HID touch (WDA-free) — CoreDevice is live-steerable, so curves, arcs, signatures, and unlock patterns land exactly. points are iOS screen points. Minimum 2. Single-contact only. 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
pointsYesOrdered waypoints of the stroke (first = touch-down, last = lift)
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 single-contact limitation, minimum 2 points, and the error condition ('no HID available' on iOS 17.x/no-tunnel). However, it doesn't detail what happens on failure beyond that error, whether the gesture can be interrupted, or latency/rate characteristics, which would matter for a live-steerable HID 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: purpose + mechanism, point semantics + constraints, single-contact caveat, and error condition. Dense but not padded, front-loaded with the primary capability and key differentiators.

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-param tool with 100% schema coverage and no output schema, the description captures the essential usage contract well. It covers the success mode ('land exactly'), the payload semantics, the limitation, and the failure mode. Minor gap: no return-value description (though no output schema exists, so the agent must infer how to interpret success/failure beyond the error string).

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 listed at 100%, so the schema already documents udid, points, and norm well. The description adds useful context for the `points` parameter (ordered waypoints, first=touch-down, last=lift) and for `norm` (0..1 fractions, scale-free, matches frontend, avoids point-guessing), going beyond schema descriptions by explaining WHY the coord options exist and the correct mental model.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships 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+resource (replay a freeform stroke as HID touch) with clear technical distinctiveness (WDA-free, CoreDevice live-steerable). It explicitly differentiates from siblings by noting it handles curves/arcs/signatures/unlock patterns as a single continuous stroke, contrasting with ios_swipe_hid, ios_drag_hid, and ios_tap_hid.

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 when-to-use context (freeform strokes that need continuous single-contact fidelity) and mentions the single-contact constraint and minimum-2 points. It doesn't explicitly name alternative tools for non-freeform gestures, but the WDA-free/live-steerable emphasis and sibling set (ios_swipe_hid, ios_drag_hid, ios_tap_hid) make intent reasonably clear.

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
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 reveals that the tool may auto-start an iOS automation session, which is useful behavioral context. However, it doesn't describe return format beyond 'URL string,' error behavior (e.g., what happens if Safari is not open), or whether this is a read-only operation. For a read operation this is acceptable 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 sentences, both informative and free of fluff. It states what it returns and the session requirement efficiently. 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 read-only getter with one parameter and no output schema, the description is mostly adequate. However, it lacks some context: it doesn't clarify what happens if Safari isn't open (returns empty? errors?), and it doesn't specify whether the URL is from an active Safari page or the frontmost tab. The session requirement is useful context. Given the simplicity of the tool, this is reasonable but with 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?

Schema description coverage is 100%, so the udid parameter is fully documented in the schema as 'iOS device UDID.' The description adds no additional parameter semantics beyond the schema, which is the baseline-3 scenario. The description doesn't add context like 'the UDID must match a launched iOS device or the session will fail.'

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

Purpose4/5

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

The description clearly states the tool's purpose: getting the current URL loaded in Safari on an iOS device and returning the URL string. It specifies verb+resource+platform (get + browser URL + iOS/Safari). It distinguishes it from siblings like device_get_browser_url (generic/browser-agnostic) and ios_navigate_url (which sets instead of gets), though it doesn't explicitly name these 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 provides context (requires iOS automation session, auto-starts if needed) which is useful. However, it doesn't give guidance on when to use this vs alternatives like device_get_browser_url or ios_safari_list_pages. There's no exclusions or when-not-to-use information, leaving the agent to infer differentiation from naming.

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, otherwise the device's real CoreLocation fix.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID
Behavior4/5

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

There are no annotations provided at all, so the description carries the full burden of behavioral disclosure. It adds useful context about the simulated-vs-real value distinction and references ios_set_location interaction. It could be stronger by noting permissions/prerequisites or whether the value is a one-time snapshot vs continuous, but for a read-only location fetch the disclosures are reasonable.

Agents need to know what a tool does to the world before 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 states the core purpose, and the second adds the important simulated-vs-real behavioral nuance. 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 single-parameter read-only location getter with no output schema required, the description covers the essential behavior including the meaningful edge case of simulated location. The lacking item is any indication of what the response looks like, but since there's no output schema and the tool is simple, this is a minor gap rather than a significant one.

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 a single parameter (udid, 'iOS device UDID') fully documented in the schema. The description adds no parameter-specific details beyond what the schema already provides, which 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.

Purpose5/5

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

The description clearly states it reads the iOS device's current GPS location, with a specific verb ('read') and resource ('the iOS device's current GPS location'). It also distinguishes itself from ios_set_location by explicitly noting it returns the simulated value when set_location is active, otherwise the real CoreLocation fix. This differentiates it from siblings like device_set_location, ios_set_location, device_clear_location, and 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 that it returns the simulated value when ios_set_location is active, versus the real fix otherwise, which helps the agent understand the behavior in different scenarios. However, it does not explicitly state when to choose this over sibling tools (e.g., device_set_location vs ios_set_location), nor does it name alternatives explicitly.

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
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 this is a read operation (returns copied text), which implies non-destructive behavior. It adds the useful constraint that the agent must be foregrounded to read the pasteboard and that empty string is returned when nothing is copied. This is reasonable transparency for a read operation, though it doesn't detail what happens on session expiry or permission failures.

Agents need to know what a tool does to the world before 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 waste. The first sentence states purpose and return behavior; the second covers the prerequisite. Front-loaded and efficiently structured with no filler.

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

Completeness3/5

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

Given no annotations and no output schema, the description reasonably covers the basics: what it returns (empty string fallback) and a key prerequisite (foregrounded agent). It could add more—e.g., when changes made by the device user are visible, whether the pasteboard read is secure/sandboxed, or interaction with iOS privacy prompts—but for a single-param read tool, it's close to adequate. The absence of mention of the ios_clipboard_get_hid sibling as an alternative is the main 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% with only one parameter (udid) documented as 'iOS device UDID'. The description adds no additional meaning to the udid parameter beyond what the schema provides. With full schema coverage and a single self-descriptive param, the baseline 3 is appropriate; the description doesn't need to compensate.

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 (get) and resource (clipboard/pasteboard text on iOS), and specifies the return value (copied text or empty string). It distinguishes from ios_set_pasteboard by being the read counterpart, though it doesn't explicitly name the sibling. The 'ios_get_pasteboard' name correlates with 'ios_set_pasteboard' and 'ios_clipboard_get_hid', but the description is specific enough about the read 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 states a clear prerequisite ('Requires an active iOS automation session; the automation agent must be foregrounded'), which is useful usage guidance. However, it doesn't explicitly say when to prefer this over ios_clipboard_get_hid or device_clipboard_get, nor does it exclude when not to use it. The session/foreground requirement is contextual, not a contrast with alternatives.

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 CoreDevice HID (host-driven, WDA-free) is available on an iOS device, plus its display size. Use to decide between the hid tools and the WDA-backed ios tools. Does NOT require a WDA session.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID
Behavior3/5

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

No annotations are provided, so the description carries the disclosure burden. It does add key behavioral context: 'Does NOT require a WDA session' — a meaningful capability constraint. However, it does not state what the output format looks like or what 'available' means operationally (e.g., whether a session version is returned). 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, zero wasted words. The first sentence states the purpose and output; the second provides the usage decision and a key non-requirement. Extremely tight and 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 status-query tool with one well-documented parameter and no output schema required (its return is a boolean/status plus display size, implied by 'Report... available'), the description is largely complete. It could benefit from noting what the returned display size is used for or what a false result signals, but this is a minor gap.

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

Parameters3/5

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

Single parameter 'udid' with 100% schema coverage ('iOS device UDID'). The description does not need to add much since the schema already documents the only parameter. The implied device context is clear from the tool name and 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?

Description is specific: 'Report whether CoreDevice HID (host-driven, WDA-free) is available on an iOS device, plus its display size.' It clearly states the verb (report), the resource (HID availability and display size), and the architectural context (host-driven, WDA-free), distinguishing it from the ios_* WDA-backed tools in the 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?

Explicitly states when to use: 'Use to decide between the *_hid tools and the WDA-backed ios_* tools.' This directly tells the agent the decision context and which tool families it arbitrates between, which strongly differentiates it from siblings.

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
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. 'Install' implies a mutating operation, but the description does not state whether installation overwrites existing apps, whether device must be unlocked/authorized, whether a minimal iOS version is required, or what the outcome/success signal looks like. It also does not mention signing requirements or potential 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 dense sentences with zero waste. It front-loads the purpose and adds the most critical usage qualifier (no session required) concisely. Nothing extraneous.

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 2-parameter tool with 100% schema coverage and no output schema, the description conveys the essential purpose. However, the complete absence of behavioral notes (no mention of prerequisites like device trust, provisioning, or existing versions) leaves the agent under-informed about a mutable, side-effecting operation. Adequate but with notable gaps for an install 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 both parameters (udid and path) are documented in the schema. The description adds the clarification that 'path' can point to either an '.ipa file or .app folder', which is genuinely helpful beyond the schema. However, it doesn't add detail on how to obtain the UDID or whether the path must be server-local. Baseline 3 is appropriate with a slight credit for the file-type clarification.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships 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 ('Install') and specific resources ('.ipa or .app' on iOS device). It distinguishes itself from siblings like ios_launch_app (which launches an already-installed app) and device_launch_app. The scope is specific and 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?

The description states that no automation session is required, which is useful context about when this tool can be used. However, it does not explicitly contrast with alternatives like ios_launch_app or ios_list_apps, nor does it mention when to prefer this tool over app_install or other install paths. It provides context but not exclusions or explicit alternatives.

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.
Behavior5/5

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

No annotations are provided, but the description discloses key behaviors: keys are pressed AND released as one action, nothing stays held after the call, an empty list force-releases leftover keys, and it returns 'no HID available' on unsupported devices. This goes beyond the schema to inform the agent 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?

Dense but well-organized: main purpose first, then parameter details, then behavior, then error case. Every sentence contributes essential invocation knowledge with 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?

Covers purpose, parameter semantics, behavior, and error condition for a two-parameter tool with no output schema. However, it does not specify what a successful call returns (only the error case), leaving slight ambiguity about the success response.

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 covers both parameters, the description significantly enriches `usages` with USB HID code examples, ordering semantics, chord behavior, and the empty-list special case. This adds substantial value beyond the bare array-of-numbers schema definition.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 'Send raw HID keyboard usage codes as real hardware keypresses' and establishes it as the ONLY way to inject true keypresses, modifiers, and shortcuts. This distinguishes it from sibling typing tools and provides a specific verb+resource+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?

Explicitly contrasts with typing tools ('the typing tools can only type into a focused field'), signaling when raw HID input is appropriate. Gives practical guidance on chord pressing and empty-list force-release, though it does not name specific sibling alternatives or exclusion scenarios.

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
Behavior3/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. 'Kill' communicates the destructive/mutating nature, and 'No automation session required' is useful. However, it doesn't disclose whether killing an app has side effects (data loss, restart behavior), permission requirements, or whether it's reversible (the app can be relaunched). Given the destructive nature, more explicit disclosure would be expected.

Agents need to know what a tool does to the world before 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 information-dense. The first sentence states the action and its alternatives; the second adds the key prerequisite-free context. No wasted words or redundant phrasing.

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-action utility tool with 1 required parameter and no output schema, the description provides adequate top-level context including the no-session-needed detail. The main gap is clarifying identifier precedence/mutual exclusivity among pid, bundleId, and processName, but overall this is reasonably complete for a straightforward kill 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 baseline of 3 applies. The description reiterates that killing can be done by bundle ID, PID, or process name, which maps to the three identifier parameters, but adds no additional semantics beyond what the schema already documents. It doesn't clarify precedence if multiple identifiers are provided, which is a gap given there are three mutually-exclusive ways to target an app.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships 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 imperative verb ('Kill') with a clear resource ('an app on an iOS device') and specifies the three accepted identifier types (bundle ID, process ID, or process name). It clearly distinguishes from siblings like device_terminate_app, ios_terminate_app, and ios_launch_app by noting this is a kill operation, although it doesn't explicitly differentiate from the terminate_app 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 states 'No automation session required,' which is a meaningful usage context that distinguishes it from session-dependent iOS operations like ios_start_session/ios_end_session. However, it doesn't explicitly name alternative tools or give clear when-not-to-use guidance, e.g., when device_terminate_app might be preferred over ios_kill_app.

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

ios_launch_appBInspect

Launch/activate an app on an iOS device by bundle ID. Uses iOS automation activate if a session is active, falls back to the direct iOS transport.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID
bundleIdYesApp bundle ID to launch
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 adds value by explaining the dual-path behavior (automation activate vs. direct transport fallback), which is useful context. However, it doesn't disclose failure modes, whether repeated launches reset app state, or what happens if the app is already running. The two-path mechanism is genuinely helpful but leaves behavioral gaps.

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 tight two-sentence format. The first sentence defines the primary purpose, and the second explains the internal mechanism. Both sentences earn their place. It's concise without being under-specified, though it could be slightly more front-loaded with the purpose being clearly first.

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 2-parameter tool with schema coverage of 100%, the description adequately covers the essentials: what it does and how it does it (the fallback mechanism). It could benefit from noting error cases or dependencies (e.g., whether a session must exist), but for a launch tool with no output schema and simple parameters, it's 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%, so both parameters (udid and bundleId) are already documented in the schema. The description mentions 'by bundle ID' which aligns with the bundleId parameter but adds no additional semantics beyond the schema's existing field descriptions. Baseline 3 is appropriate since the schema handles the load.

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 what the tool does: 'Launch/activate an app on an iOS device by bundle ID.' This provides a specific verb (launch/activate), resource (app on iOS device), and mechanism (by bundle ID). It distinguishes reasonably from siblings like device_launch_app (generic/cross-platform) and ios_launch_app_in_language (adds locale parameter), though it doesn't explicitly name them.

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 explains the internal mechanism ('Uses iOS automation activate if a session is active, falls back to the direct iOS transport'), which implies usage context. However, it doesn't explicitly state when to choose this over siblings like ios_launch_app_in_language or device_launch_app, nor does it mention prerequisites like needing a session active or device connected. The mechanism hint provides partial guidance but no exclusions.

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. 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"
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 key behavioral traits: per-launch override scope, reversion on external relaunch, the runtime requirement (NSLocalizedString/Bundle.main.localizedStringForKey), and the legacy-app locale-caching caveat with a workaround. This is rich context, though it doesn't mention return values 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.

Conciseness4/5

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

The description is a single focused paragraph that front-loads the core purpose and then adds practical caveats. It's information-dense with every sentence earning its place (purpose, example, override scope, technical prerequisite, workaround). Slightly long but justified given the behavioral nuances it must convey.

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 purpose, usage context, technical constraints, and troubleshooting. It explains the locale defaulting behavior and legacy-app caveat. It could mention failure modes or return behavior, but for a launch tool the completeness is high relative to what's conveyable in prose.

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 four parameters adequately. The description adds the default-locale derivation note ('defaults to <language>_<UPPER(language)>') in the schema's locale description, and clarifies the language parameter is ISO 639-1. The description text itself adds moderate value but the schema already 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 states a specific verb+resource ('Launch an iOS app forced into a specific language / locale') with a clear scope and a concrete QA example (testing app localization in Spanish without flipping the whole device). It clearly distinguishes from siblings like ios_launch_app, ios_set_device_language, and device_launch_app_in_language.

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 explains when to use this tool (QA testing localization per-launch without changing system settings) and explicitly states the per-launch override behavior, that relaunching outside the tool reverts to system language, and the NSLocalizedString prerequisite. It also warns about legacy apps that cache locale and instructs to kill via ios_kill_app and re-call. This directly names an alternative approach for troubleshooting.

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 all installed apps on an iOS device. No automation session required.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID
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 that no session is required, which is genuinely useful behavioral context. However, it doesn't mention return format, whether this returns bundle IDs vs display names, or any performance implications of listing all 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?

Two short sentences, zero waste. It states the core purpose and the one key usage caveat (no session required) without any filler.

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 single-parameter list tool, the description is reasonably complete. However, it's a somewhat rich operation (returns all installed apps) and doesn't describe what the output includes (bundle IDs, names, paths), and there's no output schema to fill that gap. Sibling tools like app_list and device_list_apps suggest overlap that isn't clarified.

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 udid parameter is fully described in the schema. The description's phrase 'No automation session required' clarifies that udid alone is sufficient without additional session context, which is a small value-add, but it doesn't add format or sourcing details beyond the schema.

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 lists all installed apps on an iOS device. It uses a specific verb+resource ('List all installed apps') that distinguishes it from generic app_list and device_list_apps siblings, and the iOS specificity helps disambiguation.

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 statement 'No automation session required' provides useful context implying this works standalone unlike many iOS tools that need sessions. However, it doesn't explicitly differentiate from siblings like device_list_apps or ios_active_app, nor mention when to prefer this over alternatives.

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

ios_lock_statusCInspect

Check if an iOS device screen is locked. Requires an active iOS automation session.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID
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 session requirement, which is useful, but it doesn't disclose what the tool returns (e.g., boolean, status object), whether it affects device state, or what happens if the session is inactive. For a read-type status check, the behavior is simple, but the lack of return semantics is a gap.

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 plus one prerequisite clause. It's efficient and contains no filler. The session requirement adds value without bloating. It could be scored 5, but the lack of return-value info slightly limits its completeness.

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

Completeness2/5

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

The tool has no output schema and no annotations, so the description must carry more weight. It mentions inputs (udid via schema) and the session requirement, but doesn't describe the return format or value semantics (e.g., locked vs unlocked interpretation). For a simple status-check tool the description is minimally adequate but leaves the agent guessing about the output shape.

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 'iOS device UDID,' so the single required parameter is already documented in the schema. The description does not add any additional parameter meaning beyond what the schema provides. With full schema coverage and only one parameter, 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 the verb+resource: 'Check if an iOS device screen is locked.' It names the specific operation and the target (iOS device screen lock status). However, it doesn't explicitly differentiate from siblings like ios_active_app or ios_hid_status, though the purpose is specific enough that confusion is unlikely.

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 only usage guidance is the requirement 'Requires an active iOS automation session.' This implies a prerequisite but provides no when-to-use guidance, no alternatives, and no mention of contexts where this would be relevant (e.g., before performing automated input actions). Among a large family of ios_* tools, there's no differentiation or recommendation for when to prefer this tool.

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)
udidYesiOS device UDID
durationNoHold duration in ms (default: 800)
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 operation semantics (hold gesture), the default duration context (800ms via schema note), and the session requirement. However, it does not disclose what happens on failure (no active session), whether coordinates are relative to the screen vs window, or any side effects beyond triggering UI responses. For a gesture tool this is moderate 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 concise sentences, no waste. Front-loaded with the core action, then differentiating traits, then prerequisites. 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 4-parameter gesture tool with no output schema, the description covers purpose, sibling differentiation, coordinate units, and session prerequisite. The only gap is failure behavior on inactive sessions, but given the low complexity this 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%, covering x, y, udid, and duration with clear descriptions. The description reinforces that coordinates are 'screen points' and mentions the default hold duration. Baseline 3 is appropriate since the schema carries the parameter documentation weight and the description adds only marginal reinforcement.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 specific verb+resource: 'Long press at (x,y) on an iOS device screen.' Explicitly distinguishes from ios_swipe (motion) and ios_drag_drop (hold + motion), which differentiates it from close siblings. States the coordinate system (screen points) and activation use-cases (context menus, peek/pop, drag handles).

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 names alternatives (ios_swipe, ios_drag_drop) with the distinguishing criterion (motion). Mentions the prerequisite of an active iOS automation session. No explicit exclusions or when-not-to-use guidance, but the sibling differentiation plus session requirement provide clear contextual guidance.

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

ios_long_press_hidAInspect

Long-press (hold) at (x,y) via the CoreDevice HID path (WDA-free). Coordinates are iOS screen points. Single-contact only. 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
durationMsNoHold duration in ms (default: 600)
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 several useful behaviors: coordinates are iOS screen points, single-contact only, and the error behavior on iOS 17.x/no-tunnel. However, it does not disclose whether the action is destructive, whether it requires an active session, authentication/permissions, or what happens on failure beyond the specific error string. For a touch-input tool, these are the key behavioral traits, and some but not all 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.

Conciseness4/5

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

The description is compact—two sentences covering purpose, coordinate system, contact limit, and error behavior. It's front-loaded with the action and method. The sentences are dense but each carries meaningful information. No waste, though it could be argued the 'Single-contact only' and error string could be more logically grouped.

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 touch-input tool with no output schema and no annotations, the description provides essential context (coordinate system, contact limit, error behavior) but omits some practical details: whether this requires an active CoreDevice tunnel/session, the effect of durationMs default, and typical use patterns. The presence of many related HID sibling tools (ios_tap_hid, ios_swipe_hid, ios_drag_hid) suggests the description should clarify how this fits among them. Given full parameter coverage in the schema, this is acceptable but not rich.

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% (all 5 parameters have descriptions in the schema). The description adds the 'iOS screen points' clarification for coordinates, which reinforces the schema's norm flag explanation. However, it doesn't add significant meaning beyond what the schema already provides—the schema itself thoroughly documents x, y, norm, udid, and durationMs. The description's coordinate-point clarification is a small additive value, making 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?

The description states a specific action ('Long-press (hold)'), the resource (coordinate on iOS screen), and the method (CoreDevice HID path, WDA-free). It clearly differentiates from the sibling ios_long_press tool by specifying the HID implementation path and noting 'Single-contact only.' The name 'ios_long_press_hid' maps directly to the described behavior.

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 some useful context (WDA-free HID path, single-contact only, iOS screen points) but does not explicitly state when to use this tool versus alternatives like ios_long_press, ios_tap_hid, or ios_swipe_hid. The 'Returns "no HID available" on iOS 17.x / no-tunnel' line implies a limitation but doesn't explicitly guide the agent toward a fallback alternative.

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

ios_mitm_flowsAInspect

Snapshot recent DECRYPTED HTTPS flows (request/response) captured since ios_mitm_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.
Behavior4/5

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

With no annotations provided, the description carries full burden. It usefully discloses that bodies are truncated (each 'capped at 32000 chars'), that includeBodies defaults to false, and that only decrypted HTTPS flows are returned. It does not warn about performance/rate concerns or data volume implications of large captures, but the truncation and default-false disclosures are meaningful behavioral 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 a compact three-sentence block that front-loads the core purpose, then adds parameter behavior. Every sentence contributes information. It's slightly dense as a single run-on paragraph but is efficient overall with no filler or redundant 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?

The tool has 5 parameters and moderate complexity (filtering, body inclusion), all covered at 100% in the schema. No output schema exists, so the description helpfully enumerates the per-flow fields returned (method, url, host, status, contentType, sizes, durationMs). This is reasonably complete for a read-only flow-querying tool, though it doesn't disclose whether results require an active capture session or handle the no-capture case.

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

Parameters4/5

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

The schema has 100% coverage of all 5 parameters, so the schema already documents each one. The description adds value by clarifying the default behavior ('default 100', 'Default false' for includeBodies), the body truncation cap of 32000 chars, and the filtering semantics (urlSubstring / onlyErrors). This adds meaning beyond bare parameter names and types, though some details duplicate 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 clearly states what the tool does: 'Snapshot recent DECRYPTED HTTPS flows (request/response) captured since ios_mitm_start.' It specifies the verb (snapshot), resource (HTTPS flows), and distinguishes itself from sibling tools like ios_mitm_start/stop/status (which manage the capture rather than read results). The 'DECRYPTED' qualifier adds distinct technical value.

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 states the flow data is 'captured since ios_mitm_start,' which implicitly communicates the prerequisite that capture must be running. It documents filters (urlSubstring, onlyErrors) and the limit behavior. However, it does not explicitly name an alternative tool for when this one shouldn't be used (e.g., android_mitm_flows for Android devices), though sibling context makes that inferable by platform.

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

ios_mitm_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 mitmproxy — 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_mitm_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")
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 comprehensively discloses: the request never reaches the real server, mode semantics (mock returns status/headers/body, abort kills connection), live-effect behavior without restart, per-device storage, dependency on TLS capture being running, and the certificate-pinning limitation. This is thorough 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.

Conciseness4/5

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

The description is a single dense paragraph covering purpose, modes, prerequisites, live-effect behavior, and limitations. It's front-loaded with the core purpose and mode distinction. Slightly over-lengthy with multiple clauses, but every sentence contributes meaningful information. Could be split into shorter sentences for readability, but content is 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 12-parameter tool with no output schema, the description is remarkably complete. It covers prerequisites (TLS capture running), operational semantics (live effect, no restart), mode-specific behavior, edge cases (certificate-pinned apps never match), and per-device scoping. The combination of 100% schema coverage plus this rich descriptive context fully equips an agent to use 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 schema documents all 12 parameters. The description adds value by explaining the operational semantics (mode 'mock' returns status/headers/body; mode 'abort' kills the connection, so an app sees network failure) which clarifies how parameters like status/headers/body are used per-mode. It doesn't add per-parameter detail beyond the schema, but the mode-behavior explanation enriches 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 adds or updates a mock/abort rule that short-circuits HTTPS requests inside mitmproxy, with distinct behaviors for 'mock' vs 'abort' modes. It differentiates from siblings (ios_mitm_mock_list, ios_mitm_mock_remove, ios_mitm_flows) by focusing on adding/updating routes, and mentions the in-place update capability via id matching.

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: requires TLS capture already running (ios_mitm_start), explains routes are per-device and take effect live without restart, and names the prerequisite tool. It also lists an exclusion — certificate-pinned apps cannot be intercepted, so routes targeting pinned traffic will never match.

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

ios_mitm_mock_listBInspect

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

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID
Behavior2/5

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

No annotations are provided, so the description carries full behavioral disclosure burden. The description only states it lists routes but doesn't disclose whether it requires an active mitm session, what format the list is returned in, whether 'abort' routes are a distinct concept from 'mock' routes, or what happens if no routes are configured. For a read/list operation with zero annotation coverage, more behavioral detail is expected.

Agents need to know what a tool does to the world before 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, complete sentence (plus a parenthetical reference) that conveys the tool's purpose efficiently with zero waste. It's front-loaded with the core action verb 'List' and the resource, with the cross-reference to the sibling add-tool grouped cleanly in parentheses. Model example of concision.

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 list operation with one well-documented parameter and no output schema, the description provides adequate intent. However, it doesn't explain whether the 'abort routes' and 'mock routes' are separate overlapping concepts, whether the result depends on an active mitm session state, or how the output is structured. Given the low complexity (1 param, no nested objects), this is adequate but not comprehensive.

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 a single 'udid' parameter well-documented as 'iOS device UDID.' The description adds context by clarifying the operation targets 'this device' (the device whose UDID is passed), reinforcing the parameter's meaning. With only one required param and full schema coverage, baseline is 3; the description's device-scoping reference adds marginal value.

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 'mock/abort routes currently configured for this device,' establishing a specific verb (list) and resource (mock/abort routes). It distinguishes itself from siblings like ios_mitm_mock_add and ios_mitm_mock_remove through the explicit 'list' action and reference to configured routes. It's clear but doesn't explicitly contrast with ios_mitm_flows or status tools, so not 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 Guidelines3/5

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

The description cross-references ios_mitm_mock_add via the parenthetical, implicitly guiding users to understand this lists what that tool adds. However, it provides no explicit 'when to use vs alternatives' guidance (e.g., when to use this vs ios_mitm_flows, ios_mitm_status). The reference to the pairing tool provides decent context but no exclusions or conditions.

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

ios_mitm_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_mitm_mock_add or ios_mitm_mock_list)
allNoRemove every route configured for this device instead of a single one
udidYesiOS device UDID
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. The description explicitly states it 'Returns the resulting route list' which discloses the return value. It clearly distinguishes the 'all=true' destructive bulk operation from the single-route removal, which is a meaningful safety-relevant disclosure given the destructive nature of the operation without 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?

Two sentences with zero wasted words. The first sentence states the core action and both operation modes, the second discloses the return value. Everything present earns its place and nothing is superfluous.

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 tool with 3 parameters, all documented at 100% schema coverage, the description adequately covers the operation modes and return value. It could mention what happens when neither id nor all is provided (though 'all' is optional and description implies id is the default path), and the absence of an output schema means the return format ('resulting route list') is only vaguely described. However, for a simple removal tool this 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%, so the schema already documents all three parameters (id, all, udid) with descriptions. The description adds the distinction between single vs bulk removal which maps to the 'id' vs 'all' parameters, adding a small amount of value, but doesn't elaborate on edge cases (e.g., what happens if both id and all are provided, or if id doesn't exist). 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 ('remove') and resource ('mock/abort route'), scoped by device, with clear semantics for both single-route (by id) and bulk removal (all=true). It distinguishes from sibling tools like ios_mitm_mock_add and ios_mitm_mock_list by clearly stating the removal operation and also mentions 'abort' routes beyond just 'mock' 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?

The description clearly explains both invocation modes: removing one route by id vs removing every route when all=true. While it doesn't explicitly name alternative tools or exclude conditions, the semantic distinction from siblings (add, list, flows) is implicit and the tool's role in the lifecycle is understandable from the add/list/remove/mock family patterns.

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

ios_mitm_startAInspect

Start TLS inspection on a physical iOS device: brings up a per-device mitmproxy 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_mitm_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 needs a supervision keybag (PYMOBILEDEVICE3_SUPERVISION_KEYBAG).
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 substantial behavioral traits: that it mutates device state (installs profile), decrypts HTTPS traffic, defaults to silent supervised install, falls back to prompt install without supervision keybag, and notes certificate-pinned apps won't decrypt. It stops short of describing side effects like whether prior mitm sessions are stopped or how cleanup works, but the coverage is strong 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.

Conciseness4/5

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

Two dense, front-loaded sentences that pack a lot of useful info without waste. The first sentence establishes the core purpose and mechanism; the second covers the install mode decision and the certificate-pinning caveat. Slightly long but 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 two-parameter tool with no output schema, this description is quite complete: mechanism, default behavior, fallback, prerequisite keybag, effectiveness caveat, and follow-up tool reference. The only gap is not describing what success looks like (return value) or how to stop the session (though ios_mitm_stop exists as a sibling). For the complexity level, this is strong.

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 (udid, silent) already documented in the schema. The description adds value by explaining the silent parameter's behavioral meaning (supervised silent vs prompt install) and mentioning the supervision keybag prerequisite (PYMOBILEDEVICE3_SUPERVISION_KEYBAG), which goes beyond the schema. However, udid is not elaborated beyond the schema's 'iOS device 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?

The description starts with a specific verb-resource pairing ('Start TLS inspection on a physical iOS device') and clearly articulates what it does: brings up per-device mitmproxy, installs CA-trust + HTTP-proxy profile, decrypts HTTPS traffic. It distinguishes itself from Safari DevTools explicitly ('works for native apps too, unlike Safari DevTools') and from the android_mitm_start sibling by the iOS/device scoping.

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 context and workflow: 'Then drive the app and read flows with ios_mitm_flows.' It also explains the two install modes (supervised SILENT vs prompt install fallback) and when each applies, giving clear decision guidance for the 'silent' parameter. The statement about certificate-pinned apps not decrypting serves as a caveat on effectiveness.

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

ios_mitm_statusAInspect

Report whether TLS inspection is running for a device and how many flows are buffered.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID
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 description discloses that the tool reports whether TLS inspection is running and the buffered flow count, which is a read-only status query. However, it doesn't state what happens if no MITM is active, whether this is safe/non-destructive, or whether it reflects real-time state. The description adds reasonable status-query context but lacks depth.

Agents need to know what a tool does to the world before 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, tightly-scoped sentence that states purpose and output in one line. There is zero waste and every word earns its place. This is appropriately concise for a simple status-checking 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 single-parameter status tool with full schema coverage and no output schema, the description is mostly adequate. It states the two outputs (running status and buffered flow count). However, it could be more complete by indicating the meaning of 'buffered flows' and behavior when MITM isn't active. Given the simplicity of the tool, near-adequate but a bit thin.

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 udid defined as 'iOS device UDID'. The description adds the notion that the query targets a specific device's TLS inspection state, but it doesn't add meaning beyond what the schema already provides for the parameter. Baseline 3 is appropriate given full 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 tool reports TLS inspection status and buffered flow count for a device. It uses a specific verb ('Report') tied to a clear resource (TLS inspection status for a device) and differentiates from sibling tools like ios_mitm_start/stop/flows by focusing on status/query rather than action. It doesn't explicitly contrast with siblings but the purpose is evident.

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 a status-checking tool used to query whether TLS inspection is running and how many flows are buffered. However, it doesn't explicitly state when to use it over alternatives (e.g., ios_mitm_start to initiate, ios_mitm_flows to retrieve captured flows). The when-to-use context is implied by the verb 'Report' but no exclusions or alternatives are named.

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

ios_mitm_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 mitmproxy 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
Behavior5/5

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

No annotations were provided, so the description carries full burden of behavioral disclosure. It fully delivers: explains the conditional behavior (stillRunning: true when other consumers remain), what gets removed only when all consumers stop (profile removed, proxy killed, buffered flows discarded), and the scoped/non-destructive nature of operation. This is exemplary transparency for a tool with 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.

Conciseness4/5

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

Three sentences, all substantive. The first sentence delivers the purpose and scope immediately. The remaining sentences explain the conditional multi-consumer behavior without waste. Slightly dense, but every clause earns its place — 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 single-parameter tool with no output schema, the description is complete: it covers purpose, scope (this consumer), conditional behavior (multi-consumer), teardown outcomes (profile removal, proxy kill, flow discard), and the stillRunning signal. There is nothing important left unexplained about invocation or expected 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?

Schema coverage is 100% for the single udid parameter, and the schema description 'iOS device UDID' is sufficient. The description adds functional context about how the udid is used (which device's inspection to stop) but doesn't add format or constraints beyond the schema. Baseline 3 is appropriate since the schema fully documents 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 'Stop TLS inspection for a device from THIS (AI) consumer only' — a specific verb (stop) with a precise resource (TLS inspection from this consumer). It distinguishes itself from android_mitm_stop by the explicit iOS/this-consumer scoping, and differentiates from the mitm_start/status siblings. The scope restriction ('from THIS consumer only') is a sharp differentiator.

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 the when and how: it stops only this consumer's capture, and explicitly states the when-not behavior — when the workspace UI or another agent also has capture open, the mitmproxy and CA profile are left running. It explains the only-fully-stops-when-every-consumer-has-stopped condition. This is explicit usage guidance with clear multi-consumer semantics.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID
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. It discloses the auto-wake behavior on black frames, the session requirement, and clarifies the image is NOT 1:1 with device points. It doesn't detail failure modes or what happens without an active session, but the key behavioral traits are surfaced clearly.

Agents need to know what a tool does to the world before 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, output format, key conversion formula warning, usage recommendation, auto-wake behavior, and session requirement. Front-loaded with 'PREFERRED fast screenshot' for immediate recognition. 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 single-parameter tool with no output schema, the description is remarkably complete. It explains the return value (JPEG + text block with conversion formula), the critical pixel/point distinction, when to use it, and the prerequisite. The complexity is low, and nothing important 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?

Schema description coverage is 100% for the single udid parameter, which is self-explanatory ('iOS device UDID'). The description doesn't add parameter-specific detail beyond what the schema provides, but with only one simple parameter and full 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 captures a fast iOS screenshot via MJPEG stream, returns a JPEG plus pixel-to-point conversion info. It distinguishes itself from ios_screenshot by naming it as the faster alternative ('Much faster than ios_screenshot') and specifically calls out the scale-conversion formula as its key value-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?

Explicit guidance on when to use this tool ('use it for routine per-action checks') and implies when not to (ios_screenshot is the slower alternative). Names the alternative explicitly (ios_screenshot), states the requirement (active iOS automation session), and flags the #1 pitfall (pixel-to-point scale guessing).

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 WDA (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
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 disclosing behavior. It covers the navigation mechanism (address-bar type + submit), the verification step (via Web Inspector to avoid false success reports), and the session auto-start behavior. However, it doesn't disclose failure modes, permission requirements, or what happens if the iOS session can't be established.

Agents need to know what a tool does to the world before 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 filler. The description front-loads the primary action, then adds differentiation guidance and a prerequisite note. 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 2-param, no-output-schema tool with zero annotations, the description covers the core purpose, the mechanism, the verification guarantee, sibling differentiation, and prerequisites. It could mention what 'verify via Web Inspector' produces as output/return, but given the tool's relative simplicity, this is well covered.

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 both parameters (udid, url) are documented in the schema. The description adds the important detail that url must 'include https://', which is behavioral info not in the schema. This compensates well for the schema's minimal 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 ('Navigate Safari to a URL') with a specific resource (iOS device via WDA) and mechanism (address-bar type + submit). It distinguishes itself from sibling ios_safari_navigate by explicitly naming it and explaining the different approach (CDP-based vs WDA address-bar).

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: 'For Safari, prefer ios_safari_navigate (CDP-based, also cold-opens Safari).' This directly points the agent to the alternative for the Safari case, making the usage boundary clear. It also states the prerequisite of an active iOS automation session and notes it 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_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
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 session requirement but does not disclose what happens to the current view state after rotation, whether this persists across app sessions, whether it affects the device or just the current app, or whether any reverting behavior exists. As a mutating operation with zero annotation coverage, this is a notable gap—the agent cannot fully predict the 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 tight two-sentence structure with zero waste. The first sentence states the purpose clearly and the second adds the critical prerequisite. No filler, no redundancy, perfectly front-loaded with the core action.

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 and a concise purpose, the description is reasonably complete. However, it lacks behavioral context: no information about the impact of the rotation on the current session, whether the call is asynchronous or synchronous, or any error conditions. Given no annotations and no output schema, slightly more behavioral context would improve completeness for a mutating 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%, meaning both parameters (udid and orientation) are documented in the schema. The enum for orientation constrains values to PORTRAIT or LANDSCAPE, and the description adds no additional meaning beyond what the schema conveys. Baseline 3 is appropriate since the schema handles the documentation load adequately.

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+resource: 'Set the screen orientation of an iOS device.' It clearly identifies the target platform (iOS) and the operation (set orientation), which distinguishes it from the large suite of sibling iOS tools. It's specific and unambiguous, though it doesn't explicitly differentiate from analogous android tools beyond the naming convention.

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 notes it 'Requires an active iOS automation session,' which is a helpful prerequisite detail. However, it doesn't provide explicit when-to-use guidance, mention that only PORTRAIT and LANDSCAPE are supported (beyond schema), or clarify when this tool would be preferred over related tools like ios_window_size, which might interact with orientation/rotation behavior. The prerequisite is useful but no exclusions or alternatives are discussed.

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: "label" @ (cx,cy) WxH, where (cx,cy) is the element CENTER and the exact tap point. 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" for the full hierarchy. 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.
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 of behavioral disclosure. It does well: discloses [zero-area] elements cannot be coordinate-tapped, explains [off-screen] flagging behavior with search, notes format defaults and overrides (search overrides visibleOnly), and states the session auto-start requirement. It doesn't describe pagination limits or what happens with a huge hierarchy, but the existing disclosure is substantial for the tool's complexity.

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 information-dense but well-organized with clear signposting (FINDING THINGS IN LONG LISTS). Every sentence adds value — no filler. It's somewhat long but justified given 7 params and the nuanced coordinate-vs-label distinction. Could be slightly trimmed, but each section 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?

Despite no output schema and no annotations, the description is comprehensive: it defines the return format precisely (Type: 'label' @ (cx,cy) WxH with center as tap point), flags edge cases (zero-area, off-screen), covers all 5 non-required filters with their behaviors, and states session requirements. For a page-source complex tool with 7 parameters, this is thorough and 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 baseline is 3. The description adds meaningful behavior beyond the schema: it explains that search greps across the WHOLE hierarchy including scrolled-off-screen elements with [off-screen] flagging, that search overrides visibleOnly, that tappableOnly maps to interactive control types, and that type accepts prefixes. It reinforces the coordinate/tap distinction critical to interpretation. This goes beyond simple parameter restatement.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships 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 what the tool does: get the UI hierarchy of an iOS device as 'THE single source of truth for element coordinates'. It names the specific verb (get), resource (page source), and differentiates its default format ('description') with a precise coordinate/format explanation. It also distinguishes from siblings like device_page_source (iOS-specific vs generic) by emphasizing the coordinate/tap-point focus.

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 and alternatives: it directs the agent to prefer ios_tap_by_label over raw coordinate taps, explains when to use search vs visibleOnly for long lists, recommends ios_scroll_to_element for off-screen elements, and ios_find_element for duplicate label disambiguation. It also distinguishes format usage (description vs xml). These are concrete, actionable usage rules.

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 (com.apple.pcapd — the same facility as pymobiledevice3 pcap). Captures REAL packets, 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)
Behavior4/5

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

With no annotations available, the description carries the full burden and largely succeeds: it discloses one-capture-per-device limit, the REAL vs filtered nature, the TLS-encrypted output, and the auto-stop option. It doesn't mention permissions/auth requirements or what happens to prior captures, but the core behavioral traits are well disclosed.

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

Conciseness5/5

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

Four dense sentences with zero filler. The key fact (TLS-encrypted, no HTTP bodies) is front-loaded, alternatives are placed where needed, and each sentence adds distinct 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 streaming start-tool with no output schema and no annotations, the description is thorough: it covers output format (.pcapng), data limitations, filtering options, packet counting, lifecycle ending, and the alternative for different needs. 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 value by explaining the process param (process name examples mobilesafari/backboardd) and interfaceName (en0) beyond schema labels, plus explaining packets auto-stop behavior with its default semantics. Good enhancement over schema.

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

Purpose5/5

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

The description clearly states the verb (Start), the resource (device-wide NATIVE network packet capture using com.apple.pcapd), and offers strong differentiation from siblings. It explicitly names ios_safari_capture_network as the alternative for HTTP bodies, and the workflow pairing with ios_pcap_stop 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 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 ('for packet-level analysis'), explicitly what NOT to expect (no HTTP bodies, TLS-encrypted), names the alternative tool (ios_safari_capture_network with bodies), and explains lifecycle (End with ios_pcap_stop). Very strong usage guidance.

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
Behavior3/5

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

No annotations are provided, so the description carries full burden. The description discloses it reports status (running + byte count), which is a read-only behavioral trait. However, it doesn't disclose what happens if no active capture exists (returns not-running vs error), or whether this tool affects the capture in any way. The read-only nature is reasonably implied but could be more explicit given 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 a single, tightly-worded sentence with zero waste. It front-loads the main purpose (report status) and includes the two key data points (running state and byte count) without padding.

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 simple: one parameter, no output schema, read-only status query. The description covers the core behavior (reports running status and byte count). Minor gaps include what happens when no capture is active and the exact output format, but for a simple status-check tool with strong sibling context (pcap_start/pcap_stop), this is largely 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% with a single udid parameter described as 'iOS device UDID'. The description doesn't need to add much for a single self-explanatory parameter. The description effectively conveys the tool operates on a specific iOS device, which complements the parameter. Baseline 3 applies, with the 'native packet capture' context adding marginal value, so 4 is slightly generous but reasonable given the parameter's simplicity.

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 reports active native packet capture status on an iOS device, specifying it reports whether capture is running and bytes captured. This distinguishes it from sibling tools ios_pcap_start and ios_pcap_stop, which clearly initiate and stop capture respectively.

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 (after starting a pcap capture via ios_pcap_start, to check its status) but does not explicitly state when to use it vs alternatives. It references 'active' capture, which implies it should be used during an ongoing capture session, but no explicit when/when-not guidance is given.

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
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 and does well: it explains output behavior (small captures inline as base64, larger written to .pcapng on RDS host with path returned) and instructs opening in Wireshark. This is meaningful behavioral context beyond what annotations would 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 compact and efficient, packing useful functional detail (output format handling, size threshold, return mechanism) into 3 sentences without redundancy. It's front-loaded with the core action and adds the valuable return-format 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 tool with high schema coverage and no output schema, the description is fairly complete. It addresses the main uncertainty—how the capture result is returned (inline vs. file path with size threshold)—which is the key behavioral detail. It could note rounding down to the thousandth, but that's 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% with a single udid parameter that is clearly documented ('iOS device UDID'). The description adds no additional parameter semantics, but with high schema coverage, baseline 3 is appropriate. The description does reference the device context implicitly.

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

Purpose4/5

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

The description clearly states the tool stops an active iOS packet capture and returns the capture as pcapng. It uses a specific verb (stop) with a clear resource (native packet capture on iOS device) and distinguishes itself from ios_pcap_start and ios_pcap_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 Guidelines3/5

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

The description implies usage (stop an active capture) but doesn't explicitly state prerequisites like having started a capture with ios_pcap_start first, or when to prefer this over other capture tools like ios_mitm_stop. Context is implied by the name and sibling relationships rather than stated.

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)
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's a paired start/stop workflow requiring a subsequent stop call and that it records over time (implying resource duration). It doesn't disclose resource cost, whether multiple concurrent recordings are allowed, or impact on device performance. 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.

Conciseness4/5

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

Two sentences, both substantive. The first sentence front-loads purpose and the stop-pairing workflow. Efficient with no filler, though slightly dense with the 'screen recording' analogy packed in.

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 no output schema and no annotations, the description provides the critical pairing detail (call stop with returned sessionId) and the bundleId behavioral difference. Reasonably complete for a simple parameter set, though it could note what the session tracks beyond CPU/memory and any sampling limits.

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 documents all 3 parameters. The description adds the bundleId semantics ('focus one app; else top processes by CPU') which enriches that parameter's meaning. It doesn't add detail on intervalMs beyond the schema's default of 1000. Baseline 3 with slight value-add.

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?

Clear verb+resource: start recording CPU/memory over time. The screen-recording analogy and 'top processes by CPU' fallback add useful scope. It doesn't explicitly distinguish from sibling ios_performance_snapshot or the similar android_performance_record_start, but the iOS prefix and recording-vs-snapshot distinction is reasonably 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?

Explicitly says to 'Drive the app, then call ios_performance_record_stop with the returned sessionId' and explains that focusing with bundleId records one app, else top processes. This gives clear usage context and workflow sequencing, though it doesn't state when NOT to use it vs the snapshot tool.

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
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 stops a recording and returns data but does not describe side effects (what happens to the recording buffer after stop, whether data is cleared, whether another start is required for a new session, or what happens if the session doesn't exist). For a termination 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?

A single sentence that conveys the action, the dependency, and the return value with zero waste. No redundancy with the schema. Front-loaded with the action verb.

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 pairs cleanly with its start companion, and there is no output schema, so the description helpfully enumerates the return contents (time-series, per-process avg/peak CPU, peak memory). However, it doesn't cover error cases (unknown/invalid sessionId), session lifecycle implications (can it be stopped twice?), or whether data is retained after stopping. Adequate for a simple 1-param paired tool but not comprehensive.

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% — the single sessionId parameter is documented in the schema as 'Session id from ios_performance_record_start'. The description also reinforces the session's provenance by naming the source tool. With only one parameter fully described in the schema, the description adds marginal but non-zero value (clarifying the output format). Baseline 3 adjusted slightly upward.

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 (Stop a performance recording) and the resource (one started with ios_performance_record_start), and specifies the return value (full time-series + per-process summary with avg/peak CPU and peak memory). This is specific enough to differentiate from the start companion or the snapshot sibling, though it doesn't explicitly name an alternative 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 names the prerequisite companion tool (ios_performance_record_start), which is the key usage context — it only makes sense to call this after starting a recording. It does not explicitly say 'do not use android_performance_record_stop' for iOS or distinguish from ios_performance_snapshot, but the pairing with the start tool provides clear enough context for 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_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
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 clarifies 'physical device' (not simulator) and 'No automation session required' — useful non-obvious context. However, it doesn't disclose metrics granularity, sampling duration, or whether this is a snapshot vs monitoring (the name implies snapshot). The phrase 'top processes by CPU' hints at return content but not in 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 concise sentences with zero wasted words. The description front-loads the core purpose, then adds scope detail and the key behavioral note about no session required. Efficient and appropriately sized.

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 snapshot tool with full schema coverage and no output schema, the description is largely complete: purpose, target device, scoping options are all present. The only gap is not mentioning return format (e.g., does it return a list with % labels), but the description's 'Returns the top processes by CPU' partially addresses this. A snapshot tool with this clarity 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?

Schema coverage is 100% with each parameter documented (topN limit, udid, bundleId). The description adds marginal value by explaining that bundleId also accepts 'app/process name', which extends beyond the schema's 'bundle id' phrasing — this is genuinely useful. Otherwise the description mostly restates what the schema already 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 states a specific verb+resource ('Snapshot per-process CPU and memory for a physical iOS device') and clarifies scope (top processes by CPU or single app by bundleId). It distinguishes from generic device snapshots but doesn't explicitly contrast with the sibling 'android_performance_snapshot' or '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 Guidelines3/5

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

The description implies physical device usage ('No automation session required') and when bundleId focuses a single app. However, it doesn't explicitly name alternatives like ios_ps or ios_performance_record_start/stop, nor clarify when this vs those should be preferred.

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)
udidYesiOS device UDID
scaleYesEnd/start finger-separation ratio: >1 zoom in, <1 zoom out (0.2–5)
durationMsNoGesture duration in ms (default: 250)
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 disclose key behaviors: both fingers ride a vertical axis through the centre, fingers are auto-clamped on-screen, coordinates are screen points, and it requires an active session. It additionally explains the scale ratio semantics (2 doubles, 0.5 halves) which is genuinely useful behavioral context. However, it does not disclose whether the gesture is a discrete event or continuous, or behavior on failure (e.g., no session), which a mutation-like tool with zero annotations could reasonably disclose.

Agents need to know what a tool does to the world before 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 tight, roughly 4 sentences, dense with useful information and zero filler. Front-loaded with the core action ('Two-finger pinch-to-zoom centred at (x,y) on an iOS device'), then explains scale semantics, then finger behaviour, then use cases, then coordinate system, then a requirement. 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 gesture tool with complete schema coverage, no output schema (thus no return-value expectations to document), and no annotations, the description is well-rounded. It covers purpose, scale semantics, finger positioning behaviour, use-case applicability, coordinate system, and session requirement. The main gap is that with no annotations and no output schema, it could mention return value or feedback behaviour more explicitly, but this is a minor omission for a gesture action.

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

Parameters4/5

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

Schema coverage is 100% for all 5 parameters, so the baseline is 3. The description adds genuine value beyond the schema: it explains scale semantics ('~2 doubles, ~0.5 halves'), the vertical axis behaviour of the fingers, and the auto-clamp behaviour. It also clarifies that coordinates are screen points. This exceeds the baseline by adding meaning beyond what the schema's field descriptions provide, though it doesn't document durationMs explicitly beyond the default 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 provides a specific verb+resource: 'Two-finger pinch-to-zoom centred at (x,y) on an iOS device'. It clearly distinguishes from siblings (device_swipe, ios_swipe, ios_drag_drop, device_scroll etc.) by being the only gesture that describes multi-finger pinch semantics. The precise scale semantics (scale > 1 in, < 1 out) add specificity beyond a generic 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 Guidelines4/5

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

The description names explicit use cases ('Maps, Photos, Safari, camera') which gives clear context on when to use it. It also states a requirement ('Requires an active iOS automation session'). It does not explicitly name alternative sibling tools or state exclusions, though the iOS-native nature is clear from the name and it points users to the ios_* family implicitly. Lacking explicit 'use X instead' guidance prevents a 5.

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. 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
buttonYesButton name: home, volumeUp, volumeDown, return, go, done, search, backspace, delete, tab
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 behavioral disclosure burden. It does disclose the alias behavior (delete vs backspace, 'iOS soft keyboard treats both the same in most contexts'), the dropped-key-events behavior when keyboard isn't raised, and the session requirement. However, it doesn't disclose whether the press is synchronous vs asynchronous, whether it returns success/failure status, or any error conditions, which for a no-annotation tool leaves some 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?

Description is efficient—each sentence earns its place. It front-loads the core action, then categorizes button types, then provides the critical keyboard-raised caveat. No filler or redundancy. At roughly 60 words, it's appropriately sized for a tool with nuanced button 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?

Given the simple schema (2 simple params, no output schema, no annotations), the description covers the essential prerequisites (active session), the button semantics, and the critical timing caveat about keyboard visibility. The only notable gap is not describing what the tool returns or how to verify success, but for a press-action tool the risk is low and the description handles the important operational details 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 description coverage is 100% and both params (udid, button) are simple with self-describing names. The description adds value by explaining specific valid button values and their semantic meanings (e.g., delete is an alias for delete-right, tab is whitespace), which goes beyond the schema's bare list of button names. For a 2-param schema with full coverage, this is strong compensation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 action (press a button on iOS device) and enumerates specific button categories with exact names (home, volumeUp, volumeDown, return, go, done, search, backspace, delete, tab). It distinguishes between hardware, keyboard submit, and editing buttons, providing clear resource scope. The description differentiates this from sibling tools like ios_press_button_hid and device_key by specifying the semantic button names rather than HID codes.

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 notes it 'Requires an active iOS automation session' and provides a critical usage caveat about the soft keyboard needing to be visibly raised before backspace. However, it doesn't explicitly state when to prefer this over siblings like ios_press_button_hid, ios_key_hid, or device_key, or mention scenarios where it should NOT be used (e.g., when HID-level control is needed).

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

ios_press_button_hidAInspect

Press a hardware button via the CoreDevice HID Indigo path (WDA-free): e.g. "home". This reaches SpringBoard-privileged buttons that the touch surface cannot (Home/app-switch are filtered from virtual touch). Returns "no HID available" on iOS 17.x / no-tunnel.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesButton name, e.g. "home"
udidYesiOS device UDID
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: reaches SpringBoard-privileged buttons (beyond touch surface), is WDA-free via CoreDevice HID Indigo path, and has a failure mode on iOS 17.x/no-tunnel where it returns 'no HID available'. This is substantive behavioral disclosure. It could add auth/permission requirements but the hardware-button semantics and failure modes 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?

Three sentences with every sentence earning its place: the action+path, the differentiator vs touch, and the known failure mode. It's compact and front-loaded with the core verb first. Slightly dense parenthetical style but efficient overall.

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 2-param tool with full schema documentation and no output schema, the description is nearly complete. It covers what it does, why it's distinct from alternatives, and a known failure condition. Could mention what the return value looks like on success, but given full param coverage and no output schema, this is a small 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 coverage is 100%, so the schema already documents both parameters (udid, name). The description adds the example 'home' for the name parameter and clarifies it's a hardware button. The 'home' example is a meaningful addition beyond schema since it illustrates the expected enum-like value, but no button list or format validation is provided. Baseline 3 is appropriate given 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 clearly states the verb+resource: 'Press a hardware button via the CoreDevice HID Indigo path (WDA-free)'. It gives a concrete example ('home'), and distinguishes itself from the touch surface path by explaining it reaches SpringBoard-privileged buttons that virtual touch cannot. This differentiates from sibling ios_press_button and ios_tap*. It's specific and well-scoped.

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 implicitly communicates when to use this: when you need hardware buttons like Home that are filtered from virtual touch. It notes the WDA-free path and mentions the limitation on iOS 17.x/no-tunnel. However it doesn't explicitly name alternative tools for comparison or state 'when not to use' (e.g., when on iOS 17.x, use the fallback device_dismiss_recent_app or ios_press_button instead). The alternative is implied but not named.

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
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 that no automation session is required, which is useful behavioral context. However, it doesn't describe the output format (process list structure), whether it reflects app-visible or system processes, or any side effects. For a read-only listing tool the bar is somewhat lower, but more process-level context would help.

Agents need to know what a tool does to the world before 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 that are both informative and zero-waste. The sentence about no automation session is a meaningful behavioral note, not filler. 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 one-parameter, no-output-schema tool, the description is reasonably complete. It covers purpose, the sole parameter is documented in the schema, and the no-session requirement is noted. However, given the large sibling context (over 100 tools), slightly more differentiation from similar iOS diagnostic tools would improve 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%—the single 'udid' parameter is documented as 'iOS device UDID'. The description doesn't add anything beyond what the schema already provides. With 100% coverage, baseline 3 is appropriate; there's nothing to compensate for.

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+resource ('List running processes on an iOS device') which clearly states the tool's purpose. It distinguishes itself from sibling tools by scoping to iOS specifically (vs android alternatives) and being a process listing tool distinct from device_shell or ios_shell. However, it doesn't explicitly contrast with related sibling tools like ios_diagnostics.

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 adds 'No automation session required' which implies a usage context—this tool can be invoked without an established session. However, it doesn't explicitly state when to use this versus alternatives like ios_diagnostics, ios_device_info, or ios_shell ps. The usage guidance is minimal and mostly implied rather than explicit about exclusions or alternatives.

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. WARNING: This will restart the device. No automation session required.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID
Behavior3/5

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

The WARNING about restarting the device is valuable behavioral disclosure. However, there are no annotations provided, so the description carries full burden. It doesn't disclose what happens to running sessions, whether the call blocks until reboot completes, or the time cost of the operation. The warning covers destructive effects but leaves other behavioral details undocumented.

Agents need to know what a tool does to the world before 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, zero waste. The description front-loads the purpose, adds the critical warning immediately, and includes the usage note. Every sentence 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 one-param operation with no output schema, the description covers the essential points: purpose, destructive warning, and prerequisite (no session required). However, it could elaborate on reboot timing behavior or whether subsequent device operations may fail during the reboot window, which would improve an agent's ability to sequence actions.

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 with a clear description 'iOS device UDID'. The description doesn't add syntax or format details beyond the schema, but with full coverage and a single self-evident parameter, this is sufficient. No additional param 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 'Reboot an iOS device' with a clear verb+resource. It distinguishes itself within the large sibling set as the only explicit reboot tool (ios_lock_status, ios_kill_app, ios_terminate_app exist but none reboot). The purpose is specific and 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 notes 'No automation session required,' which provides a useful usage hint about when this can be invoked. However, it doesn't explicitly state when NOT to use it or compare to alternatives like ios_kill_app or ios_terminate_app. The conditionality of a reboot in the testing workflow is not discussed.

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)
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 an excellent job. It discloses idempotency (deleting non-existent file is not an error), the refusal to delete in-progress recordings, and the prerequisite condition. This is exactly the kind of behavioral context an agent needs 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 sentences, each earning its place: what it deletes, the idempotency guarantee, and the in-progress refusal. No wasted words, front-loaded with the core action.

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 delete operation with a well-documented schema and strong description, this is complete. It covers the safety-relevant edge cases (non-existent file, in-progress recording) and the input provenance. No output schema needed for a delete returning void/nothing.

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 already documents the httpPath parameter with 100% coverage including a concrete example pattern (/recordings/rec-ios-<uuid>.mp4). The description adds the source of that value (returned by ios_record_stop), which reinforces how to acquire it. Both schema and description work together 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?

The description clearly states the verb (delete), resource (finished iOS recording mp4), and even specifies the exact input parameter (httpPath from ios_record_stop). It fully distinguishes this from ios_record_start/ios_record_stop siblings which manage recordings rather than delete them.

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 what to pass (httpPath) and where to get it from (ios_record_stop). It gives a clear prerequisite ('Refuses to delete recordings that are still being written, call ios_record_stop first'). It doesn't explicitly name alternative tools for when not to use it, but the cleanup-specific purpose is clear enough that exclusions are largely self-evident.

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.
Behavior5/5

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

No annotations provided, so description carries full burden. It discloses the MJPEG-to-H.264 remuxing mechanism, auto-stop after maxDurationSec (default 300, max 600) to avoid disk fill, single-recording-per-device restriction, and that it returns a recordingId. Rich and honest 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?

Four tightly written sentences, all earning their place. Covers purpose, mechanism, prerequisite, safety cap, return value, and constraint. 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 side-effecting start-operation with no output schema, the description is complete: mechanism, output location, prerequisite, duration cap, return contract (recordingId), and concurrency constraint. All three params are documented and the workflow loop with ios_record_stop is spelled out.

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 by explaining fps is an 'input MJPEG framerate hint' with a smoothness/size tradeoff, and reinforces maxDurationSec as a hard cap for disk protection. Adds semantic context beyond raw 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?

Specific verb 'Start' + resource 'screen recording on an iOS device'. Clearly distinguishes from siblings: ios_record_stop exists, and device_record_start is the generic Android counterpart. Mentions output format (H.264 mp4) and location (/recordings/).

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 the prerequisite ('An iOS session must already be running (call ios_start_session first)'), explains the auto-stop behavior to protect disk, and clarifies the one-recording-per-device constraint. Tells user to pass recordingId to ios_record_stop, guiding the workflow.

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
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 SIGTERM is sent to the remux pipeline so the mp4 has a valid moov atom (explaining the termination mechanism and ensuring file validity). It also lists the return fields (hostPath, sizeBytes, durationMs, codec), which gives the agent a clear picture of the tool's behavior and output.

Agents need to know what a tool does to the world before 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 filler. Each sentence earns its place: the first states the purpose, the second explains the termination mechanism, and the third lists the return values. Front-loaded with the primary purpose and highly 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 single-parameter stop tool with no output schema and no annotations, the description is appropriately complete. It explains what will be returned (listing the fields inline), discloses the mechanism (SIGTERM/remux for valid moov atom), and links to its start counterpart. It doesn't explain error behavior if recordingId is invalid or the recording never started, but for a pair-tool stop operation this 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?

Schema description coverage is 100%, with the single recordingId parameter fully documented as 'recordingId returned by ios_record_start'. The description reinforces this by referencing the paired tool. Baseline of 3 is appropriate since the schema's description already carries the semantic weight; the description adds marginal context by confirming the provenance of the ID.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships 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 this tool stops an iOS screen recording initiated by ios_record_start, with a specific verb ('Stop') and resource ('iOS screen recording'). It explicitly references the paired start tool, which distinguishes it from generic device_record_stop and 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 establishes clear when-to-use context: it must be paired with ios_record_start and requires the recordingId from that tool. However, it doesn't explicitly note when NOT to use this in favor of alternatives like device_record_stop or ios_record_cleanup, though the IOS-specific pairing is strongly implied.

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 CoreDevice HID (WDA-free) — 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
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 a key operational detail: it fails/returns 'no HID available' on iOS 17.x or no-tunnel environments. It also specifies the coordinate system (iOS screen points) and norm behavior. The core mutation behavior of releasing a contact is clear, though it could mention what state the device is left in after the lift.

Agents need to know what a tool does to the world before 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, front-loaded with the primary action. All key context (pairing, coordinate system, known failure modes) is packed efficiently 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?

The description is complete for a simple release-action tool: it states the action, pairing, coordinate convention, norm behavior, and a known limitation (iOS 17.x). Since there is no output schema, one might wish it stated the no-HID case return format more precisely, but for a tool of this simplicity the 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?

Schema coverage is 100%, so the schema documents all four parameters. The description adds value by explaining the coordinate system (screen points) and referencing the paired ios_contact_hid for context, but it does not go beyond the schema for x/y semantics beyond what schemas already describe. Baseline 3 is appropriate 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 a specific verb+resource ('Lift the held contact at (x,y) via CoreDevice HID') and clearly distinguishes from siblings by naming its pairing partner ios_contact_hid. It also states what action it performs (mouse-button-up / touch-up) and clarifies it is WDA-free.

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 use context by noting it pairs with ios_contact_hid, indicating when it is used (to release a held contact). It states coordinates are iOS screen points and warns the tool returns 'no HID available' on iOS 17.x/no-tunnel. It does not explicitly name alternative tools or when NOT to use it, but the pairing with ios_contact_hid and coexistence of many ios_*_hid siblings imply the workflow.

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).

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)
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 output structure, body truncation caps (10k/200k chars), bodiesOmitted behavior, best-effort throttle with cleanup, unsupported offline mode, default/max duration, auto-selection of pageId, and token-budget rationale for the limit parameter. These are behavioral details beyond basic semantics.

Agents need to know what a tool does to the world before 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 provides essential operational detail for a tool with 12 parameters and no output schema. It is front-loaded with the core purpose and progressively adds details in a logical order (output, bodies, throttle, limit, window, page selection). 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?

The tool is complex and has no output schema, yet the description explains the complete return shape ({ records, bodiesOmitted? }, per-record fields, HAR option), all relevant caps, fallback behaviors, and edge cases (e.g., offline unsupported, pageId fallback). An agent can fully understand preconditions, usage, and expected results from this description 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 baseline is 3. However, the description adds meaning beyond the schema: it explains the record format (requestId, method, url, etc.), the meaning of bodyTruncated/bodyError, how bodiesOmitted appears, and the interaction between url and the capture session. Some of this overlaps with schema descriptions, but the record structure and composite behaviors add 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 verb and resource: 'Capture network requests made by a Safari page on an iOS device over a time window.' It specifies exactly what events are collected and even distinguishes itself from the Android counterpart by noting the offline throttle limitation.

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, including an explicit alternative: 'use android_devtools_capture_network for offline.' It also explains best practices for filtering (urlSubstring, onlyErrors), triggering requests (url or triggerJs), and formatting output (summary vs har).

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)
Behavior5/5

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

With no annotations, the description carries full responsibility for disclosing behavior. It states the tool is a LIVE-WINDOW collector, names the exact CDP events listened to (Runtime.consoleAPICalled, Runtime.exceptionThrown, Log.entryAdded), specifies the return array shape, and explains the race condition. It also provides window duration limits ('Default window: 5,000 ms. Maximum: 15,000 ms.')—all beyond basic 'collect logs' 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?

The description is appropriately sized for a tool with 5 parameters and non-obvious timing behavior. Every sentence serves a purpose: purpose, mechanism, race warning, triggerJs recommendation, duration limits, pageId guidance. It is front-loaded with the core action and densely packs necessary caveats without 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 complexity, the description covers all essential contexts: what it collects, the events behind it, the live-window semantics, how to trigger actions within the window, window bounds, and page targeting. The return format is stated explicitly. No output schema exists, but the description compensates thoroughly. There is no meaningful gap for an agent to misuse the 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 value by explaining why triggerJs exists and how it avoids races, and clarifies the auto-pick pageId behavior. It also notes that platformVersion is ignored. This goes beyond the schema's field-level descriptions, justifying a 4. It doesn't fully redefine each parameter's syntax, but the added nuance is meaningful.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships 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: 'Collect console logs, exceptions, and log entries from a Safari page on an iOS device over a time window.' It clearly distinguishes itself from sibling tools like ios_safari_capture_network and session_console_logs by specifying platform (iOS Safari), resource (console), and the time-window 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 gives explicit usage guidance: it warns that triggering logging from a separate tool call races the attach, and offers a precise alternative: 'To capture logs from an action, pass triggerJs (run inside the window).' It also tells users when to omit pageId ('Omit pageId to auto-pick the active page') and provides default/max duration values. This is a clear when/when-not/alternative pattern.

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)
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 transparently explains the fallback behavior to document.cookie (non-httpOnly only) when the CDP call is unavailable, which is a significant behavioral trait. It also describes auto-picking behavior for pageId. It does not mention error cases or permissions, but for a simple getter, 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 concise, consisting of three sentences that each serve a purpose: stating the action and fields, describing the fallback, and giving parameter guidance. It is front-loaded with the core purpose and avoids any redundant or extraneous 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 simple cookie-getter tool with no annotations and no output schema, the description is remarkably complete. It specifies the mechanism, lists the returned cookie fields, explains the fallback behavior and its limitation, and provides auto-picking guidance for pageId. The schema covers the parameter details, so the description fills the remaining gaps 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 description coverage is 100%, with rich descriptions for udid, pageId, and platformVersion. The tool description adds overall context but does not provide additional parameter-specific semantics beyond what the schema already provides. The pageId behavior is more detailed in the schema than in the description, so the description adds marginal value 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?

The description clearly states the tool's function: getting cookies for a Safari page on an iOS device via the Web Inspector (Page.getCookies). It lists the specific cookie fields included and differentiates it from other cookie tools by the iOS Safari platform and CDP mechanism.

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, noting it is useful for debugging auth/session state and explaining the fallback to document.cookie. It gives explicit guidance on the pageId parameter (omit to auto-pick the active page). However, it does not explicitly mention when not to use this tool or name alternative tools for other platforms.

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, a unique-ish CSS selector, an XPath, bounding box {x,y,w,h} and a visibility flag. Set includeStyles=true to also return a curated set of computed styles per element. Far more compact and useful than raw outer HTML. 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)
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 default behavior (interactive/meaningful elements), the effect of selector and includeStyles, the exact return fields (tag, text, attributes, selectors, bounding box, visibility), and pageId defaulting behavior. It does not mention potential side effects or error handling, but for a read/extraction tool the transparency 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.

Conciseness4/5

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

The description is dense but well-organized, front-loading the purpose and then compactly listing return fields and key options. Every sentence contributes meaningful information; the length is justified by the tool's richness of 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?

Given the tool's moderate complexity (6 params, no output schema), the description adequately covers the return value structure, default element filtering, selector/disambiguation, styles option, and pageId behavior. It lacks edge-case handling (e.g., empty results) but is otherwise complete for an extraction 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 description coverage is 100%, so baseline is 3. The description adds semantic value beyond the schema by explaining the default element selection, the meaning of includeStyles, and the pageId fallback logic ('Omit pageId to auto-pick the active Safari page'), which goes beyond the raw schema 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 uses a specific verb ('Extract') and resource ('Safari page') with a clear goal ('for building Playwright/Selenium locators'). It distinguishes itself from raw HTML/DOM tools by explicitly stating it is 'Far more compact and useful than raw outer HTML', which differentiates it from siblings like ios_safari_get_dom.

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 when to use the tool (when building locators) and contrasts it with raw outer HTML, implying preference over that alternative. It also provides guidance on pageId usage (omit for default page, pass to target a different tab). However, it does not explicitly name alternative sibling tools or state when not to use it, so it lacks explicit exclusions.

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). 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
expressionYesJavaScript expression to evaluate
platformVersionNoIgnored (kept for compatibility)
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 adds meaningful context by stating that it uses Runtime.evaluate internally, returns results as a string (JSON-stringified for objects), and detailing pageId auto-selection behavior. It does not mention potential side effects of executing arbitrary JavaScript, but the disclosed information is valuable and goes beyond 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.

Conciseness5/5

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

The description is four crisp sentences, each serving a distinct purpose: stating the core function, explaining the internal mechanism, specifying the return format, and clarifying pageId behavior. There is no redundancy or filler, 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 simple evaluation tool, the description is nearly complete: it covers purpose, mechanism, return serialization, and pageId fallback behavior. The schema handles parameter specifics. It lacks guidance on error handling or limitations, but given the tool's simplicity and the richness of the schema, the context 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 already has 100% coverage with rich descriptions for all four parameters, including a thorough explanation of pageId behavior. The tool description adds no additional parameter 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 clearly states the tool's purpose: evaluating a JavaScript expression in the context of a Safari page on an iOS device via Web Inspector. It uses a specific verb (evaluate) and resource (Safari page on iOS), and distinguishes itself from siblings like ios_safari_elements or android_devtools_evaluate by naming the platform and context.

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 useful usage context, particularly around the pageId parameter: omitting it auto-picks the active Safari page, and it should only be passed to target a different tab. This gives clear guidance on when and how to use the tool, though it does not explicitly name alternative tools for other contexts (e.g., web_evaluate).

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)
Behavior4/5

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

With no annotations, the description carries full burden. It discloses the exact JavaScript executed (document.documentElement.outerHTML or querySelector), the 100,000-character cap with truncation notice, and pageId auto-pick fallback. It does not explicitly state that it is read-only/side-effect-free, but 'Get' and the implementation imply a safe 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?

Three well-structured sentences: purpose, implementation/selector, output cap and pageId fallback. No filler, front-loaded with the primary action, and every sentence adds relevant 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?

Despite no output schema, the description conveys what is returned (outerHTML), the optional selector behavior, truncation, and pageId fallback. It lacks explicit error handling or authentication requirements, but for a simple read-only DOM retrieval tool, 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?

Schema covers all 4 parameters with highly detailed descriptions, including pageId targeting and selector null behavior, so the description adds limited value beyond the schema. It does repeat/expand slightly on pageId auto-pick and selector behavior, but the schema already does the heavy lifting, warranting the baseline 3 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 uses a specific verb ('Get') and clearly identifies the resource: outer HTML of a Safari page, optionally for a CSS-selector-matched element, on an iOS device via the Web Inspector. It distinguishes from siblings like ios_safari_evaluate by stating it returns outerHTML rather than evaluating arbitrary JavaScript.

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 for when to use it: fetching page/element HTML. It also gives usage guidance for the pageId parameter ('Omit pageId to auto-pick'). However, it does not explicitly name alternatives or exclusions, relying on implicit differentiation from sibling tools.

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 pageId (the CDP target id), url, title, and type for each active page. Pass pageId to other ios_safari_* tools to target a specific tab. Requires Web Inspector enabled: Settings → Safari → Advanced → Web Inspector.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID
platformVersionNoIgnored (kept for compatibility)
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 behavioral disclosure burden. It does disclose the return format (pageId, url, title, type) and mechanism (CDP bridge), and importantly discloses the configuration prerequisite (Web Inspector must be enabled). This is a read-only listing operation and the description conveys that implicitly through the return structure without being explicit about non-mutating 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 compact two-sentence structure with an additional prerequisite note. The first sentence establishes the core purpose, the second explains the output and downstream use, and the third covers the setup requirement. All sentences earn their place; minimal waste, though slightly dense.

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 listing tool with full schema coverage and no output schema, and the description adequately explains the output fields and how to use the results downstream. For a relatively straightforward list operation, the description covers the essential context: what it returns, how to use it, and what precondition is required. It doesn't describe pagination or limits, but for this tool's simplicity that's not a significant 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%, with both parameters (udid and platformVersion) documented in the schema. The udid parameter is explained as 'iOS device UDID' and platformVersion as 'Ignored (kept for compatibility)'. The description adds little parameter context beyond this since the schema already covers both fields completely. 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 ('List') with a clear resource ('inspectable Safari pages on an iOS device') and states the exact return fields (pageId, url, title, type). It clearly distinguishes from siblings like android_devtools_list_pages and ios_page_source by specifying the mechanism (Web Inspector CDP bridge) and target (Safari tabs).

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 that pageId should be passed to other ios_safari_* tools to target a specific tab, which provides a clear usage flow. It also includes a prerequisite (Web Inspector must be enabled) with setup instructions. However, it doesn't explicitly state when NOT to use this tool versus alternatives like ios_get_browser_url or session_list, leaving some ambiguity.

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_mitm_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"}
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")
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 thoroughly explains both modes ('mock' and 'abort'), the fact that routes apply immediately and survive navigation, and the scope limitations ('WEB CONTENT ONLY', 'Nothing device-wide is changed and no certificate is installed'). This goes well beyond a simple statement of function and gives the agent a clear safety and behavior 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 concise yet information-dense, with no filler. Every sentence contributes unique value: purpose, modes, navigation survival, scope restriction, and an explicit alternative. It is well-structured and front-loaded, making it easy for an agent to quickly grasp the tool's core function and constraints.

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 (13 parameters, two modes, and a critical scope distinction), the description is remarkably complete. It covers what the tool does, when to use it, what it does not do, and which sibling tool to use instead. It also explains the immediate effect and navigation persistence. No important behavioral aspect is left unaddressed, and there is no output schema to explain, so the description fully covers the needed 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 input schema covers 100% of parameters with descriptions, so the baseline is 3. The description adds meaningful semantic context beyond the schema by explaining the 'id' parameter's update-in-place behavior and elaborating on the 'mode' parameter's practical effect (serves status/headers/body vs. fails the request). This enhances understanding of how parameters work together, 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's function: 'Add (or update in place...) a mock/abort rule for Safari/WKWebView requests on this device.' It uses a specific verb ('Add') and resource ('Safari/WKWebView requests'), and distinguishes itself from the sibling tool ios_mitm_mock_add by explicitly limiting scope to web content. This makes the purpose unmistakable 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 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 states that the tool intercepts only browser/WebView requests, that native app code is not intercepted, and it directly names the alternative: 'For requests made by native app code use ios_mitm_mock_add instead.' It also clarifies that the effect is scoped to the page and not device-wide, helping the agent decide when to use this over other mock tools.

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)
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 removes ALL routes (not just one) and un-arms interception, with the consequence of restoring normal networking. This is meaningful behavioral information beyond the tool name, though it omits details like whether it's idempotent or what happens if no routes 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 sentences, front-loaded with the primary action and scope, followed by the usage guidance. Every word earns its place; no filler or repetition of schema 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 simple 1-parameter cleanup tool with no output schema, the description sufficiently covers what it does, when to use it, and the effect on the device. No additional context seems 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%: the only parameter 'udid' is already described in the input schema as 'Device id (Android serial or iOS UDID)'. The description adds no additional meaning to the parameter, so the baseline 3 applies, as the schema already fully documents 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 ('Remove ALL Safari/WKWebView routes') and the specific resource ('for this device'), plus the additional effect 'un-arm interception'. This distinguishes it from sibling tools like ios_safari_mock_remove, which removes specific routes, and ios_safari_mock_add/list/status.

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 context: 'Call this when finished — it restores completely normal networking for the browser on that device.' This tells the agent when to use it (after mocking is done) and implies it's the cleanup counterpart to interception setup. Does not explicitly name alternatives, but the 'ALL' wording implies a distinction from per-route removal tools.

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)
Behavior5/5

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

With no annotations, the description fully carries the transparency burden. It discloses that the tool is read-only (lists routes), only affects web content, changes nothing device-wide, installs no certificate, and is scoped to the page. This is thorough and sets accurate expectations about 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 moderately sized and front-loaded with the main purpose. Every sentence adds value: the first states what it does, the second clarifies scope, the third excludes native, and the fourth reassures about system impact. It is efficient and 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 simple list tool with one parameter and no output schema, the description provides complete context: what is listed, the ordering, the scope, and safety assurances. It leaves no significant gaps for the agent to guess about.

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 fully describes the sole parameter (udid) with a clear description, so the baseline is 3. The tool description adds no additional meaning about this parameter or how to use it, which is acceptable given 100% 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 begins with a specific verb-resource pair: "List the Safari/WKWebView mock/abort routes currently registered for this device," and adds detail like match order. It distinguishes from siblings by explicitly scoping to Safari/WKWebView and excluding native app code.

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 on when to use this tool: it applies to web content only, not native app code. It states that native requests are 'NOT intercepted and never will be,' giving an explicit exclusion. However, it does not name alternative tools (e.g., ios_safari_mock_status or ios_mitm_mock_list) for comparison.

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)
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 does disclose a key side effect: the device auto-un-arms when the last route is removed, preventing unnecessary traffic pausing. However, it omits other behavioral details such as error handling, reversibility, or the impact on existing routes, which are relevant 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, front-loading the primary action and adding one relevant behavioral note. No filler, repetition, or unnecessary detail 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?

Given the simple removal operation, the complete parameter schema, and the absence of an output schema, the description covers the essential purpose and a notable side effect. It lacks explicit error handling or return value details, but these are less critical for a straightforward removal 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 provides complete descriptions for both 'id' and 'udid', so the description adds no new parameter-level detail. The phrase 'by id' simply reiterates the schema, and the auto-unarm behavior relates to tool state rather than 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?

The description clearly states the action 'Remove one Safari/WKWebView route by id', specifying both the resource type and the identifier. This distinguishes it from sibling mock_remove tools that target Android (android_devtools_mock_remove, android_mitm_mock_remove) or webpages (webpage_mock_remove).

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 by specifying Safari/WKWebView and mentions the automatic un-arming when the last route is removed, which informs when to expect side effects. However, it does not explicitly contrast with alternative tools like ios_mitm_mock_remove, leaving a slight gap in 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_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)
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 clearly explains what the tool returns: armed state, page target, active routes, and hit counters (paused/mocked/aborted/passedThrough/errors). It also provides an interpretation hint about mocked: 0, adding transparency about what a zero count means. While it doesn't explicitly state read-only behavior, the report-oriented wording 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 two sentences with no wasted words. The first sentence structurally lists all the report fields, and the second offers a practical usage tip. It is concise, well-organized, 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?

The tool has one parameter and no output schema, so the description must explain the return values. It does this thoroughly by enumerating the status attributes and counter names, making it complete for an agent to know what to expect. The usage tip also adds helpful context for verifying mock behavior, making the description fully sufficient for this simple status 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 fully documents the only parameter (udid) with a description: 'Device id (Android serial or iOS UDID)'. The tool description adds no new parameter-specific information, but since schema coverage is 100%, a baseline of 3 is appropriate. The description implies the tool operates per-device, which is already 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 the tool's purpose: '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'. The specific verb 'Report' and resource 'Safari/WKWebView interception' distinguish it from sibling mock tools like ios_safari_mock_add or ios_safari_mock_remove.

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 usage context: 'Check the counters to confirm a mock is actually firing — a route that never matches shows mocked: 0.' This tells the agent when to use the tool (to verify mock activity) and how to interpret results. It doesn't explicitly mention alternatives, but the context is clear enough without exclusions.

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)
Behavior5/5

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

With no annotations provided, the description fully discloses behavioral traits: it verifies the resulting URL, never silently no-ops, returns a structured result, and changes the device's current page. It also explains prerequisites (Remote Automation) and the side effect of setting the 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.

Conciseness4/5

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

The description is longer than average but every sentence adds necessary context. It is front-loaded with the core action, then proceeds logically through behavior, return value, side effects, and usage preference. It could be trimmed slightly, but the density is justified by the tool's complexity.

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

Completeness5/5

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

Despite lacking an output schema and annotations, the description fully covers return value structure, verification behavior, prerequisite settings, side effects on current page, and subsequent tool usage. It is complete for an agent 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?

The schema already documents all parameters (100% coverage), so baseline is 3. The description adds valuable context beyond the schema, particularly for pageId: it explains omission semantics (use last landed page) and when to pass it (target a different tab), plus notes platformVersion is ignored.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships 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 navigates Safari to a URL on an iOS device, with explicit verbs ('Navigate') and a specific resource ('Safari'). It also distinguishes itself from the sibling tool ios_navigate_url by explicitly recommending this tool for Safari.

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 on when to use this tool (for Safari) versus the alternative (ios_navigate_url). It also clarifies two distinct scenarios—active tab navigation vs. cold-open—and the prerequisite setting for Remote Automation, giving clear context for invocation.

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 WDA 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).

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID
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 of behavioral disclosure. It does disclose the 'slow' performance characteristic, the auto-wake-and-retry behavior for asleep devices, and the auto-start session requirement. These are genuinely useful behavioral traits. However, it doesn't describe what happens on failure modes beyond the single retry, or any resolution/quality characteristics beyond 'crisp' and 'full-fidelity', but this is reasonably complete for a 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?

Three sentences that are dense but zero-waste, covering purpose, behavioral traits, device-wake behavior, and session requirements. The guidance about preferring the mjpeg sibling is front-loaded early. Every sentence earns its place and the critical decision heuristic is stated in the first 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?

For a single-parameter tool with a well-documented schema and rich behavioral description, this is quite complete. It covers the fidelity/speed tradeoff, alternative tool, wake behavior, and session prerequisite. The only minor gap is no explicit statement about what a typical latency looks like or failure handling, but given the output is a straightforward base64 image and there's no output schema, this 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?

Schema coverage is 100% with a single udid parameter that is fully described ('iOS device UDID'). The description doesn't add parameter-level detail beyond the schema, but with only one well-documented parameter, the baseline 3 is appropriate since the schema fully handles the heavy lifting. There is no additional semantic nuance needed for 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?

The description clearly states the tool takes a high-fidelity screenshot of an iOS device, explicitly naming it a slow WDA path and specifying the return type (base64 PNG). It distinguishes itself beautifully from the sibling tool ios_mjpeg_screenshot by explicitly contrasting fidelity vs speed, which is critical given the sibling set contains multiple screenshot tools (device_screenshot, ios_fast_screenshot, web_screenshot, android_mjpeg_screenshot).

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 given: prefer ios_mjpeg_screenshot for routine per-action screen checks, and reserve ios_screenshot for when a crisp full-fidelity frame is needed. This names the alternative tool and defines clear conditions for choice. It also discloses the auto-wake behavior and session requirements, giving the agent an accurate expectation of side effects.

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)
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 mentions session auto-starting and that it returns coordinates, which is useful. However, it doesn't disclose behaviors like scroll speed, maximum scroll attempts, whether it can fail if element isn't found, or any timeout 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 sentences, zero wasted words. Each sentence earns its place: what it does, why it's valuable, and session requirements. Well front-loaded with the core action in the first 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 tool has no output schema and no annotations, but is a relatively simple scroll-to-element operation. The description covers the main action, return value (coordinates), and session handling. Missing details like default scroll behavior, failure conditions, or whether it scrolls in a scrollable container, but adequate 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 description coverage is 100% for all three parameters (udid, label, direction), so the baseline is 3. The description adds the label is an 'accessibility label or text' which maps to the schema, but adds no extra semantic detail beyond what's already documented 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 tool scrolls the screen until a UI element with a given label becomes visible and returns its coordinates. It uses a specific verb+resource structure and differentiates itself from sibling tools like device_scroll and device_scroll_to_element by being iOS-specific and auto-starting 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?

The description explains it eliminates multi-swipe guesswork, giving clear context for when to use it (off-screen content). It doesn't explicitly name alternative tools or exclusions, though its iOS prefix and auto-session behavior imply when it's appropriate. Missing explicit 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_send_keysAInspect

Type text on an iOS device. The keyboard must be visible (tap a text field first). Use \n in text to press the Return/Go key (e.g. "user@example.com\n" to submit). Requires an active iOS automation session.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesText to type. Use \n to press Return/Go key.
udidYesiOS device UDID
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 disclosure burden. It discloses the prerequisite (visible keyboard), the return-key behavior via \n, and the session requirement. However, it does not describe what happens if the keyboard is not visible (error vs no-op), whether text is typed character-by-character with delays, or any race conditions that might affect reliability.

Agents need to know what a tool does to the world before 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 conveying everything essential: what it does, the critical prerequisite, the escape sequence with an example, and the session requirement. Zero filler, all information 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 2-parameter tool with 100% schema coverage and meaningful usage context in the description, this is well-covered. The one gap is the absence of error/failure behavior when the keyboard isn't visible, and no output/return description, but for a simple text input tool these are minor given no output schema is 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 coverage is 100%, so both parameters (text, udid) are already documented. The description adds meaningful value beyond the schema by explaining the \n escape for the Return/Go key with a concrete example, clarifying the exact behavior expected. This adds depth that the bare schema description ('Text to type') lacks.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships 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 (Type text) and the resource (iOS device), distinguishing it from peers. It also specifies the return key behavior and the prerequisite that the keyboard must be visible, which differentiates it from generic 'type' 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 'when to use' context (keyboard must be visible, tap a text field first) and requires an active iOS automation session. However, it does not explicitly name alternative tools to use instead (e.g., device_tap, ios_key_hid, or session_send_keys for web contexts), though the iOS-specific prefix and text-input focus provide implicit differentiation.

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. 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"
Behavior4/5

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

The description discloses the persistent nature, the fact it affects every app, and the SpringBoard relaunch with expected 5-10s flicker. No annotations are provided, so the description carries the full burden and does well covering the side effect that an agent would not otherwise anticipate.

Agents need to know what a tool does to the world before 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 meaningful: first establishes what the tool does with critical caveats (persistent, affects every app, SpringBoard flicker), second provides the alternative. Zero waste, front-loaded 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 3-param tool with 100% schema coverage and no output schema, the description adequately covers purpose, side effects, and alternatives. It could optionally mention confirmation/undo mechanisms but the current coverage is strong for a device-setting tool.

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

Parameters3/5

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

Schema coverage is 100%, with each parameter (udid, locale, language) having descriptions in the schema including format examples. The description doesn't add syntax detail beyond schema, which is acceptable at this coverage level. 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 changes the iOS device's system language and/or locale, and explicitly notes it is persistent and affects every app. It distinguishes itself from the sibling tool ios_launch_app_in_language, which is the per-app alternative.

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 (ios_launch_app_in_language) for per-app testing without changing the whole device, and advises to prefer it in that scenario. This gives clear when-to-use vs 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_set_locationAInspect

Set the iOS device's GPS location for testing location-aware apps. Works on physical devices (iOS 16.4+) via the bundled iOS automation agent's simulated-location route. Coordinates persist until the device reboots or ios_clear_location is called. PREREQ: On the device, grant the iOS automation agent app Location Services permission (Settings → Privacy & Security → Location Services → automation runner → While Using App). Without this, the simulated value is cached server-side but apps on the device still see zero coordinates. 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
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 handles it thoroughly. It discloses the PREREQ about Location Services permission with exact navigation steps, the side-effect of silent failure (coordinates cached server-side but apps see zero), and the exact scope of what is and isn't affected. This goes well beyond what a typical setter does.

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 somewhat long but every sentence earns its place: the mechanism, persistence, prerequisite, and scope all add critical operational information that cannot be inferred from the schema or annotations. The PREREQ and SCOPE sections are clearly labeled and front-loaded with the core purpose. Slightly dense but structured well for agent consumption.

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 (physical device dependency, permission prerequisite, partial effect scope, server-side caching behavior), the description is remarkably complete. It has no output schema and no annotations, so the description fully compensates, covering device requirements, setup prerequisite, persistence semantics, and limitations. This is a well-rounded description for a tool with these operational foot-guns.

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 all three parameters are already documented with descriptions (udid, latitude, longitude with examples like 37.7749 and -122.4194). The description does not add parameter-specific detail beyond the schema, but the baseline 3 is appropriate since the schema fully covers 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 description states exactly what the tool does: sets the iOS device's GPS location for testing location-aware apps, specifying it works on physical devices (iOS 16.4+) via the bundled iOS automation agent's simulated-location route. It clearly distinguishes this from ios_get_location, ios_clear_location, and device_set_location sibling tools by specifying the iOS-specific mechanism and the 'set' verb + resource (GPS location).

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 physical-device prerequisite (iOS 16.4+), the iOS automation agent route, persistence behavior (until reboot or ios_clear_location), and the Scope section clearly delineating what it does and does not affect (CoreLocation vs IP-based/Wi-Fi/cell-tower/anti-fraud paths). It names the sibling tool ios_clear_location as the inverse operation.

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
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 discloses the session requirement but doesn't mention whether this works on device vs simulator, whether the content replaces existing clipboard, interaction with privacy prompts, or what happens on failure. For a mutation tool with zero annotation coverage, this is thin.

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?

Two sentences, front-loaded purpose, no waste. The session requirement is a useful inclusion. It's appropriately concise 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 2-parameter setter with full schema coverage, the description is mostly adequate. However, the presence of closely related siblings (ios_clipboard_set_hid, device_clipboard_set) that appear to do the same thing is a gap—the description should clarify the distinction. Also lacks return/output info, though no output schema is defined.

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 (udid, content) are well-described in the schema. The description adds the session prerequisite but doesn't add format/size limits or encoding details for the content parameter beyond what's in the schema. 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 the tool sets clipboard content on an iOS device with a specific verb+resource. It doesn't explicitly differentiate from sibling tools like ios_clipboard_set_hid or device_clipboard_set, but it is clear about its core 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 notes 'Requires an active iOS automation session,' which gives contextual prerequisite context. However, it doesn't mention when to prefer this over the sibling tools ios_clipboard_set_hid (HID-based) or device_clipboard_set, which are likely overlapping alternatives.

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.
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. While it correctly identifies the tool as both a getter and mutator, it doesn't disclose what settings are available, what the response format is, whether updates are reversible, or potential side effects of updating settings. The 'Requires an active iOS automation session' is useful but minimal for a dual-mode 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 compact—three sentences covering purpose, mode selection, and prerequisite. It's front-loaded with the core purpose in sentence one. No wasted words, though it could arguably mention the response shape. Efficient and well-structured.

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

Completeness3/5

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

The tool has a nested settings object, no output schema, and no annotations. The description explains the dual get/update behavior and prerequisite, but given the absence of annotations and output schema, it doesn't fully compensate: it doesn't describe what fields of settings are changeable, what the get response looks like, or any failure/error behavior. Adequate but leaves 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?

Schema description coverage is 100%, so the schema already documents both parameters well. The settings parameter includes an example ({"mjpegServerScreenshotQuality": 25}), which adds concrete usage meaning. With full schema coverage, baseline 3 is appropriate; the example in the schema itself carries the semantic weight.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships 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 dual purpose: 'Get or update iOS automation settings on an iOS device' with a specific verb (get/update) and resource (iOS automation settings). It distinguishes the get-vs-update behavior by invocation mode, and the 'Requires an active iOS automation session' prerequisite further scopes it. Clearly distinguishes from the many sibling ios_* tools by focusing on settings management.

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 guidance: 'Call without settings to get current values. Pass settings object to update.' This tells the agent exactly how to use the get vs update modes. It also notes the prerequisite of an active iOS automation session. It doesn't explicitly name alternative tools when not to use it, but the practical guidance is strong.

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")
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 'low-level' and 'no automation session required' but doesn't disclose potential risks (this is a low-level command that could mutate device state), authorization requirements, expected output format, or whether certain subcommands are destructive. For an unannotated low-level shell tool, 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.

Conciseness4/5

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

Two sentences plus an example — efficient and front-loaded with the core purpose. The example is valuable and placed at the end. No wasted words, though the example could arguably be more comprehensive.

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?

This is a low-level passthrough tool with no output schema and no enumerated subcommands, meaning the description and schema must compensate. The description lists example subcommands but doesn't enumerate what each produces, note any failure modes, or explain the args format beyond the example. For a tool that exposes arbitrary device-management subcommands, this is under-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?

Schema description coverage is 100% (all three parameters documented in the schema). The description adds a concrete example showing how subcommand and args combine ('subcommand="syslog", args=["--parse"]') and hints at available subcommand values via the schema ('info', 'syslog', 'diskspace', 'ip', 'devicename'). The example adds modest value beyond the schema, earning baseline 3.

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 'Run a low-level iOS device-management command' with a specific verb and resource (iOS low-level command execution). It provides a concrete example (syslog --parse) that demonstrates real usage. However, it doesn't explicitly distinguish itself from the closely-related sibling tools like device_shell or other iOS shell variants, and the generic 'low-level' phrasing could apply to several 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 description states 'No automation session required,' which is a useful context signal that differentiates this from session-based tools. However, it doesn't clearly state when to use this tool vs alternatives like device_shell, ios_diagnostics, or other device-management tools. There's no exclusion guidance or mention of alternative tools for similar tasks.

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
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 behavioral burden. It discloses the launch latency ('Takes ~10-30s to launch'), which is genuinely useful timing context an agent needs to avoid premature timeouts. It implies session-state establishment but doesn't detail what's held in the session, auth, 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, zero wasted words. The first sentence states purpose, the second covers both timing prerequisite and expected latency. 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 tool has a single well-documented parameter and no output schema. Given its low complexity, the description covers the essential intent, the mandatory-before ordering, and the latency expectation. It could mention what a successful session returns or that ios_end_session is the counterpart, but for a simple session-init tool this 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 coverage is 100% with a single udid parameter already described as 'iOS device UDID.' The description adds no additional parameter-level meaning beyond what the schema provides. Baseline 3 is appropriate given full 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+resource: 'Start a iOS automation session on an iOS device.' It explicitly notes this 'Must be called before any iOS control commands,' which effectively distinguishes its purpose from the many sibling ios_* control tools. It lacks comparison to a specific sibling like ios_end_session, but the 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?

The description gives clear directive context: 'Must be called before any iOS control commands.' This tells the agent when to use it (before other iOS operations), though it doesn't explicitly mention when not to use it or name the counterpart ios_end_session. The temporal prerequisite guidance is solid and useful.

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

ios_swipeBInspect

Swipe from (x1,y1) to (x2,y2) on an iOS device screen. Coordinates are in physical screen points. Requires an active iOS automation session.

ParametersJSON Schema
NameRequiredDescriptionDefault
x1YesStart X coordinate
x2YesEnd X coordinate
y1YesStart Y coordinate
y2YesEnd Y coordinate
udidYesiOS device UDID
durationNoSwipe duration in ms (default: 500)
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. 'Requires an active iOS automation session' reveals a prerequisite, and point-based coordinate usage is noted. However, it doesn't disclose side effects (e.g., whether it triggers navigation, momentum scrolling, or interaction with on-screen elements), possible failures (out-of-bounds coordinates), or default behavior with the duration parameter.

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 tight sentence that conveys purpose and coordinate semantics efficiently. It's appropriately brief with no filler. Slightly more behavioral detail could have been added without being verbose, but as written it's compact and to the point.

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 gesture tool with no annotations, no output schema, and six parameters, the description provides a minimal but functional picture. It covers the core action, coordinate units, and session prerequisite. However, it omits important context such as interplay with velocity/duration, whether swipes trigger accessibility events, and how it differs from ios_drag_drop or ios_scroll offerings. Adequate but leaves room for richer behavioral expectations.

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 6 parameters are documented in the schema. The description adds context about coordinate semantics (physical screen points) which helps interpret x1/y1/x2/y2 beyond mere 'Start/End coordinates.' However, it doesn't elaborate on the duration parameter's behavior or edge cases (e.g., relationship between speed and duration). Baseline 3 is appropriate since schema handles parameter documentation.

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 (swipe) with clear from/to coordinates on an iOS device screen, and clarifies coordinates are in physical screen points. It distinguishes reasonably from siblings like device_swipe (non-iOS specific) and ios_swipe_hid (HID variant), though it doesn't explicitly call out those distinctions.

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 notes 'Requires an active iOS automation session,' which implies session prerequisites, and mentions physical screen points vs coordinates. However, it doesn't differentiate from ios_swipe_hid, ios_tap, ios_drag_drop, or similar gesture tools, nor explain when to prefer swipe over scroll or drag. Context is implied but no alternatives are named.

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

ios_swipe_hidAInspect

Swipe from (x1,y1) to (x2,y2) via the CoreDevice HID path (WDA-free). Coordinates are iOS screen points. Single-contact only. Returns "no HID available" on iOS 17.x / no-tunnel.

ParametersJSON Schema
NameRequiredDescriptionDefault
x1YesStart X (screen points, or 0..1 fraction if norm=true)
x2YesEnd X (screen points, or 0..1 fraction if norm=true)
y1YesStart Y (screen points, or 0..1 fraction if norm=true)
y2YesEnd Y (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
durationMsNoSwipe duration in ms (default: 300)
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 key behaviors: uses CoreDevice HID path, WDA-free, single-contact only, iOS screen points, and returns 'no HID available' on iOS 17.x/no-tunnel. This effectively communicates operational constraints and failure modes. It could add more about side effects or coordination needs with ios_start_session, but the disclosed behaviors 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?

Two sentences, zero waste. Every clause carries information: the operation, the mechanism, the coordinate system, the contact limitation, and the failure mode. Front-loaded with the essential purpose and ends with the critical constraint. 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 single-contact swipe tool with no output schema, the description covers the essential points: purpose, mechanism, coordinate semantics, and a documented failure mode. The key gap is that it doesn't explain how this relates to sibling HID tools (e.g., whether a session must be started first, or how it coordinates with ios_release_hid). Given the complexity and the sibling context, slightly more operational guidance would push this to 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?

Schema description coverage is 100%, so all 7 parameters are documented in the schema. The schema itself is rich (explains point vs fraction modes, default duration). The description adds 'iOS screen points' context for coordinates but doesn't elaborate much beyond what the schema already says. Baseline 3 is appropriate since the schema does the heavy lifting and the description adds only mild extra 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?

Very specific verb+resource+method: 'Swipe from (x1,y1) to (x2,y2) via the CoreDevice HID path (WDA-free)'. Clearly states the exact operation, the mechanism (HID path), and distinguishes itself from the sibling ios_swipe (which presumably uses WDA). The 'single-contact only' and iOS-version limitation add strong scope clarity.

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 conveys clear context for when to use it: when you need a WDA-free swipe via HID tunnel. It distinguishes from ios_swipe by explicitly noting the HID vs WDA path. However, it doesn't explicitly name the alternative tool or state 'use ios_swipe instead if...'. The 'no HID available on iOS 17.x / no-tunnel' note communicates a key constraint/fallback condition but stops short of naming the recommended alternative.

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 WebDriverAgent, 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. 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)
udidYesiOS device UDID
durationNoTap hold duration in ms (default: 100)
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 coordinates are in physical screen points, that it requires an active iOS automation session, and that it works even on zero-area elements (implicitly). It adds a 'cannot rely on' constraint (eye-balled screenshots). No return format is discussed, but no annotations or output schema exist to contradict anything.

Agents need to know what a tool does to the world before 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, zero filler. Every sentence earns its place: purpose, fallback relationship, precise alternative, coordinate sourcing constraint, and session requirement. Front-loaded with the primary action benefit.

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 coordinate-tap tool with 100% schema coverage and no output schema or nested objects, this description is complete. It addresses the key selection decision (fallback vs. by_label), the coordinate sourcing pitfall (physical points vs. eyeballed screenshots), and the session prerequisite. No significant gaps identified.

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 4 parameters including their types. The description adds context about what x/y mean ('physical screen points' and sourcing from ios_page_source element center), reinforcing but not exceeding schema meaning. The duration parameter meaning comes from schema. This meets the baseline-3 standard.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships 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 ('Tap at (x,y) on an iOS device screen') and clearly scopes it as a FALLBACK. It explicitly contrasts with ios_tap_by_label, distinguishing it from the primary sibling tool. The semantics are 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 Guidelines5/5

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

Provides explicit when-to-use guidance: it's the fallback when an element has no usable label. It names the preferred alternative (ios_tap_by_label) and specifies the condition for preferring it (target has a name in ios_page_source). Also instructs on coordinate sourcing (from ios_page_source, not screenshots).

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 WebDriverAgent. 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
autoScrollNoScroll the element into view if off-screen before tapping (default: true)
Behavior5/5

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

No annotations are provided, so the description carries full burden — and it delivers. Discloses auto-scroll behavior (and its autoScroll:false toggle), no-match behavior (returns similar labels incl. off-screen), and session requirement (auto-starts if needed). Rich behavioral context for an interaction tool.

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

Conciseness4/5

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

One dense paragraph with strong front-loading ('PREFERRED way to tap on iOS'). Every sentence earns its place, though it's slightly long and could benefit from tighter segmentation. The fallback and off-screen behavior could arguably be split, but content 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 3-param tool with no output schema, the description is thorough: covers purpose, mechanism, alternatives, edge cases (zero-area, off-screen), failure behavior (similar labels returned), and session prerequisites. Nothing critical is left unexplained for an agent to select and 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 covers 100% of 3 parameters with descriptions. The description adds value by explaining the autoScroll default (true) and its effect on off-screen elements, complementing rather than duplicating the schema. Slightly above baseline since it clarifies the scroll semantics tied to the boolean 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?

States a specific verb+resource (tap on iOS by accessibility label via WebDriverAgent) with a distinctive mechanism — finds by accessibility label rather than coordinates. Explicitly contrasts with ios_tap(x,y) and names the fallback path, clearly distinguishing it from siblings like ios_tap, ios_tap_hid, and 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 Guidelines5/5

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

Explicitly declares itself the PREFERRED tap method, states when to use it (works on zero-area elements where ios_tap would miss), and gives concrete fallback guidance ('Use this before falling back to ios_tap with raw coordinates'). Also covers retry behavior on no match.

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

ios_tap_hidAInspect

Tap at (x,y) via the CoreDevice HID path (WDA-free). Coordinates are iOS screen points (same frame as ios_page_source). Single-contact only. Prefer ios_tap for normal automation; use this to force HID or when WDA is unavailable. 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
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 disclosure burden. It discloses the return/behavioral caveat ('Returns "no HID available" on iOS 17.x / no-tunnel') and states single-contact limitation, plus the coordinate frame dependence on ios_page_source. It doesn't detail error handling beyond the one known failure path, but the covered behaviors are high-signal for an agent deciding whether to invoke this 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, each earning its place: purpose+coordinate frame, WDA alternative guidance, and the failure caveat. No filler, no repetition of schema field names, and the most decision-relevant info (use ios_tap instead, unless HID-forced/no-WDA) is front-loaded in the second sentence. Highly economical and well-ordered.

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 4 params with 100% schema coverage, no output schema, and no annotations, the description covers the essential operational nuance: when to choose this over the sibling tool, the coordinate frame, single-contact limitation, and the known iOS 17.x failure return. The remaining gaps are minor (no explicit mention of what a successful tap returns), but with no output schema and a straightforward read-action, this is reasonably 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 parameters are well-documented in the schema. The description adds value by specifying the coordinate frame ('same frame as ios_page_source') and explaining the norm=true fraction semantics. It doesn't repeat parameter-names trivia but reinforces the practical meaning of x/y coordinates relative to the page source, which complements 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 ('Tap at (x,y)'), the transport mechanism ('CoreDevice HID path (WDA-free)'), and distinguishes it from the sibling ios_tap tool ('Prefer ios_tap for normal automation; use this to force HID or when WDA is unavailable'). It also clarifies the coordinate frame ('same frame as ios_page_source') and single-contact behavior, 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?

Explicit guidance is provided: 'Prefer ios_tap for normal automation; use this to force HID or when WDA is unavailable.' This directly names the alternative tool (ios_tap) and specifies the exact conditions under which this tool should be used instead, which is model-guidance at its best.

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

ios_terminate_appBInspect

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)
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 implies termination/destruction is a mutating operation and notes the session requirement. However, it doesn't state what happens to the running state, whether unsaved data is lost, or what the return/confirmation looks like. It does add the session prerequisite 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 description is a compact two-sentence structure with front-loaded purpose ('Terminate an app on an iOS device'), then fills in the key default behavior and prerequisite. No wasted words or redundancy.

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

Completeness3/5

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

For a simple 2-parameter tool with no output schema and no annotations, the description covers the essential ground: purpose, default behavior, and session prerequisite. However, it doesn't address error cases (e.g., app not running), the effect of terminating, or how it differs from ios_kill_app, which given the sibling list appears to overlap heavily in 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 description coverage is 100%, with both udid and bundleId having clear descriptions in the schema. The description adds marginal value by explaining that bundleId defaults to the current foreground app, which is useful context beyond the schema's 'default: current foreground app' note. Baseline 3 is appropriate since the schema handles 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 states the verb ('Terminate') and resource ('app on an iOS device'). It distinguishes from general device_terminate_app by being iOS-specific and notes the default behavior of terminating the foreground app when no bundleId is provided. However, it doesn't explicitly differentiate from sibling tools like ios_kill_app, which likely serves an identical 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 states the requirement of an active iOS automation session and explains the default behavior when bundleId is omitted. However, it doesn't explicitly say when to use this tool vs. alternatives like ios_kill_app or when not to use it, nor does it compare it to device_terminate_app.

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

ios_uninstall_appBInspect

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
Behavior2/5

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

No annotations are provided, so the description carries full burden of behavioral disclosure. It states the tool uninstalls (a destructive action) and that no session is needed, but does not disclose side effects, whether app data is purged, whether a device reboot is needed, failure behavior when app isn't installed, or required setup like HID/session prerequisites. 'No automation session required' adds a bit of value but much behavioral context 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.

Conciseness5/5

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

One concise sentence that states the core purpose and the key operational caveat (no session required). Zero 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 two-parameter tool with full schema coverage, the basic requirements are met. But it's a destructive operation with no annotations and no output schema, so the description should disclose more about post-condition behavior (app data removal, failure cases) to be truly complete. It's adequate but not rich.

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 and bundleId) have descriptions. However, the descriptions are minimal ('iOS device UDID', 'App bundle ID to uninstall') and add little beyond the parameter names. The description text doesn't elaborate on bundle ID format or how to obtain the UDID. Baseline 3 is appropriate given full 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?

Clear verb+resource: 'Uninstall an app from an iOS device by bundle ID.' It identifies the action, platform (iOS), and identifier (bundle ID). It doesn't distinguish from siblings like ios_terminate_app or device_uninstall_app explicitly, but it's clearly about permanent removal of an installed app.

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

Usage Guidelines2/5

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

No guidance on when to use this vs ios_kill_app, ios_terminate_app, or app_delete. The one useful note is 'No automation session required,' which hints at an operational difference from other tools but no when/when-not guidance or alternatives are named.

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

ios_unlockBInspect

Unlock an iOS device screen. Requires an active iOS automation session.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidYesiOS device UDID
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 session prerequisite ('Requires an active iOS automation session'), which is useful. However, it doesn't describe what happens on a successful unlock, what side effects might occur (e.g., does it swipe away notifications?), whether the device must be awake first, or any error behaviors when the session is absent.

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?

Two concise sentences, zero wasted words. The prerequisite is front-loaded and the purpose is stated clearly in the first word. Appropriate minimalism for a single-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 single-parameter tool with 100% schema coverage and no output schema, the description is adequate. However, it doesn't disclose lock-state edge cases (e.g., what happens if the device is already unlocked), or note the relationship with ios_lock_status for verifying unlock succeeded. Slightly more context would help but the current state is serviceable.

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 'udid' parameter ('iOS device UDID'), so the schema fully documents the parameter. The description adds nothing beyond this — no format hints, no clarification about how to obtain the UDID. Baseline 3 is appropriate given full 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 states a clear verb+resource: 'Unlock an iOS device screen.' This accurately describes what the tool does. It could further distinguish from sibling tools like ios_lock_status (which checks lock state) or device_* unlock equivalents, but the purpose is clear enough.

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 it 'Requires an active iOS automation session,' which provides context for when it can be used. However, it doesn't explicitly mention when to use this vs alternatives, nor does it note how it relates to sibling tools like ios_lock_status or ios_start_session/ios_end_session which establish the session it references.

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
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. Despite that, it discloses key behavioral traits: the link is short-lived (~5 minutes), requires no login/session, is single-device, is meant for a human to open in a browser, and is LIVE (realtime vs one-frame). It doesn't mention rate limits, whether the stream persists after another tool call, or how to terminate the stream, leaving some gaps in a no-annotation 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, all substantive: purpose, output characteristics, and usage guidance. There is zero filler or redundancy. Every sentence earns its place, with the distinguishing sibling comparison embedded 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 tool with 100% schema coverage, full purpose clarity, and explicit usage guidance, the description is essentially complete. It clearly articulates what the agent gets back, how it's used (human opens in browser), its temporal scope (~5 min), and its access model (no login). It omits potential details like stream termination or concurrent stream limits, but these are not critical for a minimal-parameter, well-covered 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?

There is only one parameter (udid) which is fully documented in the schema (100% coverage), so baseline is 3. The description references the device context ('an iOS device') but doesn't add additional semantics beyond the schema's 'iOS device UDID'. The single, well-documented parameter means minimal description burden, so a slightly above-baseline score is reasonable for the clarity 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 clearly states specific verb+resource: 'Get a LIVE video-stream link for an iOS device.' It explicitly distinguishes from the sibling ios_screenshot tool ('unlike ios_screenshot, which is one frame') and states what the result is ('short-lived, single-device viewer URL'). This is a precise, differentiating 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?

The description explicitly states when to use it ('Use this to let a person supervise what the agent is doing on the device') and distinguishes it from the alternative ios_screenshot by noting the one-frame vs live contrast. The mention of 'open it directly; no login or session required for ~5 minutes' also sets clear expectations about how the link is consumed.

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.
Behavior5/5

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

No annotations are provided, so the description carries full burden. It discloses key limitations: reconstruction not transcript, iOS 27+ requirement, no accessibility hint, English default role words, document order vs geometric order, and caveat that wording is indicative while flagged issues are real. 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?

The description is a single, dense paragraph but is well-structured: purpose first, then important limitations, then relationship to sibling. Every sentence adds essential information for correct use; 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 tool with no output schema and no annotations, the description explains purpose, output semantics, limitations, and requirements. It could be slightly more explicit about the return format, but the flagged issues are enumerated. Overall, highly 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?

Input schema covers all three parameters with descriptions (100% coverage). The description does not add parameter-level detail; the schema already explains udid, element, and onlyIssues. Baseline 3 is appropriate since 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 opens with a specific action: 'Approximate what VoiceOver would announce for each element... and flag announcements' — clear verb+resource. It distinguishes from sibling ios_accessibility_audit by noting it is a 'RECONSTRUCTION' and 'Complements ios_accessibility_audit, which reports Apple's own findings.'

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 complementary sibling 'ios_accessibility_audit' and differentiates the two. Also states requirement: 'Requires an active iOS automation session (auto-starts if needed).' This gives the agent clear context for when to use this tool.

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
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's a read-only query (implied by 'Get'), discloses the session requirement, and notes the intended downstream use. However, it doesn't disclose whether this returns logical vs physical pixels, whether it also returns height, rotation effects, or what happens if the session is inactive.

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?

Two sentences, both carrying useful information: what it does and why you'd use it. No wasted words. Slightly more could be added about return format, but the current length is efficient and front-loaded.

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 single-parameter read tool, the description covers the core purpose and usage context. It lacks mention of return value format (pixels vs points), handling of orientation changes, or relation to height retrieval, but the tool is simple enough that these gaps are moderate rather than severe.

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 a single 'udid' parameter documented as 'iOS device UDID'. The description adds the session-requirement context but doesn't elaborate on the udid beyond what the schema provides. Baseline 3 is appropriate since the schema fully documents the only 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 clearly states the verb ('Get') and resource ('screen width of an iOS device from the iOS automation session'), and adds the practical purpose ('Use these dimensions for tap/swipe coordinates'). It's distinguished from siblings by naming the specific session source. However, it doesn't explicitly contrast with ios_device_info or ios_orientation which could also provide device dimensions.

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 is for obtaining screen width for tap/swipe coordinate purposes, and notes it 'Requires an active iOS automation session'. It lacks explicit 'when NOT to use' guidance or named alternatives, but the coordinate-purpose context provides useful direction.

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.
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 this is a mutating operation requiring user confirmation, mentions the 'Task' default, and notes summary truncation behavior. It doesn't mention required permissions or reversibility, but provides solid behavioral context 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.

Conciseness4/5

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

The description is three sentences and highly information-dense with no fluff. It front-loads the purpose and return values, then adds usage guards. Slightly dense but every sentence earns its place; could be considered a bit packed for easy 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?

With 100% schema coverage, detailed parameter descriptions, and no output schema needed (returns a key and URL as stated), the description is quite complete. It covers confirmation behavior, defaults, sibling differentiation, and return values. Minor gaps: no permission requirements or API rate-limit notes, but adequate for a creation 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 5 parameters well. The description adds value with the 'Defaults issueType to Task' hint and confirms confirmation behavior, but doesn't meaningfully extend parameter meaning beyond the schema (which already has excellent per-parameter 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 clearly states 'Create a new Jira issue' with a specific verb+resource, and immediately distinguishes from sibling tools like jira_get_issue and jira_search by noting its mutating nature. The nuance about 'PROJ-X' meaning a comment not a new issue 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?

Excellent guidance: it explicitly states when NOT to use the tool ('PROJ-X' means comment, not new issue), tells the agent to confirm with the user before calling, and instructs using jira_get_issue first for context. This is explicit when/when-not guidance with alternatives named.

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")
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 uses stored credentials (not inline), and that it returns an actionable error if Jira is not configured. However, it doesn't describe behaviors like permission limits, whether partial data is returned, or rate-limit/timing considerations. Decent disclosure for a read operation 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 tight sentences covering purpose, return fields, and credential handling/error behavior. Zero waste, information-dense, 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?

For a single-parameter read tool with no output schema, the description is quite complete: it lists return fields, explains credential sourcing, and addresses the misconfiguration edge case. It could mention things like whether issues are searched across all projects or only accessible ones, but overall it provides sufficient context for an agent to invoke 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 description coverage is 100%, and the schema already documents the 'key' parameter format (PROJECT-NUMBER with examples). The description reinforces the example ('ACME-123') but adds little beyond what the schema provides. Baseline 3 is appropriate given the single fully-documented 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 has a specific verb+resource: 'Fetch a single Jira issue by key' with clear example ('ACME-123'). It lists the exact fields returned and is clearly distinct from siblings like jira_search and jira_create_issue.

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 is for fetching a single issue by key, distinguishing it from jira_search (searching). It notes it uses the calling user's stored Jira credential and does not accept inline credentials, which clarifies a key usage constraint.

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.
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 behavioral burden. It discloses: returns summaries only (not images), defaults to pending status, is owner-scoped to your account, and that it flags changes against an approved baseline. This is reasonable behavioral clarity for a read/list operation, though it doesn't mention ordering, pagination, or maximum result count.

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, all dense with useful information: purpose, image-vs-summary distinction, default behavior, scoping. No wasted words. The parenthetical in the schema for replay_id is also well-structured. Slightly more than minimal but 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 read-only list tool with full schema coverage, no output schema, and no required params, this description is adequate. It covers default behavior, scoping, image handling, and owner scope. Given the fairly simple contract (list candidates, filter by status/replay), the description provides enough context for correct invocation without needing to explain return values beyond what's implied.

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 well. The description adds value by explaining the default ('pending') that matches the status enum default, and gives rich context for replay_id ('narrow to candidates from one specific replay run only... so you never touch pending candidates from other runs'). Baseline 3 is appropriate since schema covers the fields and description adds some supplementary 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 what the tool does: 'List AI Visual Review candidates' with specific context about flow-replay steps where pixel-diff flagged a change. It explicitly distinguishes from get_visual_review (returns summaries with image URLs/refs only, not the images themselves), and from resolve_visual_review (which is a sibling that handles resolution). This is a specific verb+resource+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 clear context for when to use this tool — it's the listing entry point for visual review candidates, defaulting to pending. Key guidance: use get_visual_review for actual images, and the replay_id parameter has explicit usage guidance ('Use this when you were asked to review a particular replay'). No explicit exclusions for alternatives like resolve_visual_review, but the distinction from get_visual_review is well made.

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
Behavior4/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 the behavioral consequence of 'approve' (changes the approved baseline for future comparisons) and 'reject' (fails the owning replay run). It also states 'Owner-scoped to your account,' revealing access constraints. This is meaningful behavioral context beyond name/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 clear sentences with zero waste. It front-loads the core action, defines each decision value with consequences, and closes with a scoping note. 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 3-param tool with 100% schema coverage and no output schema, the description adequately covers the workflow (inspect via get_visual_review first), decision semantics, side effects, and ownership scope. It doesn't explain return values or error cases, which is acceptable for a tool with no output schema and straightforward 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 coverage is 100%, so the description doesn't need to document parameters heavily. The description adds some semantic context around the 'decision' parameter by explaining what approve/reject mean behaviorally. It also implies note is for traceability, matching the schema's 'logged for traceability' line. Baseline 3 is fair for full-schema-coverage with modest value-add.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships 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 what the tool does: 'Resolve an AI Visual Review candidate' with specific verbs for each decision value. It defines both 'approve' (promotes live capture to new approved baseline) and 'reject' (fails the owning replay run), which is specific and unambiguous. It distinguishes from sibling tools like get_visual_review and list_visual_reviews by being the action-taking 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?

The description says this is used 'after inspecting it (via get_visual_review)', giving the prerequisite workflow step. It explains the consequences of each decision clearly. However, it doesn't explicitly state when NOT to use the tool or reference alternative tools beyond the implicit inspection step.

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

Behavior4/5

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

No annotations are provided, so the description carries the disclosure burden. It transparently states the tool never returns values ('never the values') and clarifies that actual values are substituted at tool-call execution time. This is a meaningful read-safe disclosure that an agent needs to correctly reason about behavior, though it doesn't cover 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?

The description is compact and front-loaded: the core purpose is stated in the first sentence, then critical safety info (values never returned) and usage context follow. Every sentence earns its place with no filler 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 zero-parameter, no-output-schema tool, the description is quite complete. It explains what's returned (names + timestamps), what's not returned (values), when to use it (before asking for credentials), and the execution-time substitution behavior. Some minor gaps exist (no mention of empty results behavior), but the tool is simple enough that this is near-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?

The tool has 0 parameters and 100% schema coverage, so there is nothing for the description to add about arguments. The baseline for a zero-parameter tool is 4, and the description appropriately focuses on output semantics rather than 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 clearly states the verb+resource: 'List the names of secret variables the user has stored for this account.' It distinctly specifies the scope (names + timestamps) and explicitly calls out what it never returns (values), which sets it apart from any credential-like 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?

Very explicit usage guidance: 'Use this BEFORE asking the user for any URL, credential, or API key to see if a relevant one is already saved' with concrete example names. This both says when to use it and what to do with the result, making the trigger condition unambiguous.

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

session_backCInspect

Navigate back in the browser/app history

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIdYesSession ID
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 does not disclose whether navigation is limited to webviews, whether it fails on native apps, whether it emits console logs or triggers navigation events, or what happens if there's no history to go back to. For a navigation tool with zero annotation coverage, this is thin.

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?

Single concise sentence with zero waste. It is appropriately front-loaded and brief.

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?

A navigation action operating on a session with zero annotations, no output schema, and no behavioral disclosure. It does not explain prerequisites (e.g., an existing active session), fallback behavior, or error conditions. For a mutating navigation tool, more contextual information is warranted.

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 sessionId is documented in the schema. The description does not explain how sessionId relates to session_create or how to obtain a valid sessionId. With full schema coverage the baseline is 3, but no additional semantic context is provided beyond 'Session ID'.

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

Purpose3/5

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

The description 'Navigate back in the browser/app history' states the verb+resource clearly enough. The name 'session_back' already signals this, but 'browser/app' adds some context about which type of session it operates on. It slightly distinguishes from siblings like webpage_back and device_navigate_url.

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

Usage Guidelines2/5

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

No guidance on when to use this tool vs alternatives. There are closely related siblings such as webpage_back, ios_navigate_url, device_navigate_url, and session_url. The description does not clarify whether this operates on a browser tab, native app, or which session types are supported, nor when to prefer it over webpage_back.

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

session_clickCInspect

Click an element by its elementId (from session_find_element)

ParametersJSON Schema
NameRequiredDescriptionDefault
elementIdYesElement ID from session_find_element
sessionIdYesSession ID
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 doesn't disclose whether the click requires an active session, what happens if the element isn't found or is stale, whether the session must be foregrounded, or any side effects. For a stateful automation action with a required sessionId, 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.

Conciseness4/5

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

The description is a single concise sentence with no wasted words. It's appropriately short for a simple two-parameter action, though it could compress the parenthetical reference.

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

Completeness2/5

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

The tool has an output schema of false and no annotations, so the description bears full responsibility. For a stateful browser session action requiring sessionId, the description is incomplete—it doesn't clarify what constitutes the session, what the click result might be, or error behavior. Given the simplicity of the operation, some gaps are acceptable, but the session dependency should be elaborated.

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 documented in the schema. The description adds marginal value by tying elementId to session_find_element output, which is useful context. Baseline 3 is appropriate since the schema already covers both parameters adequately.

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

Purpose3/5

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

The description says 'Click an element by its elementId (from session_find_element)'. This clearly states the verb (click) and resource (element by ID), and references the companion tool session_find_element. However, it doesn't distinguish from the many similar click/tap tools in siblings (ios_tap, device_tap, web_click, 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 Guidelines2/5

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

The description indicates the element ID should come from session_find_element, which gives a prerequisite. But there's no guidance on when to use session_click vs sibling click tools (web_click, device_tap, ios_tap), no when-not-to-use, and no exclusions. The session context is implied but never explicitly stated as the browser/session automation domain.

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. (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)
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 that logs are captured automatically, returns the most recent entries, and is limited to browser sessions. However, it doesn't describe return format, whether logs are cleared or persisted, or any rate/volume limits. For a read-only diagnostic tool, the core behavioral traits are reasonably disclosed, but gaps remain around return structure and caching 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 sentences, zero waste. The purpose, usage, and restriction are all stated efficiently with the browser/mobile exclusion parenthetical adding high-value context without bloat.

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 read tool with 100% schema coverage, no output schema, and no nested objects, the description is largely complete. It orients the agent on when to use it (diagnosing user-visible page errors), what it returns (most recent entries), and what it excludes (mobile/native sessions). It could briefly note that multiple calls may be needed to page through history, but given the simple 3-parameter signature, 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 description coverage is 100%, so the schema already documents all three parameters well. The description adds value by noting the 'most recent entries' default behavior which contextualizes the limit parameter, and the level parameter's error-filtering use case is implied. Baseline would be 3, but the description's framing of 'most recent' and 'returns the most recent entries' enriches understanding of both limit and the ordering behavior beyond what the schema's 'most recent first-shown' covers.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships 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 browser CONSOLE logs for a browser session, specifying it captures DevTools console output (JS errors, warnings, console.log) and returns the most recent entries. It distinguishes itself from the sibling android_devtools_console_logs and ios_safari_console_logs by explicitly being a browser-session tool, and from session_network_logs by focusing on console rather than 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 clear usage context ('Use this to diagnose page errors the user is seeing') and provides an explicit exclusion (browser sessions only, returns nothing for mobile/native device sessions). While it names no specific alternative tool, the mobile exclusion implicitly references android_devtools_console_logs and ios_safari_console_logs as the appropriate alternatives for non-browser sessions.

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

session_createBInspect

Create a new cross-platform automation session on the testing grid. Works for both web browsers and mobile devices. Returns sessionId and capabilities.

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
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 disclosure. It states the tool creates a session but doesn't disclose side effects (e.g., whether creating a new session terminates existing ones), resource implications (grid capacity), whether sessions should be explicitly terminated via session_quit, or any auth/access requirements. For a session-creating tool with zero annotations, this is a notable 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.

Conciseness4/5

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

Two sentences, front-loaded with the core purpose. Every sentence adds value - the first states what it does, the second states the return value. No filler or redundancy. Slightly more could be said about return semantics but it's appropriately tight.

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's claim that it 'Returns sessionId and capabilities' provides necessary return-value context. However, for a session-creation tool that initiates stateful resources on a shared grid, the description lacks important lifecycle context (how sessions are tracked, whether existing sessions persist, cleanup requirements). The tool is moderately complex with nested objects, and the description is adequate but not 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 fully documents all 4 parameters. The description adds the meaningful semantic that browserName being 'empty' means a mobile session, which supplements the schema's browser name meaning. It also frames capabilities as W3C-standard. This is valuable contextual enrichment beyond the schema's bare parameter 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 what the tool does: 'Create a new cross-platform automation session on the testing grid' with a specific verb+resource. It mentions support for both web browsers and mobile devices. However, it doesn't explicitly distinguish itself from sibling tools like ios_start_session or session_list, though those are obviously different (session lifecycle management vs. creation).

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 states it works 'for both web browsers and mobile devices' and mentions it returns sessionId and capabilities. However, it provides no guidance on when to choose this over ios_start_session (which appears to be a similar platform-specific session starter) or session_list, nor does it explain prerequisites or whether this is the general entry-point session creator for the testing grid.

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

session_executeCInspect

Execute JavaScript in the browser context. Returns the script result.

ParametersJSON Schema
NameRequiredDescriptionDefault
argsNoArguments to pass to the script
scriptYesJavaScript code to execute (e.g. "return document.title")
sessionIdYesSession ID
Behavior2/5

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

No annotations are provided, so the description carries full burden for behavioral disclosure. The description only says 'Returns the script result' which describes the return but doesn't disclose side effects (this is executing arbitrary JS, which can mutate page state, trigger navigation, make network requests, etc.). It doesn't mention whether execution is isolated, what context/scope the script runs in, or whether it can cause persistent changes requiring session reset.

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 short (one sentence plus return note) which is appropriately concise. However, it's arguably under-specified — for a tool that executes arbitrary code, the description could carry more useful context (scope, isolation, caveats) while remaining concise. It's not wasteful but borders on being too minimal for the tool's risk profile.

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?

This is a powerful, potentially destructive tool (executing arbitrary JavaScript) with no annotations, no output schema, and no behavioral disclosure. The description is minimal for such a high-risk operation. It doesn't address execution context, permissions (does it need page interaction approval?), error handling, or what happens when the script throws. For a tool of this complexity and risk, the description is incomplete.

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 fully documents all three parameters (args, script, sessionId). The description adds marginal value by clarifying the script format via the example 'return document.title', which complements the schema's example. The args parameter's semantics are not clarified beyond the schema's 'Arguments to pass to the script' — specifically how args are referenced within the script (positional? by name?) is ambiguous but this matches schema baseline.

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

Purpose3/5

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

The description states 'Execute JavaScript in the browser context' which is a specific verb+resource combination. However, it doesn't distinguish from closely related siblings like web_evaluate, android_devtools_evaluate, ios_safari_evaluate, and web_evaluate, which all likely execute JavaScript. The purpose is clear but lacks differentiation from these 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 Guidelines2/5

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

No guidance is provided on when to use this tool versus the many sibling tools that also execute/evaluate JavaScript (web_evaluate, android_devtools_evaluate, ios_safari_evaluate). With at least 4+ sibling tools that could execute JS, the absence of any disambiguation or context for selection is a meaningful gap. There's no indication of browser-specific vs device-specific sessions.

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 an element on the page. Returns elementId for use with click/sendKeys. Strategies: "css selector", "xpath", "id", "name", "link text", "partial link text", "tag name", "class name".

ParametersJSON Schema
NameRequiredDescriptionDefault
usingYesLocator strategy (e.g. "css selector", "xpath", "id")
valueYesLocator value (e.g. "#login-btn", "//button[@id='submit']")
sessionIdYesSession ID
Behavior3/5

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

No annotations are provided, so the description carries full disclosure burden. It explains what the tool does (find element, return elementId) and lists all locator strategies, which is useful. However, it doesn't disclose behavior on no-match (error vs empty), whether it returns first match, or any timeout behavior. For a finding tool with zero annotations, this is moderately adequate but leaves some behavioral gaps.

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?

Two sentences, front-loaded with the purpose, then valuable strategy list. No waste. Efficiently sized.

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?

Schema covers 100% of 3 parameters, no output schema, moderate tool complexity. The description explains the purpose, return value (elementId), and available strategies. It's reasonably complete for a find-element tool, though it doesn't note relationship to siblings or failure behavior. Given full schema coverage and the straightforward nature of the tool, this 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?

Schema description coverage is 100%, so the schema already documents all 3 parameters with examples. The description adds value by listing all valid locator strategies and explaining the return value (elementId), which goes beyond schema. Baseline 3 is appropriate since schema does heavy lifting but description adds strategy enumeration.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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+resource: 'Find an element on the page' with explicit return value (elementId). Distinguishes from siblings like device_find_element, ios_find_element, and webpage_* tools by centering on session context. The strategy list adds precision.

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 states what it does and lists strategies, but doesn't explicitly say when to use it vs siblings (session_*, webpage_*, device_*, ios_* find tools). No exclusions or alternative recommendations given. Usage context is implied but not explicitly differentiated from the many similar find tools among siblings.

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

session_get_titleCInspect

Get the current page title or activity name

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIdYesSession ID
Behavior2/5

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

No annotations are provided, so the description carries full burden for behavioral disclosure. It says 'get' implying a read operation, but doesn't explain what happens if the session is invalid, what the return format is (title string? object?), whether current activity name applies to Android only, or any error conditions. For a read tool with no annotation coverage, this is a 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, front-loaded with the verb and purpose. No wasted words or filler. Appropriate length for a simple read 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?

For a single-parameter read tool with good schema coverage, the description is minimally adequate. However, the ambiguity between 'page title' (web) and 'activity name' (native) is significant — an agent might not know what to expect from the output. Without an output schema and without clarification on return format, there's room for more 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 coverage is 100% (1 param: sessionId, described as 'Session ID'). The description doesn't add any parameter meaning beyond the schema — it adds no context like 'required to identify which session to read the title from' or format expectations. Baseline of 3 applies since the schema already fully documents the param.

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

Purpose3/5

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

The description 'Get the current page title or activity name' clearly states the verb ('Get') and resource (page title/activity name). It's somewhat ambiguous about whether this applies to web pages, native Android activities, or both — the 'or' suggests it could be either, but this ambiguity isn't resolved. It doesn't distinguish itself from siblings like session_url, session_page_source, or web_get_dom which overlap in session context.

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

Usage Guidelines2/5

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

No guidance on when to use this vs alternatives. There are many sibling session tools (session_url, session_page_source, session_screenshot) and web_* tools that could retrieve page information, but nothing explains when to prefer this tool. No exclusions or complementary tool references are provided.

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

session_listBInspect

List all active sessions on the testing grid

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Behavior2/5

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

No annotations are provided, so the description carries full burden for behavioral disclosure. It states the action but doesn't disclose whether the response format or pagination behavior, whether sessions across devices/platforms are included, whether it is a read-only operation, or what 'active' means precisely. For a zero-annotation tool, 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 concise sentence that fully states the purpose with zero filler. Every word earns its place, and it is appropriately front-loaded with the verb and resource.

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 (0 params, no output schema), so the description covers most of what's needed. However, with no annotations and no output schema, the agent has no idea what the return value looks like (field structure, format, ordering), and 'active' is undefined. For an otherwise simple tool, the description is minimally adequate but could specify expected output.

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 0 parameters, so with schema coverage at 100% and no params to document, the baseline is 4. The description sufficiently conveys the tool's scope without needing parameter detail since none exist.

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 'List all active sessions on the testing grid' clearly states the verb (list) and the resource (active sessions), with scope indicated by 'on the testing grid'. It distinguishes this session-list-oriented tool from session lifecycle tools like session_create, session_execute, and session_quit among 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 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 vs alternatives. No alternatives are named, no exclusions given, and no context about whether this should precede session_create or connect to session_status-like tools. The description implies 'list session state' usage but provides no explicit direction.

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. 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.
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 requests are captured automatically (no explicit start), returns most recent, and bodies are unavailable. For mutation-free read behavior, this is reasonably transparent. It doesn't mention pagination or whether older requests are retained/dropped, but for a captured-networking-log 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?

Four sentences, each earning its place: purpose, capture mechanism, use-case, and caveat. The front-loaded first sentence provides the core purpose. Slightly verbose with parentheticals (DevTools Network tab — ...) but generally tight and clear.

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 network-log reader with 100% schema coverage and no output schema, the description is complete enough. It explains what data is returned (method, URL, status, type, timing, size), the limitation (no bodies), and a usage hint (find failures/slow requests). The (Browser sessions only.) note cleanly restricts applicability. Adequate without being 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%, with fields like 'type' (with default value 50, max 500) and 'failuresOnly' (with >=400 semantics) well-documented in the schema. The description adds minimal extra detail beyond the schema — it mentions status/type concepts but doesn't materially enrich parameter meaning. Baseline 3 applies since the 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?

Specific verb (Read) + resource (NETWORK requests for a browser session), clearly states scope (method, URL, status, type, timing, size) and behavior (captured automatically, returns most recent). The mention of DevTools Network tab disambiguates it from android_devtools_capture_network and ios_safari_capture_network in the sibling list. Clearly a read operation, aligns with the read/hint nature.

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: 'Use to find failing (4xx/5xx) or slow requests.' Also documents what's NOT available ('Response/request BODIES are not available') and likely alternatives via the (Browser sessions only.) note. Introduces a discoverability constraint for filtering failures, which is direct usage guidance.

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

session_page_sourceBInspect

Get the page source (HTML for browsers, XML for mobile apps)

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIdYesSession ID
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 behavioral disclosure burden. It doesn't mention that retrieving full page source can be large/expensive, whether it requires an active session to exist, whether it reflects live DOM state versus static HTML, or how the raw source relates to the structured DOM APIs (session_find_element, android_devtools_get_dom). The format mention adds some value but substantial behavior gaps remain.

Agents need to know what a tool does to the world before 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, concise sentence that is front-loaded and free of waste. It states the action and the return-format variation by platform in minimal 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?

Given it's a single-parameter read tool with zero annotations and no output schema, the description is reasonably complete for the core purpose. However, it would benefit from noting the session must be active and that output may be large, plus relationship to web_get_source/device_page_source. There are no return-format details beyond the HTML/XML note, but with no output schema this is a modest gap 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 description coverage is 100% with a single parameter (sessionId: 'Session ID'), fully documented in the schema. The description adds no param detail beyond the schema, so it hits the baseline 3. Since there's only one self-explanatory parameter, this is acceptable.

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 is clear: 'Get the page source (HTML for browsers, XML for mobile apps)'. It uses a specific verb+resource pairing and adds format expectations by platform. However, it doesn't distinguish itself from siblings like device_page_source, ios_page_source, or web_get_source/web_snapshot, so it lacks 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?

No guidance on when to use this tool versus alternatives. There are many similar sibling tools (device_page_source, ios_page_source, web_get_source) that could retrieve page/DOM source, but the description doesn't explain the relationship or which to choose. It also doesn't clarify whether this is the generic fallback for a session regardless of platform.

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

session_quitBInspect

Quit/delete an active cross-platform automation session

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIdYesSession ID to quit
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 disclosure. 'Quit/delete' clearly indicates this is a destructive/mutating operation, which is helpful. But it doesn't disclose whether quitting frees resources, whether it's reversible, what happens to in-flight operations, or whether there are side effects on dependent sessions.

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 concise sentence that conveys the core action. No wasted words, appropriately sized for a simple single-parameter 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?

With no annotations, no output schema, and a single ambiguous description, this tool provides minimal context. The 'quit/delete' wording is ambiguous about whether these are equivalent operations. For a session-lifecycle-terminating tool, more context about consequences and prerequisites would be valuable, especially given the large sibling toolset where session management appears critical.

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 there's only one parameter (sessionId) with a description in the schema. The description adds no additional parameter semantics beyond the schema. However, the ambiguity of 'quit/delete' leaves uncertainty about whether the sessionId identifies a session to be ended or permanently removed.

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 'Quit/delete an active cross-platform automation session' uses specific verbs (Quit/delete) with a clear resource (session) and scopes it as cross-platform. It distinguishes itself from session_create, session_list, and other session_* siblings. However, it doesn't clarify whether 'quit' and 'delete' are the same operation or different behaviors.

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 like session_back, session_click, session_execute, or the related 'quit'/'close' actions on platform-specific tools. It doesn't state whether this is the final teardown for a session, what state it expects the session to be in, or any prerequisites before calling.

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

session_screenshotBInspect

Take a screenshot of the current session screen. Returns base64-encoded PNG.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIdYesSession ID
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 output is base64-encoded PNG and that it captures the 'current session screen,' but doesn't describe resolution, whether it captures the full viewport or a region, or any timing/performance characteristics. 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?

A single, efficient sentence that states the action, target, and output format. Zero wasted words; everything present 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 one-parameter tool with no output schema, the description covers purpose and return format. However, given the large number of screenshot siblings, it would benefit from clarifying how 'session' screenshots differ from device or platform screenshots to aid correct selection.

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 the single sessionId parameter. The description adds nothing beyond what's in the schema, and the sessionId description in schema ('Session ID') is minimal. Baseline 3 is appropriate when the schema handles documentation.

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+resource ('Take a screenshot of the current session screen') and the return format (base64-encoded PNG). It adequately distinguishes from the 'device_screenshot' and platform-specific screenshot siblings by scoping to a 'session' context, though it doesn't 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 Guidelines2/5

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

No guidance is provided on when to use this tool versus the many sibling screenshot tools (device_screenshot, ios_screenshot, android_mjpeg_screenshot, ios_fast_screenshot, webpage_screenshot). With over a dozen screenshot-related siblings, the absence of any differentiation guidance is a significant gap.

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

session_send_keysCInspect

Send keys (type text) to an element

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesText to type into the element
elementIdYesElement ID from session_find_element
sessionIdYesSession ID
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 doesn't explain whether the text is typed at once or key-by-key, whether special characters are supported, whether it requires the element to be focused or visible, whether text appends or replaces existing content, or what happens on failure. For a side-effect-causing mutation tool with zero annotation coverage, 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.

Conciseness4/5

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

The description is a single, efficient sentence that is appropriately concise and front-loaded. It wastes no words. However, it is so brief that it sacrifices meaningful detail, which is reflected in other dimension scores.

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 has 3 required parameters, no output schema, and no annotations, but the schema covers parameters fully. For such a simple tool, the description is adequate but has clear gaps in behavioral expectations (error handling, text replacement behavior, focus requirements). It's minimally viable but doesn't provide the extra context a 4 or 5 would require.

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 clearly (text, elementId, sessionId). The description adds no additional meaning about parameters—for instance, whether newline characters are supported, whether text must match the element type, or how elementId is sourced. The baseline of 3 is appropriate given full schema coverage.

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

Purpose3/5

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

The description states 'Send keys (type text) to an element,' which uses a specific verb and resource (session/element). However, it doesn't distinguish from siblings like device_type, ios_send_keys, webpage_type, web_type, and session_execute that all do similar typing operations. The description is clear but fails to differentiate which of the many sibling typing tools should be chosen.

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. With numerous sibling tools like device_type, ios_send_keys, webpage_type, session_execute, and web_type that appear to perform similar actions, the description provides no context about when this session-oriented send_keys tool is the appropriate choice. no when-not guidance or alternative references.

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

session_urlCInspect

Navigate the browser to a URL

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesURL to navigate to
sessionIdYesSession ID
Behavior2/5

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

No annotations are provided, so the description carries full burden for behavioral disclosure. It only says 'navigate', revealing nothing about whether this opens a new tab, replaces current page, requires an active session, waits for page load, handles errors, or affects back/forward history. For a navigation action with zero annotation coverage, 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.

Conciseness4/5

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

The description is a single concise sentence with zero waste. It's front-loaded and efficient. The brevity is appropriate for a simple action, though it could add more value while remaining concise.

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

Completeness2/5

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

Given the large sibling set with multiple navigation tools and no annotations or output schema, the description is incomplete. It should clarify what 'session' means in this context, whether a session must be pre-created (session_create exists as sibling), and how this differs from web_navigate/device_navigate_url/ios_navigate_url. A simple 4-word description undersells a tool in a complex navigation ecosystem.

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 params (url='URL to navigate to', sessionId='Session ID') described in the schema. The description adds no additional meaning beyond the schema. Baseline 3 is appropriate since schema handles parameter documentation.

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

Purpose3/5

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

The description states a clear verb+resource ('Navigate the browser to a URL'). However, it doesn't distinguish from siblings like android_devtools_navigate, ios_navigate_url, device_navigate_url, and web_navigate, which are also navigation tools in different contexts. The name 'session_url' suggests a session-scoped browser, but the description doesn't disambiguate from these alternatives.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus sibling navigation tools (device_navigate_url, ios_navigate_url, web_navigate, android_devtools_navigate). With many similar navigation tools among siblings, the description should clarify scope (session-based browser vs device webview vs devtools). No exclusions or context provided.

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

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.
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 explicitly states this call is 'fire-and-forget — it is not shown to the end user, it only records feedback for maintainers to triage later.' This discloses the critical side-effect behavior (fire-and-forget, no user visibility) that an agent would otherwise not know. It could add a touch more on whether it succeeds silently or returns a confirmation, but the key behavioral traits are disclosed.

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

Conciseness5/5

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

The description is a single well-structured paragraph with zero wasted words. Every sentence earns its place: scope distinction, four trigger categories, actionable feedback guidance, and the fire-and-forget behavioral note. It front-loads the core purpose and follows with practical 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?

The tool has 6 parameters (100% schema coverage) and no output schema. The description effectively explains the tool's purpose, scope, use cases, and behavioral characteristics. It's a relatively simple feedback-recording tool, and the description is proportionally complete. It could mention that it doesn't return meaningful output/confirmation, but given the fire-and-forget nature already disclosed, the completeness is strong.

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 documents all 6 parameters, giving a baseline of 3. However, the description adds semantic value beyond the schema: it explains that 'message' should include tool_name and expected-vs-actual framing, that 'reproduction' is specifically for bug reports ('if this is a bug report'), and that 'severity' is about task impact ('if applicable'). This enriches the meaning of the params 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 verb ('Report feedback'), the specific resource (robot-actions MCP device-control tools THEMSELVES), and critically distinguishes scope from the app under test. It explicitly explains this is NOT about the user's app being tested, which prevents a common misinterpretation. This fully distinguishes it from any sibling 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?

The description gives explicit guidance on WHEN to use it (tool confused you, missing capability, behaved like a bug, or worked well confirming something), providing four concrete trigger scenarios. It also states when NOT to use it ('not about the app under test') and describes the fire-and-forget nature. This is explicit context plus exclusions.

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.
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 this is a mutating write operation affecting the customer's TestRail, requires a pre-existing file, and returns the new attachment_id on success. It does not describe failure modes or whether the write is permanent/reversible, but the core behavioral trait (destructive customer-facing write requiring user confirmation) is clearly 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, front-loaded with the action, and zero wasted words. Every sentence adds value: what it does, the precondition, the confirmation requirement, and the return value. 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?

Given the 3-parameter schema with full coverage and no output schema, the description adequately covers the mutation safety, the prerequisite, and the return value. It could mention failure cases (e.g., non-existent file behavior) but otherwise this is complete for the tool's complexity.

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

Parameters4/5

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

Schema coverage is 100%, so the three parameters are all documented in the schema. The description adds meaningful context on workspacePath ('the file must exist') and explains the default for displayFilename behavior ('Defaults to the basename of workspacePath'). It adds value beyond the schema by clarifying the lifecycle prerequisite for the path.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships 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 ('Attach a file from your /workspace to a TestRail case') and includes the concrete side effect of writing to the customer's TestRail plus the return value (attachment_id). This clearly distinguishes it from read-only siblings like testrail_list_attachments and testrail_get_attachment.

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 call it (file must already exist at the workspace path; write it first if needed) and provides a mandatory precondition ('ALWAYS confirm with the user via a chat bubble before calling'). This is explicit guidance beyond mere context.

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
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. It discloses that this is a write operation affecting the customer's TestRail project, mandates user confirmation, and explains traceability via refs for the linkback chip. It could add more about whether creation is reversible or what validation happens, but it discloses the critical external effect and workflow requirement.

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 that front-loads the core purpose and return value, then adds usage guidance. It's slightly dense with multiple pieces of guidance in one block, but every sentence earns its place — no filler or redundancy. Could benefit from light structuring but remains 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?

A mutation tool with no annotations and no output schema — the description compensates well by declaring the write nature, confirmation requirement, return value (id + URL), and guidance on choosing between the two step formats. For a moderately complex 8-parameter creation tool with full schema coverage, this is reasonably complete, though it doesn't address tenant-specific fields like typeId/priorityId defaults beyond what the schema hints.

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 8 parameters well. The description adds meaningful value by distinguishing customStepsSeparated (preferred for BDD, each step gets action+expected result) vs customSteps (plain-text), and explaining the refs purpose for the linkback chip. However, this is marginal enhancement over an already-thorough 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?

The description clearly states 'Create a new TestRail test case under the given sectionId' with specific verb+resource+location. It distinguishes from siblings like testrail_update_case and testrail_get_case by focusing on creation, and the description of return values (case id + browse URL) further clarifies 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 Guidelines4/5

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

The description gives strong guidance on when to use this tool, including mandatory user confirmation via chat bubble, and explains the distinction between customStepsSeparated (BDD-shaped) vs customSteps (plain-text). It doesn't explicitly name exclusion conditions or alternatives beyond implicit sibling distinctions, but the usage context is clear.

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

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
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 read-only nature, the 10MB size cap, the return format (filename, contentType, base64 content), and the precaution about asking the user before downloading larger files. This is meaningful behavioral context that 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 three concise sentences with zero waste. Every sentence adds value: what it does, what it returns, and the size/behavior caveat. Front-loaded with the primary purpose 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 single-parameter, no-output-schema tool, the description is complete. It covers purpose, return content, the size limit, and a usage precaution. It doesn't explain base64 decoding implications or how the content should be handled downstream, but given the tool's simplicity and 100% parameter schema coverage, it's adequately 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 description does not independently document the attachmentId parameter, but schema coverage is 100% — the schema itself explains attachmentId comes from testrail_list_attachments. The description adds no parameter-specific detail beyond the schema, so baseline 3 applies.

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

Purpose5/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 lists exactly what is returned (filename, contentType, and base64-encoded content inline). It distinguishes from sibling tools like testrail_add_attachment_to_case and testrail_list_attachments by being the download 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?

The description provides clear context on when to use this tool (to download an attachment) and important constraints: the 10MB cap and the instruction to list first and ask the user for larger files. It doesn't explicitly name an alternative tool for the 'list first' step, but testrail_list_attachments is the obvious counterpart and the guidance is still actionable.

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)
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 explicitly states 'Read-only — safe to call without user confirmation,' which discloses the behavioral trait that this is a safe, non-mutating operation. It also discloses the version-dependent 'labels (if TestRail 7.5+)' behavior, which is useful 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?

Two sentences, zero wasted words. The first sentence states purpose and return value, the second provides the read-only safety disclosure. 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 single-parameter read tool, this description is quite complete. It covers the return contents, version-dependent behavior, and safety profile. With no output schema, it could mention pagination or error cases, but for a straightforward fetch-by-id tool, this is adequate. An output schema would add more value than additional description text here.

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 (caseId) is well-documented in the schema. The description reinforces the parameter by noting it is the C-number format via the schema. There's minimal additional parameter info in the description itself, but with only one well-covered parameter, the baseline 3-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?

Description states a specific verb ('Read'), a specific resource ('TestRail test case'), and identifies it by id. It enumerates the returned fields (title, refs, steps, custom fields, labels), providing clear purpose that distinguishes it from sibling tools like testrail_get_attachment, testrail_create_case, and testrail_update_case.

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 read context but does not explicitly state when to use this vs alternatives. It does not mention when to prefer this over testrail_list_tests_for_run or testrail_get_attachment, nor any exclusions. The read-only note adds some usage context but no alternative guidance.

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
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 for safety disclosure. It explicitly states 'Read-only — safe without user confirmation,' which addresses the safety dimension well. However, it doesn't describe pagination behavior, error cases (e.g., nonexistent caseId), or whether the list is complete or truncated. The read-only disclosure is good 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?

Three sentences, every one earning its place: what it does, what it returns, safety note, and usage workflow. Zero waste, well front-loaded with the core purpose first. This is an exemplary concise tool 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 list tool with one parameter, full schema coverage, and an explicit read-only disclosure, the description covers the essentials. There's no output schema to document return values, but the description does enumerate the returned fields. Minor gaps: no mention of pagination or behavior on invalid caseId, but these are acceptable omissions for a simple look-up tool.

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

Parameters3/5

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

Schema coverage is 100% with a single parameter (caseId) described as 'TestRail case id' with exclusiveMinimum 0. The description doesn't add new parameter information beyond the schema, which the baseline of 3 reflects. With only one well-documented parameter, there's limited scope for description to add value 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?

The description states a specific verb+resource (list attachments on a TestRail case) and specifies what fields are returned (id, filename, size, created_on, user_id). It distinguishes itself from the sibling testrail_get_attachment by establishing a clear workflow relationship (find ids before retrieving).

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 on when to use it: 'Use this to find attachment ids before calling testrail_get_attachment.' This explicitly names the downstream tool, establishing the intended workflow. It doesn't enumerate when-not-to-use scenarios or alternatives, but the specific workflow linkage is strong guidance.

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

Behavior3/5

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

No annotations are provided, so the description carries the disclosure burden. It discloses that the tool returns listing data (id, name, announcement, suite_mode) and is scoped to the caller's account, adding meaningful context. However, it doesn't describe pagination behavior, potential empty result handling, or whether the announcement field could be large or truncated — minor gaps for a simple read-only 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 total — the first defines the tool and its purpose, the second specifies the returned fields and the use-case trigger. Zero wasted words, all content front-loaded and relevant. This is a model of conciseness for a list 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?

For a zero-parameter, read-only list tool with no output schema, the description is complete. It tells the agent what it returns, why it's used (first step for projectId resolution), and scopes the results. No additional behavioral disclosure is needed beyond what's provided given the 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?

The tool has 0 parameters and schema coverage is 100%, so there is nothing for the description to add about parameters. Per the rubric, 0 params earns a baseline of 4. The description's mention of the returned fields provides useful expectation-setting for what the agent will get, compensating meaningfully beyond the empty schema.

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

Purpose5/5

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

The description clearly states the verb (list) and resource (TestRail projects), specifies the scope (accessible to the caller's account), and enumerates the returned fields (id + name + announcement + suite_mode). It positions itself as the first step for resolving an unknown projectId, distinguishing it from sibling tools like testrail_list_runs, testrail_list_sections, and testrail_list_suites.

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 says to use this as the first step when the agent doesn't yet know which projectId to target for a new test case. This gives clear contextual guidance. However, it doesn't explicitly name alternative tools (e.g., testrail_list_runs) or state when NOT to use it, just an implicit exclusion via the 'first step' phrasing.

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. Returns run id (R-number), name, created_on, completed_on, and pass/fail counts. Use milestoneId or createdAfter (epoch seconds) to filter to a release or window.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax runs to return (TestRail default 250)
projectIdYesTestRail project id
milestoneIdNoOptional milestone filter
createdAfterNoOptional epoch-seconds lower bound on created_on
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 does disclose the return fields (id, name, created_on, completed_on, pass/fail counts) and the limit default of 250, which is useful. However, it doesn't mention pagination behavior, ordering, or whether results are ascending/descending by date. For a read-only list tool this is somewhat 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, zero waste. The first sentence states purpose and output fields, the second provides filtering guidance. Front-loaded with the core purpose, all information is actionable.

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 list tool with 100% schema coverage and no output schema, the description is reasonably complete. It states the return fields, includes filter hints, and mentions the limit default. It could add ordering/pagination behavior, but for a straightforward listing tool this is near-adequate given the rich 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 coverage is 100%, meaning all 4 parameters have descriptions in the schema itself. The description echoes this by mentioning milestoneId and createdAfter with epoch-seconds format. It adds some value by explaining the createdAfter filter is an epoch-seconds lower bound, which reinforces the schema. Baseline 3 is appropriate since the schema does the formatting 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 uses a specific verb+resource ('List TestRail runs for a project') and clearly states what it returns (run id, name, created_on, completed_on, pass/fail counts). It's clear but doesn't explicitly differentiate from sibling tools like testrail_list_sections or testrail_list_suites, though those are clearly different resources.

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 on when to use this tool, including filter parameters (milestoneId or createdAfter) for narrowing to a release or window. It gives practical usage guidance but doesn't explicitly name alternatives or state when NOT to use it. Among siblings it's the natural choice for listing runs, so ambiguity is low.

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
Behavior3/5

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

No annotations exist, so the description carries the transparency burden. It declares the return fields (id, name, parent_id, depth) which is useful, but doesn't describe pagination, ordering, failure modes, or whether list is ordered hierarchically. It's adequate for a read-only list tool but doesn't go beyond what's minimally expected.

Agents need to know what a tool does to the world before 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 waste. Every sentence earns its place: purpose, conditional parameter requirement, and return value details. Front-loaded with the core purpose 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?

This is a simple filter/list tool with 2 well-documented parameters and no output schema. The description effectively covers the required behavior including the critical suiteId conditional, and explains the return fields. Minor gap: no mention of pagination limits or ordering, but for a simple list 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 description coverage is 100%, with both parameters documented in the schema (suiteId and projectId with their requirements). The description reinforces the suiteId conditional requirement ('REQUIRED' emphasized) and adds the tree-rendering purpose, adding marginal value beyond the schema but the schema already carries most of 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?

Description clearly states verb (list), resource (sections/folders inside a TestRail project), and explicitly returns id + name + parent_id + depth so the agent can render a section tree. This is specific and distinguishes it from sibling tools like testrail_list_suites and testrail_list_projects.

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 on when suiteId is REQUIRED (multi-suite projects, TestRail rejects without it) vs optional (single-suite). This is concrete, actionable conditional guidance that prevents API failure. Clear context provided for when to supply the parameter.

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)
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 adequately discloses the return shape and the single/multi-suite behavior. However, it doesn't disclose pagination behavior, error conditions, auth requirements, or whether this is a read-only operation. For a benign list tool the disclosure 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?

Three sentences, zero waste. Front-loads the purpose, adds the single/multi-suite nuance, and lists the return fields. Every sentence earns its place, and the return-field listing is well-delimited with the plus signs.

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 single-parameter list tool. The description covers purpose, scoping behavior, and return fields. No pagination note exists but for a list-suites operation this is typically low-volume. The missing piece is guidance on what to do with the returned suites (e.g., passing suite_id to other tools), but that's beyond the minimum required for this tool's complexity.

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

Parameters4/5

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

Schema coverage is 100% and the single parameter (projectId, an integer with exclusiveMinimum 0) is described in the schema. The description adds value by referencing projectId comes from testrail_list_projects, which ties into the broader tool workflow — a helpful cross-reference beyond the schema.

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?

Clear verb+resource ('List suites for a TestRail project'), names the project scoping, and describes return fields (id, name, description, is_master, is_baseline). Distinguishes from siblings by explicitly covering single vs multi-suite behavior, though it doesn't 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 explains the single-suite vs multi-suite distinction which helps an agent understand what to expect, but doesn't explicitly state when to use this vs testrail_list_sections, testrail_list_runs, or other suite-related alternatives. Usage context is implied rather than explicitly stated.

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 tests inside a TestRail run. 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
runIdYesTestRail run id (R-number)
statusIdsNoOptional status filter — e.g. [5] for failed only, [2,5] for blocked+failed
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 succeeds. It discloses the return structure (T-id, C-id, title, status_id), explains the meaning of each status id value (1-5 mapped to TestRail statuses), and reveals the relationship between T-id and C-id. This provides useful behavioral context for how results should be interpreted and further acted upon.

Agents need to know what a tool does to the world before 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 tight two-sentence structure with zero wasted words. The first sentence states the core function and return shape; the second gives a focused filtering example. Every clause adds information 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 list tool with 100% schema coverage and no output schema, the description is complete: it covers purpose, return values, field semantics, status filter mapping, and usage example. There's no output schema requirement to compensate for, and the description handles the read-only listing use case thoroughly.

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 runId and statusIds well. The description adds meaningful value by explaining what each returned field means and providing a concrete statusIds filtering example ([5] for failed only). However, most parameter semantics are already captured in the schema, so the description adds marginal value over the structured 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 lists tests inside a TestRail run, distinguishes it from related siblings like testrail_get_case (by explaining the T-id vs C-id relationship and feeding C-id to testrail_get_case), and specifies exactly what each returned item contains. It separates test instance id (T-id) from underlying case id (C-id), which is an essential distinction that differentiates this tool from nearby testrail 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 on when to use this tool (when listing tests within a run) and how to chain it with testrail_get_case. It gives a concrete filtering example with statusIds (listing only failed tests when triaging). However, it doesn't explicitly state when NOT to use this tool or mention broader alternatives like testrail_list_runs for higher-level navigation.

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.
Behavior4/5

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

No annotations are provided, so the description carries full disclosure burden. It does well: flags that this 'writes to the customer's TestRail' (mutating), mandates user confirmation, and discloses the destructive REPLACE behavior of labels and that customStepsSeparated 'replaces existing'. The only gap is no mention of return value or error behavior, but the key 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?

Three dense sentences, front-loaded with the core purpose, then critical usage warnings. The labels workflow is the highest-risk aspect and earns its detailed treatment. No wasted words; every sentence adds operational 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?

A mutation tool with no annotations and no output schema needs strong descriptions, and this delivers: it discloses write behavior, mandates confirmation, and provides a concrete safe-workflow for the dangerous labels parameter. The 9 parameters are fully covered by the schema, and the description handles the semantic complexity (merge vs replace, partial updates) that the schema cannot express.

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 emphasizing the labels REPLACE semantics, the partial-update ('omitted fields left unchanged') behavior affecting all params, and clarifying customStepsSeparated as 'replaces existing'. The caseId required-parameter and its C-number meaning are in the schema but the description contextualizes the tool-wide update 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 clearly states 'Update an existing TestRail test case' — a specific verb (update) plus resource (test case). It pairs with sibling testrail_create_case and testrail_get_case, and the description's scope (existing case, partial update) distinguishes it from creation.

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?

Excellent explicit guidance: 'Any field omitted is left unchanged' clarifies partial-update semantics. The ALWAYS-confirm requirement and the labels REPLACE-vs-merge workflow with explicit step-by-step (get_case, read, merge, then call) provide strong when-to-use and how-to-use guidance, and the labels caveat acts as a when-not-to alternative.

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

test_suite_add_itemBInspect

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)
Behavior2/5

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

No annotations are provided, so the description carries full burden. 'Add' implies mutation, but the description doesn't disclose whether this requires existing suite/item IDs, whether duplicates are prevented, whether adding is idempotent, or what happens if the item doesn't exist. For a write operation with zero annotation coverage, 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.

Conciseness4/5

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

The description is two sentences and front-loads the core purpose in the first sentence. The second sentence efficiently packs itemType semantics and orderIndex behavior. Minimal waste, reasonably structured.

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

Completeness3/5

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

For a simple 4-param tool with 100% schema coverage and no output schema, the description is fairly complete. It explains the itemType semantics and orderIndex behavior. However, as a mutation tool with no annotations and an output schema absent, it could disclose what the tool returns on success/failure, which is a meaningful 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 description adds value by mapping itemType values to referenced resources ('test' references a flow recording with category='test'; 'testPlan' references a plan), which the schema enum alone doesn't convey. It also explains orderIndex behavior (appended if omitted). However, since schema covers 100% of parameters, the baseline is 3 and the description provides modest additional context, keeping it at that level.

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 clearly states the verb ('Add'), resource ('item'), and target ('suite'), with the itemType field distinguishing between flow recordings and plans. However, it doesn't explicitly distinguish from sibling tools like test_suite_create or test_suite_run, though the add-item semantic is reasonably distinct 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 Guidelines3/5

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

The description implies usage context (add test or testPlan items to a suite) and explains orderIndex behavior. However, it doesn't explicitly state when to use this vs. test_suite_create/test_suite_run, nor mention any prerequisites like suite existence or whether items need prior creation before being added.

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)
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 return value (id, displayId, name), which adds useful behavioral context. However, it doesn't mention permissions required, whether the operation is reversible, or any failure states. For a create operation, the return format disclosure is helpful but partial.

Agents need to know what a tool does to the world before 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 zero filler. Every sentence adds value: the first states what the tool does, the second explains nesting and the return value.

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

Completeness4/5

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

For a simple 3-parameter create operation with 100% schema coverage, the description is reasonably complete: it covers purpose, nesting semantics, and return format. It lacks output schema, but the return value is described inline. The main gap is lack of usage guidance versus sibling suite tools, but this is minor for a well-schematized create tool.

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

Parameters3/5

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

Schema coverage is 100%, with all three parameters described in the schema. The description adds the meaning of parentSuiteId (nesting) and displayId format (S001), which supplements the schema. However, the description mostly restates what the schema already documents, so it adds marginal value beyond the schema.

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

Purpose4/5

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

The description clearly states the verb (Create), the resource (test suite), and its purpose as an organizational grouping. It distinguishes from siblings by noting nesting via parentSuiteId and clarifying what it groups (tests and test plans), which differentiates it from test_suite_add_item and test_suite_run.

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 explains the nesting mechanism (parentSuiteId), implying usage context for creating hierarchical suites, but it does not explicitly state when to prefer this over related tools like test_suite_add_item or test_suite_list, nor any prerequisites. Usage is implied through the field descriptions rather than explicitly guided.

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)
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 disclose that items returned with a single suite are ordered (tests + plans) and that it operates on the authenticated user's suites. However, it does not describe the response shape, pagination behavior, or what happens with an invalid/nonexistent id, which leaves some ambiguity for a read 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?

Three sentences, each earning its place. The first states the primary action and scope, the second explains the single-suite fetch mode, and the third clarifies the children vs all-suite distinction. Zero redundancy and front-loaded with the core purpose.

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

Completeness4/5

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

For a list/fetch tool with two optional parameters, zero required, no output schema, and full schema description coverage, this description is adequate. It explains all three usage modes and the ordering behavior of returned items. The main gap is lack of detail on return shape/pagination, but with no output schema and modest complexity, the description 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 both suiteId and parentSuiteId documented in the schema. The description reinforces these meanings by explaining the behavioral consequences of each parameter (fetch single vs list children), adding modest value over the schema. But it doesn't add format or syntax details beyond what the schema already provides, 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 clearly states it lists the authenticated user's test suites, with explicit distinctions for three modes: fetch single suite with ordered items, list direct children of a parent, or list all. This is specific and self-contained, and the verb (list/fetch) plus resource (test suites) is unambiguous. It effectively differentiates from related siblings like testrail_list_suites and test_suite_create.

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 by explaining the effect of each parameter combination: pass suiteId to fetch a single suite with items, pass parentSuiteId to list direct children, omit both to list every suite. It also clarifies the children semantics (direct vs nested) which is critical for correct usage. This goes beyond what the schema alone conveys.

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
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 key behavioral traits: the run is sequential, includes plans plus one level of child suites, returns immediately (async execution), and executes in the background. It does not explicitly state whether the run is destructive or requires permissions, but for a test execution tool the disclosed traits (async, sequential, background) are the critical behavioral facts.

Agents need to know what a tool does to the world before 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 wasted words. The first sentence delivers purpose and execution model, the second delivers the async return behavior and the exact follow-up polling tool. Every clause earns its place with no redundant or filler phrasing.

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 test execution tool with 3 parameters, 100% schema coverage, and no output schema, the description is well-rounded. It covers scope (plans + 1 level of child suites), execution model (sequential, background), and follow-up workflow (poll status). The only minor gap is not describing what the runId return value's format looks like, but since the description points to the status polling tool, that's a minor omission.

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 all 3 parameters described in the schema. The description adds context beyond the schema by explaining the runId return value behavior and the poll mechanism, which connects to how parameters flow into status checks. The suiteId and udid are well-explained in schema; the description doesn't duplicate them but adds the operational workflow 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 'Run every test in a suite... SEQUENTIALLY on a device' with a specific verb (Run) and resource (test suite). It distinguishes itself from related tools like test_suite_run_status by explaining this tool initiates the run while status must be polled separately. Sibling tools include both test_suite_create and test_suite_run_status, so this description clearly differentiates its role.

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 the run executes in the background and instructs to 'Poll test_suite_run_status(runId) for progress and the rollup report.' This provides clear directional guidance (what to call after this tool) and explains the sequential execution model. It names the specific companion tool to use, which is strong usage guidance.

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
Behavior3/5

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

Description discloses that componentAttributionAvailable is false until the M2 attribution column lands, which is useful forward-looking context. However, with no annotations provided, the description carries the full burden for behavioral disclosure. It doesn't state whether this is a read-only operation, whether polling should be throttled, what error conditions exist (e.g., run still in progress), or the shape of the response beyond high-level counts.

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, efficiently covers the purpose, output content, and a known limitation. Slightly overloaded with parenthetical detail (componentAttributionAvailable note) but remains under a reasonable length and wastes nothing.

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 no output schema, the description should compensate by describing the return value adequately—it lists key output items (run aggregate, per-test status, step counts, overall summary, component attribution). However, given it's a polling tool, the description lacks guidance on what the response looks like while the run is still in progress (does status show 'running', partial counts?), which is important for an agent deciding whether to re-poll.

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% for the single runId parameter. The description adds meaning by clarifying that runId is 'Run id returned by test_suite_run', which ties the parameter to the initiating tool. With only one parameter at full schema coverage, the baseline is met, and the extra linkage adds slight value.

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 polls a suite run and returns the run aggregate plus a TestRail-style rollup with per-test status, step counts, an overall summary, and component-step attribution. The verb 'Poll' plus the resource 'suite run' is specific. It distinguishes from siblings like test_suite_run (which starts the run) by the polling orientation, though it doesn't explicitly name siblings.

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 polling counterpart to test_suite_run, which suggests usage for retrieving results after initiating a run. However, it doesn't explicitly state when to use this vs. alternatives like testrail_list_tests_for_run or test_suite_run, nor does it provide clear prerequisites or call cadence (e.g., retry/polling interval 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.
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 returns both a similarity score and changed-pixel count as text, AND returns baseline/live/diff images for direct viewing, explicitly framing the tool as a decision-support aid rather than an automated judge. It also discloses the input format constraints (raw base64, no 'data:' prefix).

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 on usage guidance, return-value detail, and parameter alternatives. It's comprehensive and each sentence earns its place, though it is somewhat long and could benefit from light structuring for scannability.

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 is self-sufficient. It explains return formats (text score/count plus three viewable images), the judgment framing (regression vs noise with concrete examples), and both input paths. For a 4-parameter tool with 1 required param, this is complete; the return-value explanation compensates for the missing 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 schema already documents each parameter. The description adds value by explaining the relationship between review_id and baseline_image_base64 (mutually exclusive alternatives), clarifying when to use each, and providing meaning to the label param ('for log correlation only'), beyond what the schema 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 clearly states 'Compare two screenshots... using a perceptual pixel-diff' with a specific verb and resource. It distinctly separates itself from sibling tools like list_visual_reviews and get_visual_review by specifying it performs the actual comparison and returns images for human judgment, and references review_id from list_visual_reviews as a distinct 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 explicitly explains when to use this tool (to judge whether flagged differences are real regressions vs benign noise), and clarifies what it does NOT do ('this tool does not make that call for you'). It also provides clear alternatives for obtaining baselines: supply two base64 images directly OR use review_id from list_visual_reviews.

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
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 adds context about the desktop grid environment and clarifies it is not a device interaction, but it does not disclose behaviors such as whether the click waits for page navigation, requires element visibility, or what happens on failure. The core action (click) is implicit but not expanded.

Agents need to know what a tool does to the world before 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 follows with a clear exclusion. Every word earns its place; there is no redundant or vague language.

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 click tool with two well-described parameters and no output schema, the description is nearly complete. It covers the action, environment, and when to use an alternative. Minor gaps include lack of mention of return values or post-click behavior, but these are less critical for a straightforward click 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%, with both parameters documented clearly (pageId from web_navigate, selector as CSS selector). The description adds little beyond this, merely reinforcing that pageId identifies the desktop browser context. Baseline of 3 is appropriate because the schema already provides the necessary 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 description clearly states the tool's action (click an element by CSS selector), the target environment (DESKTOP grid browser), and the required context (by pageId). It explicitly distinguishes itself from the sibling tool webpage_click, which targets real phones/tablets, 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: it is for the desktop grid browser, not for real devices. It names the alternative tool (webpage_click) for the non-use case, providing clear direction on selection.

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
Behavior4/5

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

With no annotations, the description carries the transparency burden. It discloses that the tool closes a desktop grid session and releases a grid node, and explains why it's not needed for mobile or webpage_* contexts. It doesn't detail side effects like idempotency, but the essential behavioral trait (cleanup of a grid node) 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?

The description is two sentences, front-loaded with the action and resource, and every sentence contributes either function or usage guidance. There is no repetitive 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 the tool's simplicity (1 parameter, no output schema), the description provides necessary context about the desktop grid session, the need to always call it, and why it doesn't apply to other browser contexts. It is 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?

The schema already provides 100% coverage for the single parameter 'pageId' including its source ('from web_navigate'). The description does not add extra semantic meaning beyond what the schema states, 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 ('Close') with a clear resource ('DESKTOP grid browser session') and explicitly mentions releasing the grid node. It distinguishes itself from sibling tools by clarifying that phone/tablet browsers and webpage_* tools do not require this call.

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 guidance: 'Always call this when done.' It also states when NOT to use it ('Not a device — a phone or tablet browser needs no such call') and references alternatives (webpage_* tools hold no grid node), making the usage context very clear.

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")
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 clarifies the desktop grid browser context but does not mention that running arbitrary JavaScript may have side effects on the page, nor does it describe error handling or result serialization. This leaves some behavioral ambiguity for a powerful 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 two sentences, front-loaded with the core action and resource, followed by a compact exclusion. No fluff or repetition; 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 2-parameter tool with no output schema, the description captures the core purpose, platform scope, and alternative tools. It does not explain return value structure or error behavior, but those are secondary for an evaluate tool and the schema covers the script syntax. Overall, it is largely 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% with both parameters described (pageId from web_navigate, script with examples). The description adds only the 'DESKTOP grid browser' context for pageId, which is marginal. Baseline 3 is appropriate since the schema already documents parameter meaning and syntax.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships 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 'Run JavaScript in the DESKTOP grid browser page (by pageId) and return the result.' This clearly identifies the action, resource, and output. It also distinguishes from siblings by stating 'Not a device' and naming the alternate mobile 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 provides explicit exclusions: 'Not a device — for a phone or tablet use android_devtools_evaluate or ios_safari_evaluate (by udid).' It tells when not to use this tool and names the exact alternatives, which is ideal usage guidance.

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
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 disclosing safety and side effects. It implies a read-only operation via 'Full HTML source' and 'get', but does not explicitly state that it is non-mutating or free of side effects. It also does not mention any error behavior or return format beyond 'source'.

Agents need to know what a tool does to the world before 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 only two sentences: the first states the primary function and parameter, the second provides an alternative. It is front-loaded and contains no redundant or filler 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 simple one-parameter tool with no output schema, the description covers the action, the parameter source, and the alternative for non-desktop contexts. This is sufficient for an agent to select and invoke the tool correctly, similar to high-scoring examples like get_calls.

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 the only parameter (pageId) as 'Page ID from web_navigate', and the description simply restates 'by pageId'. This adds no meaningful semantic value beyond the schema, warranting the baseline score of 3 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 clearly states the tool returns the 'Full HTML source' of the 'DESKTOP grid browser page', identified by a pageId. It also explicitly distinguishes itself from the device-oriented counterpart (webpage_get_dom), making the purpose and 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?

The description gives explicit usage guidance by stating 'Not a device' and provides a direct alternative for phones/tablets: 'use webpage_get_dom (by udid)'. This tells the agent exactly when to use this tool and when to choose a sibling.

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)
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 disclosure. It reveals that this is a desktop browser (not mobile), returns a pageId, and is the entry point for web_* tools. However, it does not disclose any failure behavior, timeouts, or whether navigation is synchronous, 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?

The description is two sentences, front-loaded with the most critical context (desktop browser, NOT mobile), and every sentence earns its place. It efficiently conveys purpose, return value, and an explicit alternative 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?

The tool is simple and the description covers its core behavior, return value, and usage context. It even provides a clear alternative for real-device automation. Given no output schema, the description adequately explains what to expect (a pageId). Minor gaps like error cases are not critical for this basic navigation 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%, and the schema already documents the 'url' and 'browser' parameters with descriptions. The description adds no additional parameter-level semantics beyond confirming that it navigates to a URL. Per rubric, baseline 3 is appropriate when schema covers all 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 clearly states the tool's function: it opens a page and navigates to a URL, returning a pageId used by other web_* tools. It also explicitly distinguishes itself from the webpage_* tools by noting it operates on a desktop browser, not a phone or tablet.

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 this tool versus alternatives: it states that for real-device browser automation, the webpage_* tools should be used instead. It also implies a workflow by mentioning the returned pageId is consumed by every other web_* tool, making it the entry point for browser automation on the desktop grid.

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)
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 notes the operation wraps history.back() and is cross-platform, which is useful. However, it doesn't disclose edge-case behaviors such as what happens when history is empty (no-op vs error), whether the operation fails silently, or if it requires a currently-open page context. For a navigation operation, moderate additional context would be 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?

Two sentences, zero waste. The first sentence states the purpose precisely, and the second adds cross-platform scope. Every word serves a 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?

For a relatively simple navigation action with 100% schema coverage and a single required parameter, the description is adequately complete. It doesn't address return value or empty-history behavior, but for a straightforward browser-navigation tool with good schema documentation, this is near-complete. Slightly more on failure behavior would fully close the 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 parameters are already well-documented. The description adds value by framing the tool's main requirement (udid) implicitly and noting the platform scope, but it doesn't add meaning about parameters beyond what the schema provides. The 'platformVersion' parameter is described as 'Ignored (kept for compatibility)' in the schema itself, so the description doesn't need to add 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 clearly states the verb+resource: 'Navigate the device browser back one entry in its session history (history.back())'. It specifies the exact underlying mechanism (history.back()) and confirms cross-platform support for both iOS Safari and Android Chrome. It's unambiguous and distinguishes from related navigation tools like webpage_forward, webpage_reload, and device_navigate_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 description notes it 'works on BOTH iOS Safari and Android Chrome', giving clear platform context. However, it doesn't explain when one would choose this over sibling tools like device_get_browser_url or session_back, nor does it mention when not to use it (e.g., if no history exists). It provides clear context but no explicit exclusions or alternative naming.

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)
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 details that iOS uses WebKit's dialect rather than full CDP, that Chrome-only domains fail with -32601, and that `*.enable` reports success without proving domain existence. It also specifies the browser-only scope, which prevents misuse on device/native contexts.

Agents need to know what a tool does to the world before 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 longer than typical descriptions, every sentence serves a distinct purpose: purpose, scope, parameter format, alternative guidance, and platform-specific limitations. The structure uses a clear 'IMPORTANT, iOS:' label for critical caveats. It is dense but not 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 complexity (raw protocol access, dual-platform differences, no annotations or output schema), the description covers the essential context: what it does, when to use it, platform-specific failure modes, and scope boundaries. It explains absent domains and the misleading nature of `*.enable` on iOS, which an agent would need to avoid incorrect usage. No critical omission is apparent for making an informed 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 provides 100% coverage with descriptions for all five parameters, so the baseline is 3. The description adds an example of `method` ('Emulation.setGeolocationOverride') and reinforces that `params` is the command's parameter object, but this largely duplicates schema information. It does not introduce significant new parameter semantics beyond what the schema 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+resource: 'Send a raw DevTools-protocol command to the browser page on a device and return its reply.' It positions itself as an escape hatch for capabilities no dedicated tool wraps, listing example domains (Emulation, Performance, CSS, Animation, DOM mutation), which clearly distinguishes it from sibling tools like webpage_click or webpage_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?

It explicitly states 'Prefer a dedicated tool when one exists: they handle setup ordering, lifecycle and teardown that a bare command does not,' giving clear when-to-use vs alternative guidance. It also warns against using `*.enable` as a capability probe on iOS, providing a concrete when-not-to behavior. The scope limitation to the browser (never device/native apps) further clarifies appropriate use.

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. LIMITATION: cannot clear HttpOnly or other-origin cookies (that needs the CDP Network domain, unavailable on the iOS bridge). Returns { cleared } — the count of cookies expired.

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)
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 disclosure. It does an excellent job: it clearly states the mechanism (document.cookie), the scope (NON-HttpOnly, current page origin), the platform auto-detection (iOS Safari or Android Chrome), the limitation (cannot clear HttpOnly or other-origin cookies, and why — CDP unavailable on iOS), and the return format ({ cleared }). That's comprehensive behavioral 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 front-loaded. The purpose is stated first, followed by the limitation in clear caps-label, then the return value. Every sentence earns its place, and information density is high without being verbose.

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 mutation tool with no annotations and no output schema, the description is complete: it explains the mutation scope, the critical limitation, and the return value. The 4 parameters are all individually documented in the schema at 100% coverage, so no additional parameter context is needed. This is a fully self-sufficient 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?

Schema description coverage is 100%, so the baseline is 3 even with no parameter info in the description. The description adds meaningful context about the udid parameter being a device selector and pageId being auto-picked when omitted, which enriches the parameter understanding beyond the schema's basic descriptions. This exceeds 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 a specific verb+resource combination: 'Expire all NON-HttpOnly cookies visible to the current page origin in the device browser.' It clearly distinguishes itself from cookie-related siblings like webpage_set_cookie, ios_safari_cookies, and android_devtools_cookies by emphasizing 'current page origin' scope and the NON-HttpOnly limitation versus the CDP-based sibling tools that can handle HttpOnly cookies.

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 implicitly conveys when to use this tool versus alternatives: it states the limitation that HttpOnly or other-origin cookies require the CDP Network domain (which is unavailable on iOS), pointing the agent toward more capable sibling tools for those cases. While it doesn't explicitly name alternative tools, it clearly defines the boundaries of when this tool is appropriate (cookie clearing within the current page's non-HttpOnly scope).

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)
Behavior5/5

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

With no annotations, the description carries full burden and excels: it discloses scrolling, clickability checks, retry/timeout, fallback to mouse/.click(), error semantics, force behavior, first-visible-element selection, and platform-specific trust (iOS real tap vs Android synthesized). 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?

The text is long but every sentence earns its place. It front-loads the basic purpose, then layers behavior, platform differences, fallback/error semantics, and parameter nuances 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?

Given 10 parameters, platform-specific behavior, and no output schema, the description is remarkably complete. It covers event trust, fallback order, timeout behavior, failure cases, force limitations, and reports the `via` field, making it self-sufficient.

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 baseline is 3. But the description adds substantial meaning beyond the schema: it explains how ref survives layout shifts, how force behaves with hidden/covered elements, how pointerType affects event delivery and trust, and how selector multiple matches resolve.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships 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 'Click an element in the device browser, by CSS selector or by a `ref`' — a specific verb and resource. It distinguishes this from sibling tools like web_click or device_tap by explicitly stating it works on both iOS Safari and Android Chrome and is coordinate-based.

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 context: when to use (device browser on iOS/Android), when to pass force, and which pointer type to choose. It clearly indicates this is for device browser vs native app taps, but it does not explicitly name alternative tools or give a 'use X instead' exclusion.

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)
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 does disclose that it works on both iOS Safari and Android Chrome and mentions the underlying implementation (history.forward()), which adds some transparency. However, it doesn't disclose what happens when there's no forward entry in history (no-op vs. error), any side effects, or whether it requires an active browser session.

Agents need to know what a tool does to the world before 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-formed sentence that packs the core action, cross-platform scope, and implementation detail without waste. Every element 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 navigation action with full schema coverage, the description conveys the core operation adequately. However, it doesn't address edge cases (empty forward history), return behavior, or provide guidance on when to prefer this over alternative navigation tools like device_navigate_url or the session_* family. Given the tool has 4 params and no output schema, slightly more context about expected outcomes would improve 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 all 4 parameters have descriptions in the schema (udid, pageId, socket, platformVersion). The description adds the platform scoping context. At 100% coverage, baseline is 3, and the description provides minimal additional parameter meaning beyond what the schema already documents.

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

Purpose4/5

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

The description clearly states the verb (navigate) and resource (device browser session history) with the specific action (history.forward()). It also adds cross-platform scope (iOS Safari and Android Chrome). While it distinguishes from siblings by naming the specific action, it doesn't explicitly contrast with the sibling webpage_back - though the name is self-explanatory on that front.

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 explains what it does but provides no when-to-use context or exclusions relative to alternative tools like device_navigate_url, ios_navigate_url, or webpage_back. It doesn't mention prerequisites (e.g., that a session history must exist) or that it only works within a browser context vs. general navigation tools.

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)
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 'value' is null when the attribute is absent, and that it throws only when the target does not resolve. It also notes platform auto-detection. It does not mention behavior on multiple matches or invalid selectors, but the important edge cases are covered for a read-only getter.

Agents need to know what a tool does to the world before 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. It opens with the core purpose, adds more detail on targeting, and covers edge cases. Every sentence carries meaningful information, and the structure is 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, the description effectively conveys what is returned (an attribute value, with 'value' being null when absent) and how errors behave. It is reasonably complete for an agent to select and call the tool, though it could explicitly state the output structure or mention multiple matches. Overall, it provides enough context for a read-only attribute 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 description coverage is 100%, so a baseline of 3 is appropriate. The description adds minimal extra parameter meaning beyond the schema, though it does explain the selector/ref distinction and auto-detection, which slightly reinforces but does not fundamentally extend the schema's rich per-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 clearly states the verb 'Get one attribute' and the resource (element in the device browser page), with specific attribute examples and selection methods (CSS selector or ref). It implicitly distinguishes from siblings like webpage_get_text by focusing on attributes, which is a specific and 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 Guidelines3/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 a single attribute) and explains how to target an element (via selector or ref), but it does not explicitly compare with alternatives such as webpage_get_text or webpage_get_dom, nor does it state exclusions or conditional usage. This is functional but not explicit.

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)
Behavior5/5

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

With no annotations provided, the description carries full responsibility for disclosing behavior. It transparently covers cross-platform operation (Web Inspector/CDP), return format (documentElement.outerHTML or selector-matched element), automatic Safari launch on iOS, and the 100,000-character output cap with truncation notice. This is thorough 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.

Conciseness4/5

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

The description is moderately sized but information-dense. It front-loads the main purpose and uses parentheticals for supporting details. Each sentence contributes useful information (platform support, return type, iOS behavior, output limit, alternatives). Slightly verbose with the enumerated protocol details, but overall efficient.

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

Completeness5/5

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

Given the tool has no output schema and no annotations, the description fully specifies the return value and output constraints. It also explains platform support, selector behavior, and points to native alternatives. This is comprehensive enough for an agent to understand what the tool returns, when to use it, and its limitations.

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 with descriptions for all five parameters, so the baseline is 3. The description adds minimal extra parameter meaning—mentioning that platform is auto-detected from udid and that selector returns the first matching element's outerHTML. However, the schema already documents these aspects, so the description does not significantly 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?

The description clearly states the tool's verb and resource: 'Get the rendered outer HTML of the web page open in the device browser'. It also distinguishes itself from native UI hierarchy tools and works on both iOS and Android, making its scope unambiguous relative to 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 states when to use this tool (for web-page HTML) and provides direct alternatives for native UI: 'for a NATIVE app UI hierarchy use device_page_source (Android) or ios_page_source (iOS)'. It also clarifies platform auto-detection and iOS-specific launch behavior, giving clear usage context.

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)
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 trimmed innerText, auto-detects iOS Safari vs Android Chrome, and throws if the target does not resolve. It doesn't cover multi-element or waiting behavior, but for a read-only getter the key 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.

Conciseness5/5

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

Three sentences, tight, with the main purpose in the first sentence. 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?

Covered: target selection (selector/ref), platform scope, use case, failure mode, and explicit sibling alternatives. The parameter schema is fully documented, and the return type is obvious (string).

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 detailed property descriptions. The description adds value by explaining the ref/selector trade-off: '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.'

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships 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 the visible text (innerText, trimmed) of an element in the device browser page, by CSS selector or by a ref.' It also names alternatives ('For full HTML use webpage_get_dom; for many elements at once use webpage_snapshot'), which distinguishes it 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?

It explicitly says when to use it: 'For reading a label/status/result after an action.' It also tells what to use instead for other needs, naming specific sibling tools like webpage_get_dom and webpage_snapshot.

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)
Behavior5/5

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

With no annotations, the description carries the full transparency burden. It discloses that the tool scrolls the element into view, dispatches a mouseMoved to its center, sets isTrusted:false on iOS, and throws if the target does not resolve. These details give the agent concrete expectations about 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?

Four short sentences cover action, use case, iOS behavior, and error condition without filler. Each sentence contributes operational value, resulting in a dense but well-structured description.

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

Completeness5/5

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

Despite no output schema, the description conveys the essential behavior, platform support, error behavior, and relationship to webpage_click. The tool is a simple hover action with minimal return expectations, so the description is complete 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?

Input schema has 100% parameter descriptions, so baseline is 3. The description adds context about ref usage and platform auto-detection, but the schema already explains ref/selector relationships and optional parameters. No significant added meaning beyond 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 phrase 'Hover the pointer over an element in the device browser page' and specifies targeting by CSS selector or ref. It explicitly ties usage to revealing hover menus/tooltips before webpage_click, distinguishing it from click and scroll 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?

It says 'use it to reveal hover menus/tooltips before webpage_click,' providing clear when-to-use and a direct connection to a sibling tool. The guidance is explicit about the operation's purpose and sequencing relative to clicks.

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_mitm_mock_add / ios_mitm_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"}
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")
Behavior5/5

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

With no annotations, the description fully carries behavioral disclosure. It explains what happens in each mode (mock serves response without leaving device; abort fails request), that routes apply immediately and survive navigation, that native requests are never intercepted, and that nothing device-wide is changed.

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 bit verbose but each sentence adds necessary context: modes, scoping, exclusions, and alternatives. It is front-loaded with the main action and structured logically, though it could be tightened without losing 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 high parameter count (14) and no output schema, the description provides strong contextual grounding: it explains when to use the tool, what it does, its limitations, and how it compares to alternatives. It does not describe the return value, which is a minor gap given 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.

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 already described. The description adds value by explaining the behavioral semantics of 'mock' and 'abort' modes, which enriches the meaning of mode, body, status, and headers beyond their raw schema descriptions.

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

Purpose5/5

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

The description clearly states the tool adds or updates a mock/abort rule for browser requests, with specific modes and behavior. It distinguishes itself from native request interception tools by explicitly naming android_mitm_mock_add and ios_mitm_mock_add as alternatives for native code.

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 context: it only intercepts browser/WebView requests, not native code, and explicitly recommends using android_mitm_mock_add / ios_mitm_mock_add instead for native requests. It also clarifies the effect is page-scoped and no device-wide changes or certificates are involved.

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)
Behavior5/5

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

With no annotations, the description carries full behavioral burden. It discloses the destructive nature ('Remove ALL'), the un-arming of interception, and the consequence ('restores completely normal networking'). This gives the agent a clear understanding of side effects and postconditions, going beyond a simple 'clear mocks' 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?

Two sentences with no fluff. The first sentence states the core action and scope; the second provides the trigger ('when finished') and the outcome. Every word adds value, and the most important information (what it removes) 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 single-parameter tool with no output schema, the description fully covers what the tool does, when to call it, and the resulting state. It is complete and leaves no significant gaps. No output schema exists, so no return-value explanation is needed.

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

Parameters3/5

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

Schema description coverage is 100% for the single parameter udid, so the schema already explains it. The description does not add additional parameter-level detail beyond referencing 'this device', which is consistent with the schema. Baseline 3 is appropriate since 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 clearly states the action: 'Remove ALL browser routes for this device and un-arm interception.' It specifies the resource (browser routes) and the scope (ALL), distinguishing it from mock_remove which targets specific routes. The verb 'remove' is precise and matches 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 explicitly says 'Call this when finished' and explains the effect ('restores completely normal networking'), providing clear usage context. It does not mention alternatives like webpage_mock_remove for selective removal, but the 'ALL' emphasis implies when full cleanup is needed. Could have added when-not-to-use, so slightly below a 5.

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)
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 transparency burden. It discloses that only browser/WebView requests are affected, that native code is never intercepted, that nothing device-wide is changed, and that no certificate is installed. It also mentions match order, giving insight into how routes are resolved.

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 relatively concise, with four sentences each providing relevant scope or safety information. Some redundancy exists ('not intercepted and never will be'), and the second and third sentences could be merged, but all content is valuable for correct tool selection.

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 (one parameter, no output schema), the description covers all essential context: what is listed, the ordering, the web-only scope, and the absence of device-wide side effects. It is sufficiently complete for an agent 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.

Parameters3/5

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

The input schema has 100% coverage for the single udid parameter, describing it as 'Device id (Android serial or iOS UDID)'. The tool description adds no additional parameter-specific detail beyond the schema, 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's function: 'List the browser mock/abort routes currently registered for this device' with order. It distinguishes from sibling tools by emphasizing 'WEB CONTENT ONLY' and explicitly excluding native app code interception.

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 when-not guidance: native app requests are NOT intercepted, so you should not use this tool for native traffic. It also notes that no device-wide changes or certificates are involved, implying a non-invasive choice. However, it stops short of naming alternative sibling tools like android_mitm_mock_list for native traffic.

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)
Behavior4/5

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

No annotations provided, so the description carries the full burden. It discloses a non-obvious side effect (device automatically un-armed when last route is removed) and explains the rationale, which is valuable behavioral context beyond the basic 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 concise sentences, front-loaded with the primary action. Every word adds value, with no filler 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 simple 2-parameter removal tool, the description explains the main behavior and the important auto-un-arm side effect. It lacks explicit return-value/error details, but these are not essential for invocation, making it adequately 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 both parameters are described adequately. The description adds no extra meaning beyond 'by id' and does not elaborate on the 'id' or 'udid' parameters further, 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?

Clear verb 'Remove' plus resource 'browser route' and id-based targeting. Distinguishes from sibling mock tools by specifying browser scope and single-route removal, and the auto-un-arm note adds purpose 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?

Usage is implied for removing a single route by id, but no explicit when-to-use or alternatives comparison. The context of browser-specific mocking is inferred from the name and sibling tools, but the description doesn't state it directly.

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)
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 lists the exact fields returned (armed state, attached target, active routes, hit counters) and explains how to interpret them. It discloses that a non-matching route shows mocked: 0, providing useful behavioral insight beyond a bare status report.

Agents need to know what a tool does to the world before 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 every sentence adds value. The second sentence provides a practical verification tip 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?

The tool has only one parameter and no output schema, so the description's enumeration of the reported data (armed state, page target, active routes, hit counters) suffices. It gives a complete picture of what the agent will learn from invoking 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 only parameter, udid, is fully described in the input schema with 'Device id (Android serial or iOS UDID)' giving 100% coverage. The description adds no additional parameter 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 uses a specific verb ('Report') and names the exact resource: browser interception status, page target, active routes, and live hit counters. It clearly distinguishes this from sibling mock management tools by focusing on status/verification rather than add/remove/list 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 provides clear usage context: check counters to confirm a mock is actually firing, with the specific example that a non-matching route shows mocked: 0. It does not explicitly name alternative tools, but the use case is well implied and actionable.

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)
Behavior5/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 excels by detailing trusted vs. synthesized events, focus movement implications, fallback behavior on iOS, and form submission handling. This is exemplary transparency for a tool with significant platform-specific nuances.

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, but every clause provides critical behavioral detail. It's front-loaded with the core purpose and then expands into platform specifics. Slightly verbose but each sentence earns its place 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 cross-platform browser key tool, the description covers all major behavioral aspects: trusted events, focus behavior, fallbacks, and form submission. Even without an output schema, it tells the user what to expect via the `via` field. This is comprehensive 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%, so parameters are already well-documented. The description adds minimal parameter-specific meaning beyond noting the response's `via` field, but doesn't explain individual parameters further. Baseline 3 is appropriate 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 clearly states the tool's purpose: pressing a key in the device browser, specifically for iOS Safari and Android Chrome. It distinguishes itself from generic key tools by focusing on browser-level key events and cross-platform behavior, 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 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 this tool: when needing to send key presses in a browser context on iOS/Android devices. It doesn't explicitly name alternatives, but the detailed browser-specific behavior implies its niche compared to sibling tools like device_key or ios_key_hid.

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

webpage_reloadBInspect

Reload the page open in the device browser (CDP Page.reload) — 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)
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 mentions 'works on BOTH iOS Safari and Android Chrome' and references CDP Page.reload, but doesn't disclose behavior like: whether page state is lost, whether it waits for full load before returning, potential side effects, or whether the reload is cached vs full. For a mutation-type tool with zero annotation coverage, this is thin but not empty.

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?

Single efficient sentence that packs the action, target (device browser), mechanism (CDP Page.reload), and platform scope (iOS Safari + Android Chrome). No redundant phrases. Could arguably earn a 5, but the 'works on BOTH' phrasing is slightly redundant with the mechanism note.

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?

This is a simple single-action tool with 100% schema coverage and no output schema. The description covers the core action well. However, for a resource-mutating tool (reload can lose page state) with no annotations, it would benefit from noting edge cases like whether the reload happens synchronously or whether it works on non-browser contexts. Adequate but not comprehensive.

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 4 parameters are documented in the schema. The description adds essentially no parameter-level detail beyond the schema (it mentions CDP and cross-platform support but not parameter specifics). Baseline 3 is appropriate since the schema does the heavy lifting and the description doesn't degrade anything.

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+resource ('Reload the page open in the device browser') and explicitly mentions it works on both iOS Safari and Android Chrome, which is useful cross-platform scoping. However, it doesn't distinguish itself from siblings like android_devtools_navigate or ios_safari_navigate, though the reload action is fairly distinct from navigation. The CDP technical reference adds specificity.

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 it (when you need to reload the current browser page on either platform) but doesn't explicitly state when NOT to use it or name alternatives. Given the large sibling list with many navigation/devtools tools, clear exclusions would help but the cross-platform note partially narrows scope.

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)
Behavior5/5

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

With no annotations, the description fully discloses behavior: Android captures content, iOS includes Safari chrome/status bar, selector/ref are Android-only and ignored on iOS with a note returned, and output is a JPEG image. This goes beyond minimal expectations and covers both platform differences 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.

Conciseness4/5

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

The description is compact and front-loaded with the main purpose. The two sentences pack significant detail without redundancy, though the second sentence is long and could be split for readability, but 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?

Given the tool's complexity (platform differences, 6 parameters, no output schema), the description covers the core behavior, return type, and platform-specific limitations. It doesn't explain error scenarios like invalid selectors, but the provided details are sufficient for most use 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 semantic context beyond the schema by clarifying that selector/ref are Android-only and ignored on iOS, and that platformVersion is ignored for compatibility, which helps the agent avoid incorrect usage.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Screenshot the web page in the device browser (iOS Safari or Android Chrome, auto-detected).' This is a specific verb+resource combination that distinguishes it from sibling screenshot tools like device_screenshot and web_screenshot by scoping to the mobile browser.

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 (mobile web screenshots) and clearly explains platform-specific behavior, e.g., Android can capture elements with selector/ref, while iOS cannot and returns a full device frame. It doesn't explicitly name alternatives, but the context is strong enough for an agent to choose this tool over generic screenshot tools.

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)
Behavior4/5

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

With no annotations provided, the description takes on the transparency burden. It discloses key behaviors: exact alignment, both locator methods (CSS selector or ref), and cross-platform support. Minor gaps exist regarding error handling and prerequisites, but the core scrolling behavior is conveyed.

Agents need to know what a tool does to the world before 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 sentence that packs action, alignment, locator methods, and platform scope without any filler. Every clause contributes essential information.

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

Completeness2/5

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

The description fails to clarify that at least one of `ref` or `selector` is required, especially since the schema only requires `udid`. It also lacks any mention of return values or failure behavior. These are significant gaps for a tool with 6 parameters and no output schema.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds minimal extra meaning beyond the schema, only clarifying that selector and ref are alternative locators. No additional parameter semantics 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 clearly states the action ('Scroll an element into view'), specifies alignment ('block/inline: center'), and distinguishes itself from sibling scroll tools by noting it operates in the device browser on both iOS Safari and Android Chrome. This is a specific verb+resource with clear 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 for when to use this tool: within a device browser on iOS or Android, as opposed to native-app scrolling. It does not explicitly name alternatives or exclusions, but the browser/platform scope is unambiguous.

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)
Behavior4/5

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

With no annotations, the description carries the transparency burden. It clearly discloses that the tool sets the select value, dispatches input and change events, and is React/controlled-safe. It also states error behavior (throws for non-select or no matching option) and auto-detection of browser type, giving the agent a solid understanding 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 concise and well-structured, with the core action front-loaded. Each sentence adds essential information: purpose, matching criteria, side effects, and error conditions. There is no redundancy or irrelevant detail, achieving high information density.

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 adequately covers the operation, matching criteria, side effects, and errors, but lacks information about the return value or confirmation of success. Since there is no output schema and no annotations, this gap leaves the agent uncertain about what to expect after invocation. Essential preconditions like element visibility or page state are also omitted, making the description sufficient but not fully 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?

The schema already covers all parameter descriptions (100% coverage), so the baseline is 3. The description adds meaningful semantics beyond the schema by specifying that exactly one of value/label/index must be provided, which is a crucial constraint not stated in the individual parameter descriptions. This enhances the agent's ability to construct valid inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships 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: choosing an option in a <select> dropdown on a mobile browser page. It specifies the input methods (CSS selector or ref) and matching criteria (value, label, or index), distinguishing it from generic click/type tools. The scope (iOS Safari or Android Chrome) is also explicit.

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 selecting dropdown options but does not explicitly state when to use it over alternatives like webpage_click or session_execute. It mentions throwing if the target is not a <select>, which hints at its specific purpose, but there is no direct guidance on when to choose this tool or when to avoid it.

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)
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 well. It discloses the default visibility behavior, state annotations (disabled/checked/expanded), live refs that survive markup changes, and platform compatibility. This is thorough for a read-only tool, though it omits error/rate-limit 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 efficient, front-loading the core purpose and workflow. Every sentence contributes actionable information—output format, platform support, parameter tips, and behavior—without unnecessary verbosity.

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?

Since there is no output schema, the description explains the return format and state markers, which is crucial. It also covers platform support, usage workflow, and key configuration options, making it reasonably complete for a snapshot tool with eight 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%, setting a baseline of 3. The description adds value by explaining the purpose of `interactiveOnly` and `selector` beyond their schema descriptions, helping the agent choose appropriate scoping. It does not add meaning to the other six params, but the baseline is already sufficient.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships 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 a page as a structured tree of visible elements, specifies the output format (`role "name" [ref=eN]`), and highlights platform support for iOS Safari and Android Chrome. It differentiates from siblings by explaining how refs integrate with interaction tools, 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 Guidelines4/5

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

The description gives strong usage guidance: 'START HERE before acting' and explains how refs feed into webpage_click/type/hover. It also advises when to use interactiveOnly or a selector. However, it does not explicitly name alternative tools or when-not-to-use scenarios, 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.

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)
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 platform-specific behaviors: Safari can list and drive tabs but cannot open or close them, and it 'error[s] on iOS rather than pretending.' It also warns that stale tabs accumulate across sessions, adding practical behavioral insight 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 a single, well-structured paragraph that front-loads the core purpose, then systematically covers platform constraints and a usage tip. Every sentence earns its place, with no redundancy or irrelevant detail, making it both concise and information-dense.

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 is remarkably complete. It covers cross-platform behavior, error handling, the relationship between actions and parameters, and cleanup guidance. It even addresses the lack of switching on Safari by explaining direct targeting via pageId. The only minor gap is not describing the exact return structure of `list`, but it does mention that it returns a pageId per tab, which is adequate for the tool's complexity.

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

Parameters4/5

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

Schema description coverage is 100%, so all six parameters are already documented. The description adds extra semantic value by explaining how pageId from `list` is used to target tabs in other webpage_* tools, clarifying the relationship between actions and the cross-platform implications of pageId. This goes beyond the individual parameter descriptions, though it doesn't detail every parameter's syntax.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships 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+resource: 'List, open, switch and close browser tabs on the device.' It also distinguishes itself from sibling tools by focusing on tab management and explaining that it consolidates what would otherwise be several tools into one.

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 each action: `list` works on both iOS Safari and Android Chrome, while `new`, `select`, and `close` are Android-only and error on iOS. It also provides cross-tool guidance by noting that pageId can be passed to other webpage_* tools, and advises closing stale tabs, giving clear usage context and alternatives.

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"). 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)
selectorNoCSS selector for the target element. Provide this or `ref`.
platformVersionNoIgnored (kept for compatibility)
Behavior5/5

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

No annotations, so the description fully carries behavioral disclosure. It details trusted keystrokes on iOS with the event sequence, the JS-value fallback with isTrusted:false, the bubbling events, the 'via' response field, and the clear behavior. This is comprehensive 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 front-loaded with the core action, then progressively explains platform differences, event behavior, and response format. Each sentence adds essential behavioral detail; 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?

Given the tool's 8 parameters and no output schema, the description adequately covers key operational nuance (platform-specific behavior, event trust, response via field, clear option). It omits deeper discussion of dependencies like platformVersion being ignored, but the rich schema covers param definitions, making this 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?

Schema coverage is 100%, so baseline is 3. The description adds context for clear (default append) and mentions ref/selector selection, but these align with existing schema descriptions without introducing substantial new parameter-level 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 states a specific verb+resource: 'Type text into an input/textarea in the device browser'. It also distinguishes itself from siblings by explicitly covering 'BOTH iOS Safari and Android Chrome' and by targeting device-side typing, differentiating from generic send_keys 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 clear usage context: 'use this for anything that reacts to typing rather than just reading .value' signals when the native keyboard path is preferable. It does not explicitly name alternatives but implies the JS-value path for controlled inputs, which is sufficient context though not exhaustive.

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)
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 an excellent job. It discloses polling interval (250ms), single CDP session behavior (no reconnect per tick), non-throwing return of {found, waitedMs}, and the 'ANY match counts' semantics for multiple elements. These are non-obvious behavioral traits that significantly help an agent predict outcomes.

Agents need to know what a tool does to the world before 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, well-structured, and front-loaded with the core purpose. Each sentence adds critical information: cross-platform support, polling mechanics, return behavior, and edge-case semantics. There is no fluff 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?

Despite lacking an output schema, the description explicitly states the return shape ({found, waitedMs}). It also covers platform compatibility, polling behavior, timeout semantics, and the 'any match counts' ambiguity. This is more than sufficient for an agent to select and invoke the tool correctly for most scenarios.

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 all parameters with 100% coverage, so baseline is 3. The description adds value by explaining the 'visible' parameter's behavior (requires client rects/offsetParent or position:fixed), the effect of timeoutMs, and the multi-element match behavior. This contextualizes the parameters beyond their basic type 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's purpose: poll for an element by CSS selector in a device browser. It specifies the resource (element in browser) and the verb (poll/wait), and distinguishes from sibling tools by noting it works on both iOS Safari and Android Chrome via CDP. This separates it from native UI wait tools like 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 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: when waiting for a web element to appear or become visible in a mobile browser. It does not explicitly mention alternatives or give when-not-to-use guidance, but the 'in the device browser' scope and cross-platform claim imply the appropriate context. No exclusions are stated.

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
Behavior4/5

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

With no annotations, the description carries the burden of disclosure. It transparently states the target scope (DESKTOP grid browser page), the input (pageId), and the output encoding (base64 PNG). While it doesn't explicitly mention read-only safety, the nature of a screenshot implies no side effects, and the description adds enough context beyond the schema to be informative. It falls short of a 5 because it doesn't mention any potential limitations (e.g., viewport capture, page load 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 two sentences, front-loaded with the action, and every part earns its place. It states the action, scope, input, output, and a key usage distinction without any 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?

Given the tool's simplicity (one parameter, no output schema), the description provides sufficient context: what it does, what it returns, and when to use an alternative. It is complete for an agent 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.

Parameters3/5

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

Parameter pageId is fully documented in the schema with 'Page ID from web_navigate', and the description simply refers to 'by pageId' without adding further detail. Since schema coverage is 100%, the baseline of 3 applies; the description doesn't compensate with additional syntax or format 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 tool screenshots the DESKTOP grid browser page by pageId, and specifies the output format (base64 PNG). It distinguishes itself from device screenshots and directly points to the sibling alternative webpage_screenshot for phone/tablet, making 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 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' and instructs to use webpage_screenshot (by udid) for phone/tablet screens, providing clear when-to-use guidance and a named alternative. This exceeds the typical usage guidance.

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
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 output is an accessibility tree as text, which is a key behavioral trait, and clarifies it is for the desktop grid browser. It does not mention error conditions or explicitly state read-only behavior, but that is largely implied by the 'snapshot' terminology.

Agents need to know what a tool does to the world before 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: the first states what the tool does and its purpose, the second explicitly contrasts with the device alternative. No filler, 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?

Given the low complexity—one simple parameter and no output schema—the description fully covers what the tool returns (accessibility tree as text), when to use it, and how it differs from the sibling. It is sufficient for an agent to select and invoke correctly without needing 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 already documents the single parameter (pageId) with a clear description. The tool description adds context by specifying that the pageId refers to a desktop grid browser page, reinforcing the scope defined in the schema. With 100% schema coverage, this is effective.

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

Purpose5/5

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

The description clearly states it returns the accessibility tree of the desktop grid browser page as text, with a specific resource (by pageId) and purpose (finding elements, understanding layout). It explicitly distinguishes from webpage_snapshot, making the tool's 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 direct usage guidance by saying 'Not a device' and then names the exact alternative: 'the equivalent for a phone or tablet is webpage_snapshot (by udid)'. This tells the agent exactly when to use this tool versus a sibling.

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
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 adds useful context about the environment (desktop grid) and the identifier (pageId), but does not disclose potential side effects (e.g., whether it replaces existing text, requires element visibility, or returns a confirmation). This is a moderate 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 two sentences with high information density. The first sentence states the core function, and the second sentence adds a critical exclusion and alternative. 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 3-parameter action tool with no output schema, the description provides sufficient context: it states what it does, when to use it, and the key alternative. It lacks only minor behavioral details like return value or failure mode, which are not critical for a straightforward typing action.

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 (pageId, selector, text) already described meaningfully. The description adds no additional parameter-specific semantics beyond clarifying that pageId refers to the desktop grid browser context, but the schema already notes it comes from web_navigate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships 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 ('Type'), the resource ('element'), and the specific context ('DESKTOP grid browser by pageId'). It also explicitly distinguishes itself from the sibling tool webpage_type, 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 states when to use this tool ('DESKTOP grid browser') and when not to, providing a direct alternative ('use webpage_type (by udid)') for real phone or tablet devices. This gives clear usage guidance differentiation.

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

Discussions

No comments yet. Be the first to start the discussion!

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    GTM signal intelligence suite for AI agents. Six tools: hiring signals, tech stack detection, company-to-LinkedIn resolution, ICP scoring, job board scanning, and a combined signals aggregator. Built for outbound sales workflows.
    11
    737
    1
    MIT
  • F
    license
    -
    quality
    C
    maintenance
    Browse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.

View all MCP Servers

Try in Browser

Your Connectors

Sign in to create a connector for this server.

Resources