Robot Actions — Remote Device Control
Server Details
Drive real Android & iOS devices and web browsers from natural language for mobile + web QA. 290+ tools across device control, app management, automation sessions, browser automation, and flow recording / replay. Bearer-auth — get a token at robotactions.com → Profile → API Tokens.
- Status
- Unhealthy
- Last Tested
- Transport
- Streamable HTTP
- URL
Tool Definition Quality
Average 4.2/5 across 333 of 333 tools scored. Lowest: 2.5/5.
The set contains near-identical duplicate families: web_* and playwright_* expose ~15 pairs of the same desktop-grid-browser operations (web_get_text/playwright_get_text, web_reload/playwright_reload), and screenshot/log/network/mock capabilities each have 5-8 entry points (device_screenshot vs android_mjpeg_screenshot vs ios_screenshot vs ios_fast_screenshot vs web_screenshot vs webpage_screenshot vs session_screenshot). Many individual descriptions carefully draw boundaries (devtools vs traffic, HID vs session), but an agent cannot reliably distinguish web_* from playwright_*, and ios_screenshot/ios_fast_screenshot/ios_mjpeg_screenshot blur together.
The prefix scheme is broken: Android functionality is split arbitrarily between android_* and device_* (device_screenshot vs android_mjpeg_screenshot), the desktop browser gets two parallel prefixes (web_* and playwright_*), and verbs vary across equivalents (device_navigate_url vs web_navigate vs ios_safari_navigate). session_* uses bare verbs (session_url, session_back), and the same concept gets different names (ios_clipboard_get_hid vs ios_get_pasteboard; device_screen vs ios_orientation).
333 tools is an extreme count by any measure — far beyond the 50+ threshold — and much of the bulk is duplicative (the web_*/playwright_* pairs alone double ~15 slots) or out-of-scope for a device-control server (TestRail, Jira, AzDO, agent memory, secret variables, feedback). Even granting that remote device control + test automation is a broad domain, this surface will devastate agent context budgets and is impossible to navigate coherently.
The core device-control and test-automation domain is remarkably thorough: Android and iOS each have full interaction, app-lifecycle, file, network/proxy, performance, crash, accessibility, recording, and replay coverage, with CRUD lifecycles for flows, suites, app uploads, TestRail cases, and visual-review baselines. Minor gaps exist at the margins — Jira/AzDO lack update/transition/comment operations, and iOS cannot open/close tabs — but the central workflows have no dead ends.
Available Tools
334 toolsagent_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.
| Name | Required | Description | Default |
|---|---|---|---|
| block | Yes | Markdown block to append. Will be separated from existing content by a blank line. |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | Full memory content (Markdown). Pass empty string to clear. |
Tool Definition Quality
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.
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.
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.
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.
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.
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), actionable controls the screen reader cannot name at all (no text, no description, no labelled child — the classic unlabelled icon button), descriptions that redundantly restate the element's type, state or action ("Submit button" — the screen reader says "button" already), and controls reporting a class assistive technology cannot interpret. Each finding carries the element's label, class and pixel rect — the rect centre is directly tappable with device_tap. Pass scroll:true to keep scrolling and re-auditing until nothing new comes into view, so content below the fold is covered too. IMPORTANT LIMITS, so findings are read correctly: tap-target results are a screening signal, not a verdict, because a control can legitimately extend its own tap area in a way this audit cannot observe; only elements actually drawn on screen are examined; and an element made tappable purely by an ancestor's touch dispatch is invisible here unless its own class is a control class. Contrast and text-size are NOT checked — that needs data this audit cannot read.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device serial number (UDID) | |
| checks | No | Checks to run; omit for all. "TouchTargetSize" = tap targets below the recommended minimum; "DuplicateClickableBounds" = several tappable elements on identical bounds; "MissingClickAction" = a button-class element exposing no click action; "SpeakableTextPresent" = an actionable control with no text, content description or labelled descendant; "RedundantDescription" = description restates type/state/action; "ClassName" = control reports an uninterpretable class. | |
| scroll | No | Defaults false. When true, audit the screen, scroll down, and audit again — repeating until a pass reveals no new elements or maxScrollSteps is reached — then report the deduplicated union. This CHANGES THE SCREEN: it scrolls the app and does not scroll back, and on a lazily-loaded list it will trigger loading. Leave it off when the app must not be disturbed. | |
| maxScrollSteps | No | Only with scroll:true. Maximum scrolls before stopping regardless (default 6, max 20). | |
| localeIsEnglish | No | Defaults 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. |
Tool Definition Quality
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 scroll:true changes the screen and does not scroll back, triggers loading on lazy lists, only examines drawn elements, cannot observe ancestor-touch-dispatched tap areas, and tap-target results are a screening signal not a verdict. It also states exactly what each finding contains (label, class, pixel rect). No behavioral surprises are left hidden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence earns its place. It is front-loaded with the core purpose, then logically progresses through what findings look like, how to use scroll, and important limits. The structure (purpose → usage → findings → boundaries) makes the length feel necessary and well-organized, not bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex audit tool with no output schema, the description is exceptionally complete. It describes the return value (findings with label, class, pixel rect), how to act on it (rect center is tappable), what checks are included, what limitations exist, and what is intentionally not covered (contrast, text-size). An agent can confidently decide to invoke this tool and correctly interpret its results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema coverage is 100%, the description adds substantial meaning beyond parameter names and types. It explains what each check actually detects (e.g., DuplicateClickableBounds = 'screen reader announces the same thing twice'), gives concrete examples, and explains the side effects of scroll:true and the meaning of localeIsEnglish. This significantly enriches the schema's terse enum descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear verb+resource: 'Run an accessibility audit on the CURRENT screen of an Android device.' It immediately distinguishes this tool from its iOS sibling and names the device platform. It also aligns with Google's Accessibility Scanner rules, giving a concrete, recognizable scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states a prerequisite: navigate to the desired screen first via device_tap_by_text or device_launch_app. It also instructs when to use scroll:true ('to cover content below the fold') and when not to ('Leave it off when the app must not be disturbed'). Limitations explicitly say what this tool does NOT do (contrast/text-size), steering users away from inappropriate use.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| pkg | Yes | App package (or full component pkg/activity), e.g. com.android.settings | |
| runs | No | Cold launches to average (default 3) | |
| serial | Yes | Android device serial (from `device_list`) |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| serial | Yes | Android device serial (from `device_list`) |
Tool Definition Quality
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Crash id from android_crash_analytics | |
| serial | Yes | Android device serial (from `device_list`) |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device serial number (UDID) | |
| limit | No | Max 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. | |
| format | No | Output format: "summary" (default) returns { records, bodiesOmitted? }; "har" returns a HAR 1.2 document | |
| pageId | No | Target page id (auto-picked when omitted) | |
| socket | No | Abstract unix socket name (default: chrome_devtools_remote) | |
| throttle | No | 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: no connectivity. | |
| blockUrls | No | Block 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. | |
| triggerJs | No | JavaScript 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. | |
| durationMs | No | Collection window in milliseconds (default: 5000, max: 30000) | |
| onlyErrors | No | Only failed / 5xx records | |
| extraHeaders | No | Extra 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. | |
| urlSubstring | No | Only records whose URL contains this substring — target the requests you care about | |
| includeBodies | No | Fetch 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. |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device serial number (UDID) | |
| pageId | Yes | Target page id (from android_devtools_list_pages) to close | |
| socket | No | Abstract unix socket name (default: chrome_devtools_remote) |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device serial number (UDID) | |
| pageId | No | Target page id (auto-picked when omitted) | |
| socket | No | Abstract unix socket name (default: chrome_devtools_remote) | |
| triggerJs | No | JavaScript 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. | |
| durationMs | No | Collection window in milliseconds (default: 3000, max: 15000) |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device serial number (UDID) | |
| pageId | No | Target page id (auto-picked when omitted) | |
| socket | No | Abstract unix socket name (default: chrome_devtools_remote) |
Tool Definition Quality
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.
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.
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.
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.
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.
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, bounding box {x,y,w,h} and a visibility flag. USE suggested — the locator worth writing (id, then test-id, name, aria-label, placeholder), each verified unique before it is offered, with playwright giving the same target in getByRole/getByTestId form. css and xpath are diagnostic fallbacks, not recommendations: the CSS path is an nth-of-type chain over layout classes and does not belong in a page object. When suggested is null nothing stable exists — act via ref and treat the missing test-id as the real finding. Set includeStyles=true to also return a curated set of computed styles per element. Omit pageId to auto-select the visible/active page.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device serial number (UDID) | |
| limit | No | Max elements to return (default 150) | |
| pageId | No | Target page id (auto-picked when omitted) | |
| socket | No | Abstract unix socket name (default: chrome_devtools_remote) | |
| selector | No | CSS selector to scope extraction (default: interactive/meaningful elements) | |
| includeStyles | No | Include a curated set of computed styles per element (default false) |
Tool Definition Quality
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 what data is returned (tag, text, attributes, bounding box, visibility, locators) and explains the locator fields in detail. However, it does not explicitly state that the operation is read-only or non-destructive, which is important for an extraction tool. The description is partially transparent but misses a definitive statement 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: it opens with the primary purpose and high-level return data, then dives into the locator field details, usage warnings, the `includeStyles` option, and the `pageId` auto-select. While dense, every sentence adds value. It could be slightly more concise by separating output format details from usage guidance, but it is efficient and logically ordered.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no output schema, the description does a good job of conveying what the agent can expect: for each element, it lists the fields (tag, trimmed text, key attributes, classes, bounding box {x,y,w,h}, visibility flag) and explains the locator fields (`suggested`, `playwright`, `css`, `xpath`) in depth. It also covers the default element selection (interactive/meaningful) and the `includeStyles` option. It lacks explicit statement about the return format (e.g., an array of objects) and does not describe pagination behavior beyond the limit parameter. Still, it is fairly complete for a complex tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (all 6 parameters have descriptions), so the baseline is 3. The description adds minimal value beyond the schema: it clarifies that omitting `pageId` auto-selects the active page, but does not elaborate on defaults (e.g., `limit` default of 150 is not stated). The locator output explanation is not directly about parameters. Overall, the description does not significantly enhance parameter understanding beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool extracts 'locator-friendly element data from a page on the device for building Playwright/Selenium locators.' It specifies the verb (extract) and the resource (element data). However, it does not explicitly differentiate from sibling tools like `device_locators_for` or `ios_safari_elements`, which could share similar purposes. The purpose is clear and specific but lacks sibling distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides actionable guidance on how to use the output: it directs users to prefer the `suggested` locator over `css`/`xpath`, explains what to do when `suggested` is null, and advises omitting `pageId` for auto-selection. This helps the agent interpret results correctly. However, it does not offer when-to-use or when-not-to-use guidance relative to other element extraction tools, which keeps it from 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_evaluateAInspect
Evaluate a JavaScript expression in the context of a page running on the device via CDP. Enables Runtime, then calls Runtime.evaluate. Returns the result value, any exception details, and pageId/pageUrl identifying the tab it actually ran on — check those if a result looks like it came from the wrong page. Omit pageId to auto-select the active tab (after a navigate, that is the tab the navigate landed on).
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device serial number (UDID) | |
| pageId | No | Target page id from android_devtools_list_pages (auto-picked when omitted) | |
| socket | No | Abstract unix socket name (default: chrome_devtools_remote) | |
| expression | Yes | JavaScript expression to evaluate | |
| awaitPromise | No | Whether to await a returned Promise (default: true) | |
| returnByValue | No | Return the result as a serializable value (default: true) |
Tool Definition Quality
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 enabling Runtime is a side effect, that results include pageId/pageUrl to catch wrong-page execution, and that omitting pageId auto-selects the active tab with a navigation-specific behavior. This is rich behavioral context, though it doesn't address potential error conditions or side effects of the JS execution itself.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the core purpose, and each sentence adds value—purpose, return behavior, and pageId auto-selection. No fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, but the description covers the key return fields (result, exception details, pageId/pageUrl) and the wrong-page caveat. It could be more complete with error cases or prerequisites, but for a 6-param tool with 100% schema coverage, it provides enough context 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.
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 minor extra context for pageId (auto-select after navigate), but does not add meaningful semantics for other parameters like awaitPromise or returnByValue beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it evaluates a JavaScript expression in the context of a page on the device via CDP, with a specific verb and resource. It distinguishes itself from sibling tools by mentioning the CDP mechanism, the Runtime enablement, and the return of pageId/pageUrl to identify the actual target tab.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear context: use this to evaluate JS in a page on an Android device, and it explains how pageId selection works (auto-selecting the active tab, especially after a navigate). It does not explicitly mention alternatives, but the context and name make the intended use clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device serial number (UDID) | |
| pageId | No | Target page id (auto-picked when omitted) | |
| socket | No | Abstract unix socket name (default: chrome_devtools_remote) | |
| selector | No | Optional CSS selector — returns outerHTML of the first matching element, or null if not found |
Tool Definition Quality
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.
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.
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.
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.
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.
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. Returns id, type, title, url, active and visible per target, newest-active FIRST. active: true marks the ONE page every other tool resolves to when you omit pageId — you do NOT need to list tabs and pass an id just to act on the current tab, only to act on a DIFFERENT one. visible is a WebView-only hint and is null for ordinary browser tabs on every browser tested; use active, not visible. Stale tabs accumulate across sessions; close unwanted ones with android_devtools_close_page.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device serial number (UDID) | |
| socket | No | Abstract unix socket name (default: chrome_devtools_remote) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses important behavioral nuances not visible in annotations (which are absent): it explains the meaning of 'active: true' as the default target for other tools when pageId is omitted, clarifies that 'visible' is a WebView-only hint and null for ordinary browser tabs (with tested evidence), and warns that stale tabs accumulate across sessions. These are non-obvious behavioral traits that materially affect how the agent should use the output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is highly efficient: every sentence carries meaningful information, covering purpose, output format, key field semantics, usage caveats, and cleanup recommendation in just a few lines. It is front-loaded with the core function and then provides critical details without redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity, the absence of annotations, and the absence of an output schema, the description is exceptionally complete. It explains the return fields, the ordering (newest-active first), the semantic meaning of 'active' and 'visible', the default resolution behavior of sibling tools, and the recommended follow-up action for stale tabs. This is more than sufficient for 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.
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 socket) documented in the schema. The description does not add much beyond the schema for these parameters; the richness of the description is focused on output semantics and usage guidance instead. Since the schema already covers parameter meaning, a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists debuggable pages/targets on a device and specifies the exact fields returned (id, type, title, url, active, visible). It immediately distinguishes itself from sibling tools by using the specific verb 'list' and the resource 'pages/targets', and further differentiates from related tools like android_devtools_close_page and ios_safari_list_pages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit practical usage guidance: it explains when you do NOT need to use this tool (acting on the current tab, omit pageId) and when you DO need it (acting on a different tab). It also directs handling of stale tabs by referencing android_devtools_close_page as the cleanup tool. This goes beyond basic context and includes specific exclusions and alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
android_devtools_mock_addAInspect
Add (or update in place, when id matches an existing route) a mock/abort rule for Chrome/WebView requests on this device. mode "mock" (default) serves the given status/headers/body without the request leaving the device; mode "abort" fails it so the page sees a network error. Routes apply immediately and survive navigation. WEB CONTENT ONLY: this intercepts requests made by browser/WebView pages. Requests made by native app code are NOT intercepted and never will be by this tool. Nothing device-wide is changed and no certificate is installed — the effect is scoped to the page. For requests made by native app code use android_traffic_mock_add instead.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Route id to update in place; omit to auto-generate a new one | |
| body | No | Response body for mode "mock" (text, or base64 when bodyEncoding is "base64") | |
| mode | No | "mock" serves a canned response (default); "abort" fails the request | |
| udid | Yes | Device id (Android serial or iOS UDID) | |
| method | No | Optional HTTP method filter (e.g. "GET"/"POST"); matches any method when omitted | |
| pageId | No | Pin routing to a specific page id (from the *_list_pages tool). Omit to follow the active page automatically across navigations and new tabs — recommended. | |
| socket | No | Abstract unix socket name (default: chrome_devtools_remote) | |
| status | No | HTTP status to serve for mode "mock" (default 200) | |
| delayMs | No | Latency injected before responding/failing, in ms (clamped to 60s) | |
| enabled | No | Whether the route is active (default true) — disabled routes are kept but ignored | |
| headers | No | Response headers for mode "mock", as {headerName: value} — e.g. {"content-type": "application/json"}. On iOS a `charset` in content-type is NOT applied to the response: an HTML body with non-ASCII characters must declare it in the document (e.g. <meta charset="utf-8">) or it will be decoded with the default encoding and render as mojibake. | |
| matchUrl | Yes | URL pattern to match against the request's full URL | |
| matchType | No | How matchUrl is interpreted against the request URL (default "contains") | |
| bodyEncoding | No | Encoding of `body` (default "text") |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully covers behavioral traits: modes (mock/abort), effect scope (web content only, no device-wide change, no certificate installed), immediacy, navigation survival, and the idle field recommendation. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
All sentences are valuable and front-loaded. The description starts with the core action and then efficiently adds critical distinctions (update capability, modes, scope, native app alternative) without redundancy. Appropriate length for 14 parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with 14 parameters, no output schema, and no annotations, the description covers purpose, scope, modes, parameter usage, and alternatives thoroughly. Minor omission: no explicit mention of what the tool returns (e.g., route ID) but this is acceptable given lack of output schema requirement.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
While schema coverage is 100%, the description adds substantial context for many parameters: id for update, mode differences, pageId recommendation, bodyEncoding base64, headers iOS charset caveat, delayMs clamping, matchType defaults. This far exceeds baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it adds or updates a mock/abort rule for Chrome/WebView requests on the device. It distinguishes from sibling tools like android_traffic_mock_add (for native code) and other platform-specific mock tools, and notes the scope is web content only.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use (for browser/WebView requests) and when not (native app code), directs to android_traffic_mock_add as alternative, and explains the update behavior when id matches an existing route.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device id (Android serial or iOS UDID) |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device id (Android serial or iOS UDID) |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Route id to remove (from *_mock_list) | |
| udid | Yes | Device id (Android serial or iOS UDID) |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device id (Android serial or iOS UDID) |
Tool Definition Quality
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.
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.
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.
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.
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.
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_fpsAInspect
FPS / jank stats for a package via dumpsys gfxinfo (total/janky frames, jank %, frame-time percentiles, missed vsyncs).
| Name | Required | Description | Default |
|---|---|---|---|
| pkg | Yes | App package name, e.g. com.android.settings | |
| serial | Yes | Android device serial (from `device_list`) |
Tool Definition Quality
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.
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.
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.
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.
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.
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_mjpeg_screenshotAInspect
PREFERRED fast screenshot of an Android device via the ALREADY-RUNNING shared video stream. Returns a single JPEG frame decoded from the live video stream — no fresh full-resolution screen grab is spawned. Use this for routine per-action screen checks; it is much faster than device_screenshot, so make it your default for iterating on a flow. Image is captured at the device physical resolution (the stream is never downscaled), so pixel positions match device_tap coords 1:1 — same invariant device_screenshot promises. Reserve device_screenshot for when you need the bundled labeled-elements list or a full-fidelity image. Image-only (no page-source bundling) to keep this call fast.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device serial number (UDID) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does well: it reveals that the image is captured at physical resolution, never downscaled, and pixel positions match device_tap coords, plus image-only returns to keep the call fast. It also implies the prerequisite that the stream must already be running. However, it does not explicitly state what happens if the stream is not running or the output encoding, but it covers the key behavioral tradeoffs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately sized but front-loaded with 'PREFERRED fast screenshot' and every sentence adds distinct value: performance rationale, resolution invariance, and alternative guidance. It is not overly verbose, though it could be slightly tightened. It earns a 4, not a 5, because there is some redundancy around 'faster' and 'fast' and the 'PREFERRED' emphasis is repeated thematically.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has only one parameter, no output schema, and no annotations, the description effectively covers the essential context: what it returns (a JPEG frame), the resolution guarantee, and when to use the alternative. It does not specify the exact return representation (e.g., base64 vs binary) or error behavior if the stream is not running, which would make it fully complete, but it is quite thorough for a simple screenshot tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already fully documents the single parameter 'udid' with 'Device serial number (UDID)' (100% coverage). The description does not add any extra meaning beyond that, so the baseline of 3 is appropriate; the schema is sufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly says 'PREFERRED fast screenshot of an Android device via the ALREADY-RUNNING shared video stream' and 'Returns a single JPEG frame decoded from the live video stream — no fresh full-resolution screen grab is spawned.' This clearly identifies the specific verb (screenshot), resource (Android device), and mechanism (video stream), and distinguishes it from device_screenshot. The 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives direct usage direction: '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.' It also explicitly reserves device_screenshot for cases needing 'the bundled labeled-elements list or a full-fidelity image.' This is an explicit when-to-use and when-not-to-use with a named alternative.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| pkg | No | Focus processes containing this package; else top by CPU | |
| serial | Yes | Android device serial (from `device_list`) | |
| intervalMs | No | Sample interval ms (default 1000) |
Tool Definition Quality
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| sessionId | Yes | Session id from android_performance_record_start |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| pkg | No | Filter to processes whose name contains this package | |
| topN | No | Top-N by CPU (default 15) | |
| serial | Yes | Android device serial (from `device_list`) |
Tool Definition Quality
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.
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.
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.
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.
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.
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_traffic_flowsAInspect
Snapshot recent DECRYPTED HTTPS flows (request/response) captured since android_traffic_start. Each flow: method, url, host, status, contentType, req/resp sizes, durationMs. Set includeBodies to also return headers + (truncated) request/response bodies. Filter by urlSubstring or onlyErrors. Returns the most recent limit flows.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max flows to return, most recent first-matched (default 100) | |
| serial | Yes | Android device serial (adb serial) | |
| onlyErrors | No | Only 5xx / connection-error flows | |
| urlSubstring | No | Only flows whose URL contains this substring | |
| includeBodies | No | Include headers + bodies (each body capped at 32000 chars). Default false. |
Tool Definition Quality
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 flows are decrypted, bodies are truncated, and it returns the most recent limit flows. It also mentions the 'snapshot' nature. Missing details like what happens if capture isn't started, but the prerequisite is implied. Overall, strong 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the core purpose, then details output fields and configurable options. Every sentence adds value, with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description lists the returned flow fields (method, url, host, status, etc.) and explains filtering and body inclusion. It implies the need to call android_traffic_start but doesn't explicitly state 'call this first.' The sibling list and tool name partially compensate. Overall, it is quite 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are fully documented. The description adds only minor clarifications, such as 'truncated' for bodies and the filtering intent, but the schema already explains parameter meanings (e.g., onlyErrors as '5xx / connection-error flows', includeBodies as 'bodies capped at 32000 chars'). Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly names the tool's function: 'Snapshot recent DECRYPTED HTTPS flows (request/response)' with a specific verb and resource. It identifies key output fields (method, URL, status, sizes, duration) and distinguishes itself from sibling tools like android_traffic_status or android_devtools_capture_network by focusing on captured HTTPS flows since a start event.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context: it must be used after android_traffic_start, and explains configuration options (includeBodies, urlSubstring, onlyErrors). It does not explicitly mention when to choose this over alternatives like android_devtools_capture_network, but the 'since android_traffic_start' dependency implies the intended workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
android_traffic_mock_addAInspect
Add (or update in place, if id matches an existing route) a mock/abort rule that short-circuits future matching HTTPS requests on this device inside the TLS-inspecting proxy — the request never reaches the real server. mode "mock" (default) returns the given status/headers/body; mode "abort" kills the connection so the app sees a network failure. Requires TLS capture to already be running on this device (android_traffic_start) — routes are stored per-device and take effect live, no restart needed. Certificate-pinned apps cannot be intercepted at all (same limit as capture itself), so a route targeting pinned traffic will simply never match.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Route id to update in place (replaces the existing route); omit to auto-generate a new one | |
| body | No | Response body to inject for mode "mock" (text, or base64 when bodyEncoding is "base64") | |
| mode | No | "mock" injects a canned response (default); "abort" kills the connection | |
| method | No | Optional HTTP method filter (e.g. "GET"/"POST"); matches any method when omitted | |
| serial | Yes | Android device serial (adb serial) | |
| status | No | HTTP status to inject for mode "mock" (default 200) | |
| delayMs | No | Latency to inject before responding/aborting, in ms (clamped to 60s server-side) | |
| enabled | No | Whether the route is active (default true) — disabled routes are kept but ignored | |
| headers | No | Response headers to inject for mode "mock", as {headerName: value} — e.g. {"content-type": "application/json"} | |
| matchUrl | Yes | URL pattern to match against the request's full URL | |
| matchType | No | How matchUrl is interpreted against the request URL (default "contains") | |
| bodyEncoding | No | Encoding of `body` (default "text") |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden and discloses key behaviors: requests never reach the server, mock vs abort modes, live per-device storage without restart, and the pinned-app limitation. This is notably transparent for a state-changing proxy tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three well-structured sentences: core function, mode explanation, then prerequisites/limits. Every sentence adds valuable information without redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex 12-parameter tool without an output schema, the description covers the main behaviors, prerequisites, and limitations. Missing return value info and potential error conditions, but the overall context is strong.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds semantic context for mode/status/headers/body by explaining mock vs abort behavior, and clarifies id-based update-in-place, going beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action (add or update in place), resource (mock/abort rule), and context (TLS-inspecting proxy for device HTTPS traffic). It distinguishes from sibling list/remove tools by detailing the short-circuiting behavior and update semantics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a clear prerequisite (requires TLS capture via android_traffic_start) and a limitation (pinned apps won't be intercepted), giving context for when this tool is appropriate. However, it doesn't explicitly name alternative mocking tools or state when not to use it beyond the pinned-app case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
android_traffic_mock_listAInspect
List the mock/abort routes currently configured for this device (see android_traffic_mock_add).
| Name | Required | Description | Default |
|---|---|---|---|
| serial | Yes | Android device serial (adb serial) |
Tool Definition Quality
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 accurately describes a listing operation, which implies non-destructiveness, but does not mention side effects, device connection requirements, or behavior 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is concise and front-loaded, with a useful pointer to the add tool. There is no redundant or unnecessary wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple listing tool with one documented parameter and no output schema, the description sufficiently covers purpose and scope. It could provide more detail on what 'mock/abort routes' entails, but overall it is complete for the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, 'serial,' is fully described in the schema as 'Android device serial (adb serial)' (100% coverage). The description adds no additional semantic value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'List' and names the resource 'mock/abort routes,' clearly indicating a read-only inspection tool. It also references the sibling 'add' tool, helping to distinguish its role as a query operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for viewing currently configured routes, and the cross-reference to android_traffic_mock_add provides context, but it does not explicitly state when to use this tool versus alternatives like remove or status.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
android_traffic_mock_removeAInspect
Remove one mock/abort route by id, or every route on this device when all is true. Returns the resulting route list.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Route id to remove (from android_traffic_mock_add or android_traffic_mock_list) | |
| all | No | Remove every route configured for this device instead of a single one | |
| serial | Yes | Android device serial (adb serial) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the burden of disclosing behavioral traits. It states the side effect (removal) and return value (resulting route list), which is essential. However, it does not mention error behavior (e.g., invalid id, no routes configured) or whether removal affects ongoing traffic. This is a basic disclosure, not deeply informative. It does not contradict any annotations since there are none.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the primary action and uses backticks for parameters. It contains zero filler or redundant information. Every word contributes to understanding the tool's purpose, conditionally, and return value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is a simple removal operation, and the description covers the core behavior (removal scoping) and return value (resulting list). The schema covers all parameters, and the description references id sources indirectly through schema descriptions. For a low-complexity tool without an output schema, this is nearly complete; the only missing element is explicit error/edge-case handling, which is non-critical for selection and invocation in most scenarios.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with each parameter (id, all, serial) having a clear description. The tool description adds minimal semantic value beyond the schema—it reiterates 'by id' and 'when all is true' but does not explain parameter syntax, precedence rules, or edge cases. Per the rubric, baseline 3 applies when schema does the heavy lifting, and the description does not notably exceed that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: removing one mock/abort route by id or all routes on a device. It uses a specific verb ('Remove') and resource ('mock/abort route'), and distinguishes itself from siblings by mentioning the 'all' flag and resulting route list. This is unambiguous and differentiates from related tools like android_traffic_mock_add or android_traffic_mock_list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly conveys when to use the tool (removing one specific route by id or clearing all routes via 'all=true'). It does not explicitly compare with alternatives, but the id reference to android_traffic_mock_add/list in the schema and the self-contained behavior give adequate usage context. A slight deduction for not explicitly stating when not to use it (e.g., if only a subset of routes needs removal) or clarifying relationship with list/add tools in the main description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
android_traffic_startAInspect
Start TLS inspection on an Android device: brings up a per-device TLS-inspecting proxy and points the device at it, so subsequent HTTPS traffic is DECRYPTED and captured (works for native apps too, unlike Chrome DevTools). If com.robotactions.dpc is Device Owner, the proxy AND CA are set SILENTLY (installMode "dpc", zero on-device interaction); otherwise it falls back to an adb global proxy (installMode "manual") and the app must already trust user certs. Then drive the app and read flows with android_traffic_flows. The app must trust user certificates (network_security_config, usually a debug build); certificate-pinned apps will not decrypt.
| Name | Required | Description | Default |
|---|---|---|---|
| serial | Yes | Android device serial (adb serial) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral disclosure. It explains the proxy setup, silent CA installation in DPC mode, fallback to manual adb proxy, and prerequisites around certificate trust. It does not explicitly state that device network settings are modified, but this is strongly implied by 'points the device at it' and the mention of an adb global proxy.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is detailed but front-loaded with the primary action, then explains modes, prerequisites, and limitations. Every sentence adds value, though it is longer than necessary; it could be tightened slightly without losing important information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (proxy setup, CA installation, fallback modes, prerequisites, and limitations) and the absence of an output schema, the description covers all essential context: what it does, how it behaves in different modes, requirements for success, and next steps. It is complete for an agent to decide and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'serial' is fully described in the schema as 'Android device serial (adb serial)', providing 100% coverage. The description adds no additional information about the parameter beyond identifying the device as Android, 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: starting TLS inspection on an Android device by bringing up a proxy and pointing the device at it. It distinguishes itself from Chrome DevTools by noting it works for native apps, and the scope (per-device) is explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use this tool (to decrypt/capture HTTPS traffic for native apps) and mentions an alternative (Chrome DevTools) by contrast. It also outlines the workflow of driving the app and reading flows with android_traffic_flows. However, it does not explicitly list scenarios where this tool should NOT be used beyond the certificate-pinning limitation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
android_traffic_statusAInspect
Report whether TLS inspection is running for an Android device, its proxy mode (dpc/manual), and how many flows are buffered.
| Name | Required | Description | Default |
|---|---|---|---|
| serial | Yes | Android device serial (adb serial) |
Tool Definition Quality
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 contents of the report and implies a read-only operation ('report'), but it does not explicitly state that it has no side effects, or mention prerequisites (e.g., device connection, existing traffic session), or describe error/edge-case behavior. It provides some context but not deep 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that immediately states the tool's purpose and enumerates the three report components. There is no wasted wording, repetition, or tangential information; every phrase earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, but without an output schema the description must convey return information. It lists the three components (TLS inspection running, proxy mode, buffered flow count) but does not specify their format (e.g., booleans vs strings) or any prerequisites/relationship to traffic start/stop. It is minimally adequate but leaves gaps in expecting an agent to understand the full response structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers the only parameter, 'serial', with a clear description ('Android device serial (adb serial)') at 100% coverage. The description does not add any extra meaning about the parameter, so it does not exceed the schema baseline. A score of 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'report' and identifies the resource (TLS inspection status for an Android device) with three distinct output elements: running status, proxy mode (dpc/manual), and buffered flow count. This makes it clearly distinguishable from sibling tools like android_traffic_start/stop (which control traffic) and android_traffic_flows (which likely list flows).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly conveys that this is a status/read tool and implies it complements the traffic start/stop tools, but it does not explicitly name alternatives or state when not to use it. The context is clear enough for an agent to infer its role among the siblings, but explicit exclusions are missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
android_traffic_stopAInspect
Stop TLS inspection for an Android device from THIS (AI) consumer only. If the workspace UI (or another agent) also has capture open on the same device, the TLS-inspecting proxy and device proxy (and DPC CA) are left running for them — the response includes stillRunning: true in that case. Only when every consumer has stopped are the proxy killed, the device proxy/CA cleared, and buffered flows discarded.
| Name | Required | Description | Default |
|---|---|---|---|
| serial | Yes | Android device serial (adb serial) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for behavioral disclosure. It thoroughly explains conditional side effects (leaving proxy and DPC CA running for other consumers), return behavior (stillRunning: true), and full cleanup only when all consumers stop. This is rich, transparent context beyond basic function.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences long and each sentence carries meaningful information without fluff. While slightly longer than the minimal two-sentence ideal, the multi-consumer complexity justifies the length. It is well-structured, starting with the core action and then explaining conditional outcomes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a stop operation with multi-consumer semantics, the description covers the essential behavioral outcomes and even hints at response content (stillRunning). It could mention error cases (e.g., no active capture) but given the simple schema and no output schema, it is quite complete for the tool's purpose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage for the single 'serial' parameter with a clear description. The tool description does not add new information about parameters, so the baseline of 3 is appropriate; the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific function: 'Stop TLS inspection for an Android device' with a precise verb and resource. It also distinguishes the scope ('from THIS (AI) consumer only') and differentiates from siblings like android_traffic_start and ios_traffic_stop by referencing Android TLS inspection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use the tool (to stop this AI's TLS inspection on a device) and includes a detailed multi-consumer caveat. It doesn't explicitly name alternatives like android_traffic_start or android_traffic_status, but the intended usage is inferred through the consumer-only scope and sibling context.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device serial number (UDID) |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| appId | Yes | File ID from app_list |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device UDID to install on | |
| appId | Yes | File ID from app_list |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| fileData | Yes | Base64-encoded file data (max ~100MB per chunk) | |
| fileName | Yes | File name (e.g. "myapp.apk" or "myapp.ipa") | |
| userEmail | No | User email for file ownership (defaults to the authenticated user) | |
| chunkIndex | No | Chunk index (0-based) for chunked uploads | |
| totalChunks | No | Total number of chunks for chunked uploads |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
automation_build_linkAInspect
Build a clickable link to a run's detail page. Present the result as a markdown link, e.g. "View this run". The path is relative and the chat routes it internally, so the user lands on the run without losing this conversation. Offer it after explaining a run so they can see the video, screenshots and full command list for themselves. This only formats a URL — it does not check that the run exists, so call automation_session_get first if you have not already.
| Name | Required | Description | Default |
|---|---|---|---|
| sessionId | Yes | The run's session id. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full behavioral disclosure. It clearly states the tool only formats a URL, does not validate the run, uses a relative path routed internally, and produces a markdown link. This is complete for a simple, non-mutating helper.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, each contributing essential information: output behavior, example format, routing context, usage timing, and prerequisite caveat. The description is front-loaded with the core purpose and contains no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, no-output-schema tool, the description is fully sufficient. It covers the output format, example, path behavior, when to use it, and a clear prerequisite. An agent has everything needed to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema describes sessionId as 'The run's session id,' and the description adds useful semantics by showing how it appears in the URL (session_id=abc123) and in the markdown link. This goes slightly beyond the schema without being verbose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action: build a clickable markdown link to a run's detail page, and includes a concrete output example. It clearly distinguishes itself from run-inspection tools like automation_session_get by clarifying it is only URL formatting.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use guidance: offer it after explaining a run so the user can see the video, screenshots, and command list. It also names a prerequisite alternative: call automation_session_get first if the run has not been verified, and explicitly states this tool does not check existence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
automation_reportAInspect
Pre-aggregated automation statistics over a date range: pass/fail/active counts, pass rate, per-platform and per-device breakdowns, the most-failed commands and the slowest ones. USE THIS FOR ANY CHART OR TOTAL — the counts are computed server-side over the full period, so they are correct where tallying automation_sessions_list rows would silently only cover the recent window. The breakdowns map directly onto a pie or bar chart (ra-chart). Omit the dates for the default period.
| Name | Required | Description | Default |
|---|---|---|---|
| endDate | No | ISO date (YYYY-MM-DD, zero-padded) — end of the window, inclusive. | |
| platform | No | Restrict to one platform, e.g. "android" or "ios". | |
| startDate | No | ISO date (YYYY-MM-DD, zero-padded) — start of the window, inclusive. | |
| testSuite | No | Restrict to one suite. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the disclosure burden, and it does so well by explaining that counts are computed server-side over the full period and that breakdowns are chart-ready for ra-chart. It does not define exactly what the default period is or explicitly state that the operation is read-only, leaving minor transparency gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: purpose first, then use-case, then chart mapping, then the default-date tip. Every sentence earns its place with 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.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only report with zero required params and no output schema, the description covers return contents, when-to-use, correct computation, and default behavior. It could be more complete by defining the default date period and giving a sense of the response shape, but overall an agent can invoke and interpret this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the schema already documents all four optional parameters with formats and inclusive window semantics. The description adds only the default-period behavior and the date-range context, so it stays at the baseline rather than materially enhancing parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The definition states a specific deliverable: pre-aggregated automation statistics over a date range with counts, pass rate, and platform/device breakdowns. It also distinguishes itself from the sibling automation_sessions_list by explicitly saying it is the correct source for any chart or total, so an agent can tell them apart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit when-to-use directive ('USE THIS FOR ANY CHART OR TOTAL'), names the alternative (automation_sessions_list), and explains why row tallying would be wrong because it would silently cover only the recent window. It also instructs the agent to omit dates for the default period, which is concrete invocation guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
automation_session_commandsAInspect
Read the step-by-step command history of a run — every action it performed, in order, with duration and pass/fail per step. THIS IS THE DEBUGGING TOOL: to explain why a run failed, fetch it with failuresOnly=true to land directly on the failing step, then read the steps immediately before it for context. When a failed run has NO failed command — an assertion failure, where every WebDriver call succeeded and the test reported the verdict itself — failuresOnly returns no steps and a whyNoFailedSteps block naming what the run reported and which step carried it, so an empty list is never mistaken for "nothing went wrong" and you do not need to re-fetch the whole history to find out. Each entry carries the error message when the step failed, and every element-scoped step (click, sendKeys, getText…) carries the locator that found its element plus the index of the find it came from — so a click at step 24 reads as the button it clicked, not an opaque id. On a run that is still going this returns the steps completed so far, so it is also how you answer "where has it got to?". For browser runs, follow up with session_console_logs / session_network_logs using the SAME session id to see whether a JS error or a failed request explains it. Output is summarised and capped, so ask for a filtered view rather than everything — when a step needs explaining, take its index to automation_session_step for the request/response bodies and the locator behind an element id.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max steps to return (default 200, which is also the ceiling). Returns the LAST n steps, not the first — a run that fell over did so at the end. On a long run that means the window can exclude the very failure `firstFailureIndex` points at, so use failuresOnly=true to land on it instead of raising this. | |
| sessionId | Yes | The run's session id. | |
| failuresOnly | No | Return only steps that failed. Use this FIRST when debugging — it is usually one or two rows out of hundreds. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and succeeds: it discloses output summarisation and capping, the whyNoFailedSteps edge case, per-step error messages, locator provenance, behavior on still-running runs, and the fact that limit returns the last n steps. This is unusually rich 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence earns its place: it front-loads the core purpose, then covers edge cases, parameter guidance, and sibling routing without redundant filler. Dense, well-ordered, and highly informative rather than bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a debugging-history tool with no output schema, the description fully covers what the tool returns, how to handle empty results, running runs, follow-up tools, and when to drill into a single step. Nothing an agent needs to correctly select and invoke this tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema coverage is 100%, the description adds significant meaning beyond the schema: failuresOnly is described as the first debugging move, limit is explained as returning the last steps rather than the first, and its interaction with firstFailureIndex and failuresOnly is called out. The description meaningfully augments the parameter definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence names a specific verb and resource: 'Read the step-by-step command history of a run — every action it performed, in order, with duration and pass/fail per step.' It clearly differentiates from nearby siblings by declaring itself 'THE DEBUGGING TOOL' and pointing to automation_session_get and automation_session_step for adjacent concerns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use instructions: use failuresOnly=true first when debugging, explains the assertion-failure case, and states when to follow up with session_console_logs / session_network_logs. It also directs when to escalate to automation_session_step for deeper detail, so the agent gets concrete routing among alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
automation_session_getAInspect
Read one finished automation run: its verdict, the test it belonged to, the device/browser it ran on, its full desired capabilities, how long it took, and whether a video or failure snapshot exists. START HERE when the user pastes a session id or an /automation?session_id=... link and asks what happened, why it failed, or how it went. Returns verdict together with confidence: "reported" means the test itself declared the outcome and is authoritative; "inferred" means the run reported nothing and the platform guessed from how it ended — accurate most of the time but NOT a fact, so say so rather than stating it flatly. stillRunning: true means the run has not finished yet — report it as in progress, never as "no result". Only your own runs are readable; another user's session is indistinguishable from one that does not exist.
| Name | Required | Description | Default |
|---|---|---|---|
| sessionId | Yes | The run's session id — the `session_id` value from an /automation?session_id=... link, or the id shown on the run. |
Tool Definition Quality
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 explains the verdict/confidence distinction ('reported' is authoritative vs 'inferred' is a guess), instructs how to phrase it ('say so rather than stating it flatly'), warns that stillRunning:true means in-progress and must be reported as such, and discloses the access limitation that another user's session is indistinguishable from a nonexistent one.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Longer than average, yet every sentence earns its place: purpose is front-loaded, followed by trigger conditions, then the behavioral nuances (confidence, stillRunning, access limits) that an agent must know to report correctly. No filler or repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool with no output schema and no annotations, the description is complete: it enumerates the return contents, defines the semantics of ambiguous values, and covers edge cases (in-progress runs, other users' sessions). Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% — sessionId is documented in the schema with the same /automation?session_id=... source. The description adds marginal context (the agent should recognize a pasted session id as the invocation trigger), but the schema already does the heavy lifting, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — 'Read one finished automation run' — and enumerates the exact data returned (verdict, test, device/browser, capabilities, duration, video/snapshot existence). The singular-scope wording distinguishes it from siblings like automation_sessions_list (plural listing) and automation_session_step (a single step).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit entry conditions: 'START HERE when the user pastes a session id or an /automation?session_id=... link and asks what happened, why it failed, or how it went.' This clearly tells an agent when to reach for this tool, but it does not name alternatives or state when-not-to-use, 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.
automation_sessions_listAInspect
Find and list your automation runs — use for "how did my tests go", "what failed recently", "show me the runs for suite X", or to locate a run when the user describes it instead of giving an id. Every filter is applied by the SERVER across your whole history, so a suite or a session id from weeks ago is found just as reliably as one from today. total is the true number of matching runs; runs is one page of them, so page with offset rather than assuming the first page is everything. Pass search to hunt for a session id — the short 8-character form shown in the UI and the full id both work. For pass rates and aggregate breakdowns use automation_report instead of tallying these rows.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max runs per page (default 50, which is also the ceiling). | |
| offset | No | Skip this many matching runs — page through with `total` to know when to stop. | |
| search | No | Free text matched against session id, test name and suite. Use this for a pasted session id; the truncated form shown in the UI matches too. | |
| endDate | No | ISO date (YYYY-MM-DD, zero-padded) — latest run to include. | |
| platform | No | Only runs on this platform, e.g. "android", "ios", "linux". | |
| startDate | No | ISO date (YYYY-MM-DD, zero-padded) — earliest run to include. | |
| testSuite | No | Only runs from this suite (exact match). | |
| deviceUdid | No | Only runs on this device (exact udid match). | |
| failedOnly | No | Only runs that failed — reported failures AND inferred ones, matching the verdict this tool reports. |
Tool Definition Quality
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 substantial work: it reveals server-side filtering across all history, explains that `total` is the true count while `runs` is only one page, clarifies that `search` accepts both short and full session IDs, and notes that `failedOnly` includes inferred failures. It does not cover ordering, response structure beyond `total`/`runs`, or potential rate limits, so it is not a 5, but it is unusually transparent for a list tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but efficient; every sentence earns its place. Use cases are front-loaded, the server-side filtering and pagination semantics are packed into two sentences, and the routing to automation_report is the final punchline. No filler or redundant restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 9 optional parameters and no output schema, the description is nearly complete: it explains what the tool is for, how to locate runs, how pagination works, and when to use an alternative. It does not state the default sort order or mention whether results are newest-first, which would help agents interpret a page of results, but the essential operational knowledge is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaningful semantics beyond the schema: `search` matches both the 8-character UI form and full ID, `offset` is intended to paginate using `total`, `failedOnly` aligns with the tool's own verdict, and `limit`'s default is also the ceiling. This is additive value rather than schema repetition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource — 'Find and list your automation runs' — and immediately grounds it in concrete user intents ('how did my tests go', 'what failed recently'). It also differentiates itself from nearby tools by noting it is for locating runs by description rather than by ID, and explicitly routes aggregate stats to automation_report.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use signals with natural-language examples, distinguishes ID-based lookup from described-run lookup, and names the alternative for aggregate pass-rate analysis ('For pass rates and aggregate breakdowns use automation_report'). This is clear routing that leaves little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
automation_session_stepAInspect
Open ONE step of a run in full: its request body, its response body, status, timing, and — for element-scoped steps — the locator that actually found the element. Use automation_session_commands first to get the step index, then come here for the step that matters. THIS IS HOW YOU ANSWER "which element?": a click/sendKeys/getText step addresses its element by an opaque id in the URL and arrives with an empty body, so the step alone never names what it touched; this resolves that id back to the findElement that produced it and returns the using/value locator. networkDuring lists the page requests that overlapped the step, so a click that failed while an XHR was in flight is visible as such — browser runs only, and it says so explicitly when the run captured no network traffic rather than returning an empty list that reads as "nothing happened".
| Name | Required | Description | Default |
|---|---|---|---|
| index | Yes | Which step, as the `index` reported by automation_session_commands. Indexes are positions in the FULL history, so they stay valid regardless of any window that tool applied. | |
| sessionId | Yes | The run's session id. | |
| includeNetwork | No | Correlate page network traffic to this step (default true). Set false to skip the extra lookup. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, and it delivers: it reveals that element-scoped steps reference an opaque id with an empty body, that networkDuring is browser-only, and that a no-traffic run returns an explicit 'no network captured' signal rather than an empty list that could be misread. This is unusually rich 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and somewhat long, but nearly every sentence adds operational value: workflow, locator resolution, and networkDuring edge-case behavior. The emphatic 'THIS IS HOW YOU ANSWER' phrasing is stylistically noisy, but it flags the tool's most important diagnostic use case.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema and no annotations, the description covers the main return values, the required predecessor tool, the special locator-resolution behavior, and an important edge case (no network captured). An agent has enough context to call and correctly interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents sessionId, index, and includeNetwork. The description reinforces the index semantics by pointing to automation_session_commands and explains the networkDuring output behavior, but it doesn't need to add additional parameter-level detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('Open ONE step of a run in full') and enumerates what is returned: request body, response body, status, timing, and locator for element-scoped steps. It explicitly contrasts with automation_session_commands, so an agent can distinguish the two tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit sequencing: 'Use automation_session_commands first to get the step index, then come here for the step that matters.' It also identifies the special case where this tool is required to answer 'which element?', giving condition-based routing. It doesn't enumerate exclusions, but the guidance is clear enough for correct selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Optional tags. AzDO stores as semicolon-separated string internally. | |
| title | Yes | Short work item title. Keep under 255 chars. | |
| project | Yes | AzDO project name (e.g. 'MyApp', 'Digital Platform'). Case-sensitive. Use the same value visible in the AzDO URL after the org segment. | |
| description | No | Work item body. Plain text — newlines become paragraph breaks in AzDO. | |
| workItemType | No | Work 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). |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | AzDO work item ID (e.g. 12345). Positive integer. |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| wiql | Yes | WIQL query string. See https://learn.microsoft.com/azure/devops/boards/queries/wiql-syntax | |
| maxResults | No | Max work items to return (default 20, hard cap 50). Narrow WIQL for wider sweeps. |
Tool Definition Quality
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.
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.
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.
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.
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.
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' }] }.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device serial number (UDID) | |
| packageName | Yes | Android package name (e.g. com.android.chrome) |
Tool Definition Quality
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device serial number (UDID) |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device serial number (UDID) | |
| packageName | Yes | Package name to clear (e.g. com.example.app) |
Tool Definition Quality
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.
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.
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.
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.
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.
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+.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device serial number (UDID) | |
| packageName | Yes | App package name |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device serial number (UDID) |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device serial number (UDID) |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device serial number (UDID) |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device serial number (UDID) | |
| paste | No | If true, the device injects KEYCODE_PASTE right after setting the clipboard | |
| content | Yes | Text to write to the clipboard (empty string clears it) |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device serial number (UDID) |
Tool Definition Quality
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.
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.
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.
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.
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.
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, ... }.
| Name | Required | Description | Default |
|---|---|---|---|
| all | No | Tap "Close all" / "Clear all" button instead of swiping a single card | |
| udid | Yes | Device serial number (UDID) | |
| packageName | No | Package name of the app card to dismiss (e.g. com.android.chrome). If omitted, dismisses the first/frontmost card. |
Tool Definition Quality
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| x1 | Yes | Start X in physical pixels | |
| x2 | Yes | End X in physical pixels | |
| y1 | Yes | Start Y in physical pixels | |
| y2 | Yes | End Y in physical pixels | |
| udid | Yes | Device serial number (UDID) | |
| holdMs | No | Hold-in-place duration before motion in ms (default: 500) | |
| durationMs | No | Motion duration from start to end in ms (default: 400) |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| x1 | Yes | Left edge of region (physical pixels) | |
| x2 | Yes | Right edge of region (physical pixels) | |
| y1 | Yes | Top edge of region (physical pixels) | |
| y2 | Yes | Bottom edge of region (physical pixels) | |
| udid | Yes | Device serial number (UDID) | |
| limit | No | Cap on number of returned elements (default 50) |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device serial number (UDID) | |
| remotePath | Yes | Absolute path on the device, e.g. /sdcard/Download |
Tool Definition Quality
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.
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.
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.
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.
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.
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) }.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device serial number (UDID) | |
| remotePath | Yes | Absolute path of the file to pull | |
| maxSizeBytes | No | Override the default 5MB cap; max 20MB. |
Tool Definition Quality
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.
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.
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.
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.
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.
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 }.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device serial number (UDID) | |
| content | Yes | File content as a base64 string | |
| remotePath | Yes | Absolute target path on the device; must start with /sdcard/ or /data/local/tmp/ |
Tool Definition Quality
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | Visible text of the element | |
| udid | Yes | Device serial number (UDID) | |
| resourceId | No | Resource ID of the element (e.g. com.android.chrome:id/url_bar) | |
| contentDesc | No | Content description (accessibility label) of the element |
Tool Definition Quality
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| max | No | Max focus events to return (default: 30, capped at 500). Newest last. | |
| udid | Yes | Device serial number (UDID) |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device serial number (UDID) |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device serial number (UDID) |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device serial number (UDID) | |
| keycode | Yes | Android keycode number OR name (HOME, BACK, ENTER, VOLUME_UP, VOLUME_DOWN, POWER, APP_SWITCH, ESCAPE, DELETE, TAB, SEARCH, MENU) |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device serial number (UDID) | |
| packageName | Yes | Package name (com.x.y) OR display name (case-insensitive substring) |
Tool Definition Quality
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device serial number (UDID) | |
| locale | Yes | BCP-47 locale tag, e.g. "fr-FR", "es-US", "ja-JP" | |
| packageName | Yes | App package name, e.g. com.example.app |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
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.
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.
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.
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.
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.
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 the APPS installed on an Android device — things with a launcher icon, user and system alike, so Settings and Chrome are included. Installed packages that are not apps (providers, accessibility services, Bluetooth stacks) are excluded: a Pixel reports 275 installed packages of which 23 are apps. Set userOnly to drop preinstalled apps, or includeNonLaunchable for the raw package list.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device serial number (UDID) | |
| userOnly | No | Only user-installed apps, excluding preinstalled ones (default: false) | |
| includeNonLaunchable | No | Include installed packages with no launcher activity — providers, services, OEM stubs. Default false. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It does this well by revealing that both user and system apps are included, non-app packages are excluded, and includeNonLaunchable changes the result to a raw package list. The concrete Pixel example adds practical calibration; only minor behaviors like output shape remain unspecified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is tightly structured: the core definition comes first, followed by an illustrative exclusion example, then flag usage. Every sentence contributes meaningful operational guidance, and there is no redundant restatement of the tool name or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a relatively simple list tool with well-documented parameters, the description is nearly complete. It covers what is returned, what is filtered out, and how to broaden or narrow results. It lacks an explicit statement of the return value format (e.g., package names vs. app names), but this is a minor gap given the tool's purpose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents all three parameters with 100% coverage, so the baseline is 3. The description adds value by linking userOnly to 'drop preinstalled apps' and includeNonLaunchable to 'raw package list', which reinforces the semantic distinction and ties each flag back to the app-vs-package concept.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the verb 'List' and the resource 'APPS installed on an Android device', then sharpens the definition by including only launcher-icon-bearing apps and giving concrete examples like Settings and Chrome. It also contrasts apps from non-launchable packages, making the tool's exact scope unmistakable and differentiating it from package-listing operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear operating context: it explains what counts as an app, what is excluded, and how the flags alter the result. It does not explicitly name an alternative tool or state when-not-to-use this one, so it falls short of full routing guidance, but the boundary is clear enough for an agent to decide when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
device_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.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | Physical x coordinate of the element (use with y) | |
| y | No | Physical y coordinate of the element (use with x) | |
| text | No | Lookup by visible text (matches text or content-desc) | |
| udid | Yes | Device serial number (UDID) | |
| resourceId | No | Lookup by resource-id | |
| contentDesc | No | Lookup by content-desc / accessibility label |
Tool Definition Quality
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | X coordinate in physical pixels (from page_source bounds) | |
| y | Yes | Y coordinate in physical pixels (from page_source bounds) | |
| udid | Yes | Device serial number (UDID) | |
| duration | No | Hold duration in ms (default: 800) |
Tool Definition Quality
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.
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.
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.
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.
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.
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_network_infoBInspect
Get network info from an Android device: WiFi SSID, IP address, and signal strength.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device serial number (UDID) |
Tool Definition Quality
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device serial number (UDID) |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | Filter: only return elements where text or content-desc matches this string | |
| udid | Yes | Device serial number (UDID) | |
| format | No | Output format: xml (default) or description (compact readable list) | |
| search | No | Case-insensitive substring grepped across the whole node (text, content-desc, class, resource-id). Looser than `text` (which is an exact text=/content-desc= match) — use it to locate an element without knowing its exact label. | |
| className | No | Filter: only return elements matching this class name (e.g. android.widget.Button) |
Tool Definition Quality
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.
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.
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.
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.
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.
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 }.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device serial number (UDID) | |
| action | Yes | Which panel operation to perform |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device serial number (UDID) | |
| maxDurationSec | No | Auto-stop cap in seconds (default 300, max 600) |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| recordingId | Yes | recordingId returned by device_record_start |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device serial number (UDID) to release |
Tool Definition Quality
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.
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.
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.
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.
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.
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? }.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device serial number (UDID) | |
| action | Yes | on/off toggles screen power; rotate sets orientation | |
| orientation | No | Required when action="rotate"; ignored otherwise |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device serial number (UDID) | |
| includeElements | No | Include 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. |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device serial number (UDID) | |
| amount | No | Fraction of screen to scroll (0.0-1.0, default: 0.5) | |
| direction | Yes | Scroll direction |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | Visible text of the element (matches text or content-desc) | |
| udid | Yes | Device serial number (UDID) | |
| direction | No | Scroll direction (default: down) | |
| maxScrolls | No | Max scroll attempts (default: 5) | |
| resourceId | No | Resource ID (e.g. com.android.settings:id/switch_widget) | |
| contentDesc | No | Content description / accessibility label |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device serial number (UDID) | |
| script | No | Optional ISO 15924 script tag (e.g. "Hans" / "Hant" for Chinese variants) | |
| country | Yes | ISO 3166-1 alpha-2 country code, e.g. "FR", "US", "JP" | |
| language | Yes | ISO 639-1 language code, e.g. "fr", "es", "en", "ja" |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device serial number (UDID) | |
| accuracy | No | Optional accuracy in meters (default 5) | |
| latitude | Yes | Latitude in decimal degrees, e.g. 37.7749 | |
| longitude | Yes | Longitude in decimal degrees, e.g. -122.4194 |
Tool Definition Quality
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device serial number (UDID) | |
| command | Yes | Shell command to execute on the device |
Tool Definition Quality
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| x1 | Yes | Start X coordinate | |
| x2 | Yes | End X coordinate | |
| y1 | Yes | Start Y coordinate | |
| y2 | Yes | End Y coordinate | |
| udid | Yes | Device serial number (UDID) | |
| duration | No | Swipe duration in ms (default: 500) |
Tool Definition Quality
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.
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.
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.
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.
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.
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:
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | X coordinate in device tap-coord space (NOT visual screenshot pixels — apply scale = device_width / rendered_chat_width if you started from a visual estimate) | |
| y | Yes | Y coordinate in device tap-coord space (NOT visual screenshot pixels — apply scale = device_width / rendered_chat_width if you started from a visual estimate) | |
| udid | Yes | Device serial number (UDID) |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | Visible text of the element (matches text or content-desc) | |
| udid | Yes | Device serial number (UDID) | |
| maxScroll | No | Max auto-scroll attempts before giving up (default: 3) | |
| autoScroll | No | If not found on-screen, scroll to look for it before failing (default: true) | |
| resourceId | No | Resource ID (e.g. com.android.chrome:id/url_bar) | |
| contentDesc | No | Content description / accessibility label | |
| scrollDirection | No | Auto-scroll direction (default: down) |
Tool Definition Quality
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.
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.
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.
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.
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.
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 }.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device serial number (UDID) | |
| packageName | Yes | Android package name to force-stop (e.g. com.android.chrome) |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device serial number (UDID) | |
| enable | Yes | true to enable Bluetooth, false to disable |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device serial number (UDID) | |
| enable | Yes | true to enable WiFi, false to disable |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Text to type | |
| udid | Yes | Device serial number (UDID) | |
| method | No | Injection method: keys | ime | shell (default: keys — most reliable for ASCII; non-ASCII auto-falls-back to IME). | |
| pressKey | No | Keycode to press AFTER typing (e.g. ENTER, TAB, SEARCH) — handles common "type then submit" flows in one call | |
| clearFirst | No | Clear the field before typing — reads its current length from the UI and sends exactly that many backspaces (default: false) |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device serial number (UDID) | |
| packageName | Yes | Package name to uninstall (e.g. com.example.app) |
Tool Definition Quality
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | Visible text or content-desc to wait for | |
| udid | Yes | Device serial number (UDID) | |
| timeout | No | Max wait time in ms (default: 10000) | |
| interval | No | Poll interval in ms (default: 1000) | |
| resourceId | No | Resource ID to wait for (e.g. com.android.settings:id/switch_widget) |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
firebase_install_releaseAInspect
Download a build from Firebase and install it on a connected device in one step. The build is also added to the user's app library, so installing it on further devices afterwards needs only app_install. Use firebase_list_releases to pick a releaseId — "the latest build" is the first entry it returns.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device UDID to install on | |
| appId | Yes | Firebase app id, from firebase_list_apps | |
| releaseId | Yes | Release id from firebase_list_releases | |
| projectNumber | Yes | Firebase project number, from firebase_list_apps |
Tool Definition Quality
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 clearly states that the tool downloads and installs a build, and that it adds the build to the user's app library—a side effect beyond the primary action. However, it does not mention other potential behaviors such as whether it checks for device connectivity, handles authentication, or has any rate limits. Given the lack of annotations, this is a strong disclosure of the most critical side effect.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences long and wastes no words. It front-loads the core action, then adds the important side effect (library addition and future installation path), and concludes with guidance on obtaining the releaseId. Every sentence provides unique value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there are 4 required parameters, no output schema, and no annotations, the description does well to explain the tool's purpose, side effect, and parameter sourcing. It does not explain what happens if the device is not connected, what output the tool returns (e.g., success/failure), or how to handle errors. However, for a tool that combines two well-understood actions (download + install), the description is fairly complete. A mention of return behavior or error cases would push it to a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each parameter having a description that indicates its source (e.g., 'Device UDID to install on', 'Firebase app id, from firebase_list_apps'). The description adds context by explaining the tool's two-step workflow and referencing sibling tools for parameter values, but does not add additional parameter-level semantics beyond the schema. With full schema coverage, the description still earns a slightly above-baseline score because it helps the agent understand where to obtain the parameter values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a very specific action: downloading a build from Firebase and installing it on a connected device in one step. It clearly distinguishes the tool from its sibling `app_install` by noting that the build is also added to the user's app library, so subsequent installs only need `app_install`. It also references `firebase_list_releases` for obtaining a `releaseId`, making it easy for an agent to understand how to chain tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use this tool versus alternatives. It states that after the first installation, subsequent installations on other devices should use `app_install` instead. It also instructs the agent to use `firebase_list_releases` to pick a releaseId, noting that 'the latest build' is the first entry returned. This provides clear context on prerequisites and when to use sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
firebase_list_appsAInspect
List the Android and iOS apps in the connected Firebase account. Returns app id, display name, platform, and the package name / bundle id for each, plus the project number needed by the other Firebase tools. Call this first when the user names an app rather than an app id.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must cover behavioral traits. It describes the return values and implies read-only behavior (listing), but does not explicitly state whether the operation is safe, if authentication or rate limits apply, or if there are any side effects. While adequate for a simple list tool, it lacks depth beyond the obvious.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loading the core purpose and then providing a usage hint. Every sentence contributes value with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters, no output schema), the description covers the key aspects: what it lists, what it returns, and when to use it. It could optionally mention pagination or error handling, but these are not critical for a basic list operation. The description is nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters with 100% schema coverage, so the baseline is 4. The description adds no parameter-specific information, but none is needed. It correctly focuses on the output and usage context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists Android and iOS apps in the connected Firebase account, specifying the returned fields (app id, display name, platform, package name/bundle id, project number). It differentiates itself from siblings like firebase_list_releases (releases) and device_list_apps (device apps) by focusing on Firebase apps and their identifiers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Call this first when the user names an app rather than an app id,' providing clear when-to-use guidance. It also notes that the project number is needed by other Firebase tools, establishing this tool as a prerequisite in a workflow. No alternatives are mentioned, but the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
firebase_list_releasesAInspect
List recent builds distributed for one Firebase app, newest first. Returns release id, version, build number, binary type, release date, and release notes. Releases marked installable:false cannot be put on a device — the reason is included. Use firebase_list_apps to get appId and projectNumber.
| Name | Required | Description | Default |
|---|---|---|---|
| appId | Yes | Firebase app id, e.g. "1:1234567890:android:abc123" | |
| limit | No | How many releases to return (1-100, default 25) | |
| projectNumber | Yes | Firebase project number, from firebase_list_apps |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the ordering ('newest first'), the specific return fields, and the special case of 'installable:false' releases. However, it does not mention whether the tool is read-only, if there are side effects, or any auth/rate-limit constraints, leaving gaps in 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise at three sentences with no wasted words. The first sentence states the core action, the second lists return fields, and the third covers a special case and prerequisite. The structure is front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a list tool with no output schema, the description adequately covers the return fields and explains the 'installable:false' nuance. It also mentions the prerequisite tool. However, it does not address pagination despite the 'limit' parameter, and the lack of behavioral details (e.g., read-only nature) slightly reduces completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description does not add individual parameter semantics beyond what the schema already provides; it only gives a usage hint for the two required parameters. The schema itself already provides clear descriptions and examples for each parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List recent builds'), resource ('releases for one Firebase app'), ordering ('newest first'), and specifies what is returned. It distinguishes by mentioning a prerequisite sibling tool (firebase_list_apps) for obtaining required parameters, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit context for when to use this tool (listing releases for a Firebase app) and includes a prerequisite hint ('Use firebase_list_apps to get appId and projectNumber'). However, it does not explicitly state when not to use it or list alternatives (e.g., firebase_install_release for installation), though the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| componentId | Yes | Component (fragment) recording ID to look up usage for |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | X coordinate (tap/doubleTap/longPress/swipe start; assert target element) | |
| y | No | Y coordinate (tap/doubleTap/longPress/swipe start; assert target element) | |
| toX | No | Swipe end X | |
| toY | No | Swipe end Y | |
| text | No | Text to type (sendKeys) | |
| action | Yes | Action type | |
| waitMs | No | Wait duration ms (for wait action) | |
| keyCode | No | Android keycode (keyPress, e.g. 3=HOME, 4=BACK) | |
| keyName | No | Hardware button name for pressButton (e.g. 'home', 'volumeUp', 'volumeDown', 'lock'). Required when action=pressButton. | |
| expected | No | Expected value (required for textEquals and textContains assertions). | |
| attribute | No | Attribute to read for text assertions. iOS: label, value, name. Android: text, content-desc, resource-id. Defaults to platform primary text attribute when omitted. | |
| assertType | No | Assertion type (required when action=assert). exists/notExists check element presence; textEquals/textContains compare an attribute value. | |
| durationMs | No | Swipe/longPress duration ms (default 300) | |
| recordingId | Yes | Recording ID from flow_recording_start |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| recordingId | Yes | Recording ID from flow_recording_start |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| stepIndex | Yes | 1-based index of the step to delete | |
| recordingId | Yes | Recording ID from flow_recording_start |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| stepIndex | Yes | 1-based index of the COMPONENT_REF step to detach | |
| recordingId | Yes | Test recording ID containing the component reference |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| recordingId | Yes | Flow recording ID (from flow_recording_list) |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| snippetId | Yes | Component (fragment) recording ID to reference | |
| recordingId | Yes | Target test recording ID to insert the component into | |
| paramBindings | No | Optional {{name}} → value substitutions applied to the component steps | |
| afterStepIndex | Yes | 1-based index of the step to insert after (0 to insert at the start) |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | No | Filter by device UDID | |
| limit | No | Max results to return (default: 50) | |
| offset | No | Pagination offset (default: 0) | |
| platform | No | Filter by platform | |
| searchQuery | No | Search recordings by name |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | X coordinate (tap/doubleTap/longPress/swipe start; assert target element) | |
| y | No | Y coordinate (tap/doubleTap/longPress/swipe start; assert target element) | |
| toX | No | Swipe end X | |
| toY | No | Swipe end Y | |
| text | No | Text to type (sendKeys) | |
| action | Yes | Action type to record in place of the existing step | |
| waitMs | No | Wait duration ms (for wait action) | |
| keyCode | No | Android keycode (keyPress, e.g. 3=HOME, 4=BACK) | |
| keyName | No | Hardware button name for pressButton. Required when action=pressButton. | |
| expected | No | Expected value (required for textEquals and textContains assertions). | |
| attribute | No | Attribute to read for text assertions. iOS: label, value, name. Android: text, content-desc, resource-id. | |
| stepIndex | Yes | 1-based index of the step to replace | |
| assertType | No | Assertion type (required when action=assert). | |
| durationMs | No | Swipe/longPress duration ms (default 300) | |
| recordingId | Yes | Recording ID from flow_recording_start |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| platform | No | Device platform — auto-detected from recording if omitted | |
| timeoutMs | No | Max replay duration in ms (default: 300000 = 5 min) | |
| targetUdid | Yes | UDID of the device to replay on | |
| recordingId | Yes | Flow recording ID to replay (from flow_recording_list) | |
| validateElements | No | Use recorded element locators to find targets before acting (default: true; failures auto-skipped) |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max replays to return (default 25, newest first) | |
| recordingId | Yes | Flow recording ID (from flow_recording_list) |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| version | Yes | Snapshot version number to restore | |
| recordingId | Yes | Recording ID to revert |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Optional new name (overrides the name set at start) | |
| recordingId | Yes | Recording ID from flow_recording_start |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name for the recording | |
| udid | Yes | Device UDID to record on | |
| category | No | Recording category (default: test) | |
| platform | No | Platform — auto-detected from connected devices if omitted |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| replayId | Yes | Replay ID returned by flow_replay_start or flow_recording_replay |
Tool Definition Quality
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| platform | No | Device platform — auto-detected from recording if omitted | |
| targetUdid | Yes | UDID of the device to replay on | |
| recordingId | Yes | Flow recording ID to replay (from flow_recording_list) | |
| resetAppData | No | Wipe 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. | |
| validateElements | No | Use recorded element locators to find targets before acting (default: true) | |
| visualCheckEnabled | No | Opt in to AI Visual Review: capture per-step baselines and run the end-of-replay visual-analysis phase. Slower; default false. |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| replayId | Yes | Replay ID returned by flow_replay_start |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| replayId | Yes | Replay ID | |
| stepIndex | Yes | Step index (1-based, from flow_replay_summary) |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | Which image to load | |
| replayId | Yes | Replay ID | |
| stepIndex | Yes | Step index (1-based) |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| replayId | Yes | Replay ID |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| review_id | Yes | Review id from list_visual_reviews |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
insights_build_linkAInspect
Build a clickable Insights dashboard URL for a specific set of TestRail run IDs (optionally filtered by status). USE THIS when the user asks to view / open / show / explore test run data and you have concrete run IDs in mind (resolve names → IDs first via testrail_list_runs if needed). The returned URL is a relative path on this app — present it as a markdown link, e.g. [View dashboard](/insights?runs=47,103&status=failed). The tool validates every run ID exists via the caller's TestRail credential; a run the caller cannot read is reported as missing and the tool refuses to emit a URL containing only missing runs (clicking it would land on an empty dashboard, which reads as "agent gave me garbage"). Do not use this tool to summarise results — it only builds the URL.
| Name | Required | Description | Default |
|---|---|---|---|
| runs | Yes | TestRail run IDs to include in the dashboard view. At least 1, up to 10. Single-run mode renders one dashboard; multi-run mode combines them. Use `testrail_list_runs` first if you don't know the IDs. | |
| status | No | Optional status filter applied to the dashboard. One of: passed | failed | blocked | retest | untested. Omit to show all statuses. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full behavioral disclosure burden, and it does so well. It discloses that the URL is a relative path on the app, that it validates every run ID exists via the caller's TestRail credential, that unreadable runs are reported as missing, and that it refuses to emit a URL containing only missing runs (with a rationale). The main gap is not describing the output format beyond the markdown link example, but the core behavioral contract is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well-structured, front-loading the core purpose in the first sentence, then providing usage guidance and behavioral constraints in subsequent sentences. It's longer than strictly minimal but every sentence earns its place — the validation/refusal behavior and markdown-link example are genuinely useful. Could be slightly tightened but is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 2-parameter, no-output-schema tool, the description is complete: purpose, usage context, prerequisites, validation behavior, output presentation format, and exclusions are all covered. No annotations exist, so the description supplies the behavioral transparency needed. There is no meaningful information gap for an agent selecting or invoking this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both the runs and status parameters already well-described in the schema (validation constraints, enum values, default behavior). The description adds marginal value by referencing testrail_list_runs and the refusal-to-emit behavior, but does not significantly extend parameter meaning beyond the schema. Baseline 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool builds a clickable Insights dashboard URL for TestRail run IDs with optional status filtering. Distinguishes itself from siblings by explicitly stating it does NOT summarise results, and names the tool to call when IDs are unknown (testrail_list_runs). High specificity: verb (build), resource (Insights dashboard URL), and parameters.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states WHEN to use ('when user asks to view/open/show/explore test run data'), the prerequisite step (resolve names → IDs via testrail_list_runs first), and what NOT to do ('Do not use this tool to summarise results'). Names the alternative tool for ID resolution. This is model guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| rect | No | Narrow 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. | |
| udid | Yes | iOS device UDID | |
| element | No | Narrow the result to one element: its accessibility label, resolved on device the same way ios_tap_by_label resolves it. XCTest can only audit a whole app, so this filters the findings to those inside that element's bounds — it cannot surface anything the full-screen audit did not already report. Errors if the label matches nothing, rather than silently returning the whole screen. | |
| auditType | No | Convenience alias for a single-entry auditTypes, e.g. "contrast". | |
| auditTypes | No | Audit 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. |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| runs | No | Cold launches to average (default 3) | |
| udid | Yes | iOS device UDID | |
| bundleId | Yes | App bundle id to launch, e.g. com.apple.Preferences |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID |
Tool Definition Quality
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Element type filter e.g. XCUIElementTypeTextField (used only when label is given). | |
| udid | Yes | iOS device UDID | |
| label | No | Accessibility label/text of the field to clear. Omit to clear the focused field. | |
| strategy | No | Element finding strategy to try first when a label is given. |
Tool Definition Quality
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.
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.
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.
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.
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.
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 system clipboard service (no automation session needed, no app foregrounding). Returns the current UTF-8 text, or empty string. Returns "no HID available" on iOS 17.x / no-tunnel.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the transparency burden. It discloses read-only behavior, the UTF-8 return value, the empty-string case, and the specific error string 'no HID available' for iOS 17.x/no-tunnel. This is solid but leaves the exact meaning of HID and tunnel requirements somewhat vague.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise sentences with no filler. Each sentence contributes meaningful functional detail: what it does, what it returns, and when it errors.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple getter with one parameter and no output schema, the description adequately covers purpose, return behavior, and an error condition. It lacks a bit of depth around HID availability and how this tool relates to sibling clipboard getters, but remains sufficient for practical invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already fully documents the sole parameter 'udid' with a description of 'iOS device UDID'. The tool description adds no further parameter-level 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Read the device clipboard (pasteboard) via the system clipboard service', giving a specific verb and resource. It also differentiates from sibling tools by explicitly noting 'no automation session needed, no app foregrounding', which clarifies a distinctive scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context by stating that no automation session is needed and no app foregrounding is required. It does not explicitly name alternative clipboard tools or exclusion criteria, which keeps it just shy 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_clipboard_set_hidAInspect
Write the device clipboard (pasteboard) via the system clipboard service (no automation session needed, no app foregrounding). Returns "no HID available" on iOS 17.x / no-tunnel.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Text to place on the device clipboard | |
| udid | Yes | iOS device UDID |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of revealing behavior. It discloses the mechanism (system clipboard service), prerequisites (no session/no foreground), and a specific error condition ('no HID available'). It does not mention success return values or other error cases, but the disclosed details are valuable and go beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the action, and includes only essential context: purpose, method, and a known failure scenario. Every word earns its place with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter clipboard write, the description provides core context: what, how, prerequisites, and a key limitation. It does not explicitly state what happens on success, but given the lack of an output schema and the low complexity, this is a minor gap. Overall, it is nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully describes both parameters (text and udid) with concise explanations. The tool description does not add any parameter-specific detail beyond what the schema already provides, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool writes the device clipboard via the system clipboard service, with specific scope (no session, no app foregrounding). This distinguishes it from sibling tools that may require sessions, 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.
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 no session or foregrounding is desired) and notes a key limitation (iOS 17.x/no-tunnel). However, it does not explicitly name alternatives or state conditions for avoiding it, so it lacks full when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ios_contact_hidAInspect
Press-and-HOLD a single contact down at (x,y) via direct HID input (no automation session needed) WITHOUT lifting — mouse-button-down / touch-down. The contact stays held until ios_release_hid. Use for hold-then-steer interactions the automation session cannot express. Coordinates are iOS screen points. Returns "no HID available" on iOS 17.x / no-tunnel.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | X coordinate (screen points, or 0..1 fraction if norm=true) | |
| y | Yes | Y coordinate (screen points, or 0..1 fraction if norm=true) | |
| norm | No | If true, x/y (and path points) are 0..1 FRACTIONS of the screen — pass `pixelInScreenshot ÷ screenshotSize` directly (scale-free, matches the frontend, avoids point-guessing). Default false = iOS screen points. | |
| udid | Yes | iOS device UDID |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the key behavior: the contact stays held until ios_release_hid, and it returns an error message on unsupported environments. However, it states 'Coordinates are iOS screen points' without acknowledging the norm parameter, which slightly over-simplifies the coordinate behavior but does not contradict 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (three sentences) with the action front-loaded. Every sentence earns its place: the behavior, the use case, coordinate context, and an error condition. No fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the moderate complexity and lack of output schema, the description covers the essential context: the hold-then-steer interaction pattern, the need for ios_release_hid, coordinate system, and a failure condition. It does not describe a success return value, but that is often not critical for such a tool, and the description is sufficiently 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.
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 not add meaningful parameter-level information beyond the schema; it reiterates 'Coordinates are iOS screen points' and mentions the return error, which is not parameter-related. The schema already fully explains x, y, norm, and udid, so the description adds minimal value here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a specific verb-action 'Press-and-HOLD a single contact down at (x,y) via direct HID input ... WITHOUT lifting', clearly stating what the tool does. It distinguishes itself from sibling tools like ios_tap_hid or ios_long_press_hid by emphasizing the hold-without-release behavior and the need to pair with ios_release_hid.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states the intended use case: 'Use for hold-then-steer interactions the automation session cannot express.' It also notes 'no automation session needed', clarifying when this tool is appropriate, and mentions the complementary tool ios_release_hid. The error context ('iOS 17.x / no-tunnel') effectively warns when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ios_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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Crash report id (file name) from ios_crash_analytics | |
| udid | Yes | iOS device UDID |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID | |
| pattern | No | Filter pattern (e.g. "*.ips") |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Crash report id (file name) from ios_crash_analytics | |
| udid | Yes | iOS device UDID | |
| dsymPath | No | Directory of .dSYM bundles for app-frame symbolication (matched by UUID) | |
| allThreads | No | Symbolicate every thread, not just the faulting one (default false) |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID |
Tool Definition Quality
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| x1 | Yes | Start X (screen points) | |
| x2 | Yes | End X (screen points) | |
| y1 | Yes | Start Y (screen points) | |
| y2 | Yes | End Y (screen points) | |
| udid | Yes | iOS device UDID | |
| holdMs | No | Hold-in-place duration before motion in ms (default: 500) | |
| durationMs | No | Motion duration from start to end in ms (default: 400) |
Tool Definition Quality
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.
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.
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.
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.
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.
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 direct input path (no automation session needed): press-and-HOLD at from, move to to as one continuous contact, then release. Unlike ios_swipe_hid it holds at BOTH ends — holdStartMs lets the app pick the item up, holdEndMs lets the drop/snap register (a bare swipe often fails to grab or to land the drop). Use for reordering, sliders, and canvas drag-and-drop (jigsaw pieces, cards). Pass norm=true to give from/to/waypoints as 0..1 fractions (pixelInScreenshot ÷ screenshotSize — precise, matches the frontend). Single-contact only. Returns "no HID available" on iOS 17.x / no-tunnel.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | Drop point (screen points, or 0..1 fraction if norm=true) | |
| from | Yes | Grab point (screen points, or 0..1 fraction if norm=true) | |
| norm | No | If true, x/y (and path points) are 0..1 FRACTIONS of the screen — pass `pixelInScreenshot ÷ screenshotSize` directly (scale-free, matches the frontend, avoids point-guessing). Default false = iOS screen points. | |
| udid | Yes | iOS device UDID | |
| holdEndMs | No | Settle dwell at the drop before release, ms (default 250) | |
| waypoints | No | Optional intermediate points for a curved/steered drag (same space as from/to) | |
| durationMs | No | Total travel time, ms (default 500) | |
| holdStartMs | No | Grab dwell before moving, ms (default 250) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavior: the hold at both ends, how holdStartMs and holdEndMs affect app interaction, the failure mode of a bare swipe, single-contact limitation, and the 'no HID available' error on iOS 17.x/no-tunnel. This is rich, non-obvious behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact yet information-dense. Each sentence serves a purpose: defining the action, contrasting with a sibling, listing use cases, explaining coordinate normalization, and stating constraints/error behavior. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (8 params, nested objects, no output schema), the description covers the operation thoroughly: mechanics, timing, coordinate systems, limitations, and known error conditions. It provides enough context for correct invocation without needing additional documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds meaning beyond schema by explaining norm=true with the formula 'pixelInScreenshot ÷ screenshotSize' and its benefits (scale-free, matches frontend), and by clarifying the purpose of holdStartMs/holdEndMs in behavioral terms. Not every parameter is described (udid, durationMs), but the key ones gain context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action (drag-and-drop with press-and-hold, move, release) on a specific resource (direct input path). It explicitly distinguishes itself from sibling ios_swipe_hid by emphasizing the hold at both ends, which differentiates it from a simple swipe.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit use cases ('reordering, sliders, and canvas drag-and-drop') and contrasts with ios_swipe_hid, explaining when a bare swipe fails. It also notes 'no automation session needed' and 'Single-contact only,' giving clear guidance on when to use this tool versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ios_end_sessionCInspect
End a iOS automation session on an iOS device, releasing resources.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID |
Tool Definition Quality
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.
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.
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.
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.
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.
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_copyAInspect
Duplicate ONE file to another path on an iOS device. The copy happens on the device side, so the bytes never travel to the server and back — prefer this over pull-then-push when both paths are in the same root. Directories are refused, because the file-transfer service has no recursive copy and reporting success after copying nothing would be worse than an error; walk the tree with ios_file_list and copy the files.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | Absolute destination path within the same root | |
| udid | Yes | iOS device UDID | |
| bundleId | No | Bundle 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. | |
| remotePath | Yes | Absolute path of the source file |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses key behaviors: device-side copy (bytes never travel), directories are refused with a rationale, and a recommended fallback. It does not mention overwrite behavior, but the disclosed traits are substantive beyond schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences each earn their place: defining the operation, providing usage preference, and explaining a restriction with an alternative. No redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description effectively covers purpose, behavior, limitations, and alternatives for a file copy tool. It lacks explicit return/error details, but given the schema and sibling context, the description is largely complete for selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptive parameter text, so the description adds little parameter-specific detail. It adds context about 'same root' and directory refusal, but this applies to the operation rather than individual parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Duplicate ONE file to another path on an iOS device' with a specific verb and resource, and explicitly contrasts with pull-then-push and ios_file_list, distinguishing it from sibling file operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says 'prefer this over pull-then-push when both paths are in the same root' and describes when to use ios_file_list instead for directory trees, providing clear when-to-use and alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ios_file_deleteAInspect
Delete a file or directory tree on an iOS device. Directories are removed recursively. Same bundleId root selection as ios_file_list — the usual use is clearing an app's cached state between test runs. Returns deleted (true when everything went) plus failed, the paths that could not be removed. Set force to continue past individual failures instead of stopping at the first. This is destructive and has no undo. Camera photos and videos, their folders, and the on-device media databases are REFUSED: deleting one removes the file while the photo library keeps its record of it, leaving that library pointing at something that no longer exists. Files you pushed yourself are always deletable, including ones you put in the camera folder.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID | |
| force | No | Continue past individual failures and report them (default false) | |
| bundleId | No | Bundle 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. | |
| remotePath | Yes | Absolute path of the file or directory to delete |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavior: return fields (deleted, failed), 'force' flag semantics, destructive nature with no undo, and the refusal of camera photos/videos with a detailed explanation of the media-database inconsistency. It also notes that user-pushed files are always deletable, covering edge cases comprehensively.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is information-dense with no filler, but slightly long relative to its simple core action. Each sentence contributes unique value (recursion, use case, return values, force, destructive warning, media refusals), balancing completeness without being bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with no output schema, the description is remarkably complete: it covers return format, failure handling, use case, destructive implications, and unusual edge cases (camera media refusals). It addresses both what happens on success and failure, plus the underlying rationale for refusals.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers all parameters at 100%, so the baseline is 3. The description adds some value by linking 'bundleId' root selection to ios_file_list and clarifying 'force' behavior, but it does not substantially extend the parameter meanings beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Delete') and resource ('file or directory tree on an iOS device'), explicitly noting recursive directory removal. It clearly distinguishes from siblings by referencing ios_file_list for root selection and emphasizing the use case of clearing cached state between test runs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit context for when to use the tool ('clearing an app's cached state between test runs') and references ios_file_list for consistent bundleId root selection. It does not explicitly name alternatives for deletion (e.g., device_clear_app_data), but the intended use and tie to ios_file_list provide strong guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ios_file_findAInspect
Search an iOS device subtree for files and folders whose NAME matches a query. The walk runs on the device side, so this is the right way to locate a file — far cheaper than listing directories one by one. query is a case-insensitive substring, unless it contains *, ? or [, in which case it is treated as a glob (e.g. *.log, app-?.db). Results carry both the path within the root and the real absolute path on the device. truncated: true means the limit stopped the walk — report it as "the first N matches", not as everything that exists. Same bundleId root selection as ios_file_list.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID | |
| limit | No | Maximum matches to return (default 200) | |
| query | Yes | Name substring, or a glob if it contains * ? or [ | |
| bundleId | No | Bundle 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. | |
| maxDepth | No | Maximum depth to descend (default unlimited) | |
| remotePath | Yes | Absolute path of the subtree to search |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility and excels: it discloses that the walk runs device-side (performance implication), explains query semantics (case-insensitive substring vs glob), reveals that results include both relative and absolute paths, and, importantly, explains the `truncated: true` flag and how to report it. This goes well beyond simple 'search'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact yet rich: five sentences logically ordered—purpose, efficiency rationale, query semantics, result contents, truncation behavior, and cross-reference. Every sentence adds necessary information without redundancy. It is front-loaded with the core action and scopes the tool immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter tool with no output schema, this description is remarkably complete. It covers the intended use case, performance context, query syntax rules, result format, truncation behavior, and how the bundleId root selection aligns with a sibling tool. There is no significant gap that would leave an agent confused about what to expect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already documents all parameters. The description adds value by clarifying that `query` is case-insensitive (not in schema) and elaborating on the truncation semantics tied to `limit`. It does not fully expand on `maxDepth` or `udid`, but those are self-explanatory in the schema. The added nuances justify a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise verb+resource+scope: 'Search an iOS device subtree for files and folders whose NAME matches a query.' It clearly distinguishes itself from sibling ios_file_list by positioning this as the efficient way to locate files ('far cheaper than listing directories one by one'), and the later reference to ios_file_list reinforces the family relationship.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use guidance ('the right way to locate a file') and contrasts with listing directories step by step, which points to ios_file_list as the alternative. It also references the consistent bundleId selection. However, it does not fully spell out when NOT to use the tool (e.g., when you need to enumerate a directory without name filtering), so it stops 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_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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID | |
| depth | No | Recursion depth (default 1 = the directory itself) | |
| bundleId | No | Bundle 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. | |
| remotePath | Yes | Absolute path within the chosen root, e.g. "/Documents" |
Tool Definition Quality
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.
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.
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.
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.
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.
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_mkdirAInspect
Create a directory on an iOS device, parent directories included. Safe to call when it already exists — the reply distinguishes the two (created vs existed) instead of failing, so staging a temp folder needs no existence check first. Same bundleId root selection as ios_file_list.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID | |
| bundleId | No | Bundle 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. | |
| remotePath | Yes | Absolute path of the directory to create |
Tool Definition Quality
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 reveals the mkdir -p behavior (parent dirs included), the idempotent safe call (reply distinguishes `created` vs `existed`), and points to sibling behavior for bundleId. This directly informs an agent about expected side effects and non-error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each essential: the action, the key idempotent behavior with use-case, and the sibling reference. No filler or redundancy. Front-loaded with the main verb.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-param tool with no output schema, the description covers the purpose, the critical behavior on existing paths, and points to a sibling for bundleId semantics. It doesn't document full return format or error conditions, but the `created` vs `existed` mention provides enough for a simple directory-creation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% per context, so baseline is 3. The description adds value by noting 'parent directories included' (clarifies remotePath's recursive behavior) and cross-referencing ios_file_list for bundleId semantics, which the schema itself doesn't explicitly state (though it's detailed). This nudges the score to 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Create a directory on an iOS device, parent directories included' — a specific verb-object-action phrase that clearly identifies the tool's function. It distinguishes from sibling file operations (copy, move, delete, list) by the act of creating directories, and the addition of parent-directory behavior adds scope clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a concrete use case: 'staging a temp folder needs no existence check first', which tells the agent when this idempotent behavior is advantageous. It also references 'Same bundleId root selection as ios_file_list' to orient the user with existing sibling semantics, though it doesn't explicitly exclude alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ios_file_moveAInspect
Rename or move a file or directory on an iOS device. Both paths are inside the SAME root (the same bundleId selection as ios_file_list) — moving between an app container and the shared media directory is an ios_file_pull followed by an ios_file_push, not this. Missing parent directories of the destination are created.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | Absolute destination path within the same root | |
| udid | Yes | iOS device UDID | |
| bundleId | No | Bundle 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. | |
| remotePath | Yes | Absolute path of the file or directory to move |
Tool Definition Quality
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 two important behaviors beyond the schema: both paths must be within the same root, and missing parent directories of the destination are automatically created. While it does not mention overwrite behavior or error conditions, the disclosed constraints and auto-creation behavior are substantial and relevant for safe invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences long, front-loaded with the core purpose, and every sentence adds value. It efficiently conveys the operation, the key constraint and alternatives, and an important behavioral detail without redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema and no annotations, the description provides critical context: the same-root restriction, the cross-root alternative, and automatic parent directory creation. It does not describe the return value or overwrite semantics, but these are not essential for tool selection and invocation. Overall, it is sufficiently complete for common use cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds meaningful semantics beyond the schema by clarifying that remotePath and to are within the same root and explicitly stating that missing parent directories for the destination are created. This helps the agent understand the relationship between parameters and the tool's behavior during invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function with a specific verb and resource: 'Rename or move a file or directory on an iOS device.' It further distinguishes itself from related tools by explicitly noting the same-root constraint and referencing ios_file_pull/ios_file_push for cross-root operations, making it unambiguously different from siblings like ios_file_copy.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly explains when to use this tool versus alternatives: it states that moving between an app container and the shared media directory should be done with ios_file_pull followed by ios_file_push, not this tool. It also ties the path scope to the same bundleId selection as ios_file_list, giving clear context on the valid usage domain.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID | |
| bundleId | No | Bundle 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. | |
| maxBytes | No | Raise the size limit for this call (default 5 MB, capped at 25 MB) | |
| remotePath | Yes | Absolute path of the file to read |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID | |
| content | Yes | File content as a base64 string | |
| bundleId | No | Bundle 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. | |
| remotePath | Yes | Absolute destination path within the chosen root |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID | |
| bundleId | No | Bundle 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. | |
| remotePath | Yes | Absolute path within the chosen root |
Tool Definition Quality
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Element type filter e.g. XCUIElementTypeButton, XCUIElementTypeCell (optional, used in class chain) | |
| udid | Yes | iOS device UDID | |
| label | Yes | Accessibility label or visible text of the element to find | |
| match | No | How to match `label`. Default "contains" — strict, and the only modes that act without interpretation. "fuzzy" tolerates typos and word-order drift, and is tried ONLY after strict finds nothing; it REFUSES when two candidates are too close rather than guessing between them (e.g. "Sign" vs Sign In / Sign Out), and reports which attribute it matched. | |
| strategy | No | Element finding strategy to try first. Defaults to trying class chain → predicate string → accessibility id → name → xpath in order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses return values (center coordinates, bounds, which strategy matched), no-match behavior (returns similar labels), and session auto-start. Does not cover error conditions or performance, but is thorough for a non-mutating find operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences plus one usage note. Every sentence adds distinct value: purpose, return format, no-match behavior, preference guidance, session requirement. No tautology or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, parameters, behavior, and session prerequisites. Missing explicit output schema means return details are described textually but adequately. Edge cases (multiple matches, exact vs visible text nuances) are partially addressed in match parameter description. Complete enough given schema richness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, baseline 3. Description adds significant meaning: explains label context, details match modes (exact/contains/fuzzy with fuzzy's cautious behavior), clarifies type as filter for class chain, and lists default strategy order. This exceeds schema-only info.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Find', the resource 'UI element on an iOS device', and the method 'by its accessibility label or text'. It distinguishes from sibling tools like ios_tap_by_label by noting both are preferred over screenshot coordinates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit context: 'Prefer this (or ios_tap_by_label) over eyeballing coordinates from a screenshot.' Mentions session requirement and auto-start. However, lacks explicit when-not-to-use guidance and does not compare against other finding siblings like device_find_element or session_find_element.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID | |
| durationMs | No | Sampling window in milliseconds (default 2000) |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID | |
| points | Yes | Ordered waypoints of the stroke (first = touch-down, last = lift) |
Tool Definition Quality
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.
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.
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.
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.
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.
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 (no automation session needed) — the direct input path 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.
| Name | Required | Description | Default |
|---|---|---|---|
| norm | No | If true, x/y (and path points) are 0..1 FRACTIONS of the screen — pass `pixelInScreenshot ÷ screenshotSize` directly (scale-free, matches the frontend, avoids point-guessing). Default false = iOS screen points. | |
| udid | Yes | iOS device UDID | |
| points | Yes | Ordered waypoints of the stroke (first = touch-down, last = lift) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does so thoroughly. It discloses that no automation session is needed, the path is live-steerable, it is single-contact only, and returns 'no HID available' on iOS 17.x/no-tunnel. These are behavioral traits beyond what the schema or name imply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact: two sentences that front-load the core purpose and then deliver key constraints and error behavior. Every sentence adds value, with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the main behavioral aspects, constraints, and error case, which is solid given no output schema. However, it does not describe what a successful return looks like, nor does it explicitly compare to very similar siblings like ios_gesture_path. Minor gaps, but overall complete enough for a moderately complex tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already explains all parameters in detail, including norm's fractional behavior and points' structure. The description adds only redundant notes like 'points are iOS screen points' and 'Minimum 2', which are already in the schema. Thus it does not meaningfully add beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb and resource: 'Replay a freeform stroke as ONE continuous HID touch'. It distinguishes from automation sessions and mentions concrete use cases (curves, arcs, signatures, unlock patterns), which differentiates it from sibling tools like ios_swipe_hid or 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.
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: for freeform strokes needing precision, with 'no automation session needed' and 'direct input path is live-steerable'. It also notes a constraint (single-contact) and an environment limitation (iOS 17.x / no-tunnel). However, it does not explicitly name alternatives or say when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ios_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).
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID |
Tool Definition Quality
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.
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.
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.
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.
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.
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 direct HID input (host-driven, no automation session needed) is available on an iOS device, plus its display size. Use to decide between the hid tools and the session-backed ios tools. Does NOT require an automation session.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID |
Tool Definition Quality
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 states 'Does NOT require an automation session' and 'host-driven, no automation session needed,' which are key behavioral traits. It could further mention read-only nature, but the reporting verb and clear scope make it adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loaded with purpose, and contains no redundant information. Every sentence earns its place, making it an exemplar of conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, no output schema, status check), the description is complete: it explains what it does, when to use it, and the crucial no-session requirement. It does not need to describe return values in detail for a status reporting tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (the only parameter 'udid' has a description). The tool description does not add parameter-specific semantics beyond what the schema already provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Report whether direct HID input is available on an iOS device, plus its display size.' It uses a specific verb ('Report'), identifies the resource (HID status and display size), and implicitly distinguishes from sibling tools by focusing on HID availability.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit usage guidance: 'Use to decide between the *_hid tools and the session-backed ios_* tools.' This directly tells the agent when to invoke this tool versus alternatives, which is exactly what usage guidelines should do.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to .ipa file or .app folder on the server | |
| udid | Yes | iOS device UDID |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID | |
| usages | Yes | Ordered USB HID Keyboard/Keypad usage codes to press together (numbers, e.g. [0x04] for "a"). Empty list = release any keys left held. |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| pid | No | Process ID to kill | |
| udid | Yes | iOS device UDID | |
| bundleId | No | App bundle ID to kill | |
| processName | No | Process name to kill |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID | |
| bundleId | Yes | App bundle ID to launch |
Tool Definition Quality
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.
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.
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.
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.
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.
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. Works whether or not an automation session is already open: it uses a running RDSRunner when there is one and pymobiledevice3's DVT launch when there is not, and says which it used. The target app must use NSLocalizedString / Bundle.main.localizedStringForKey at runtime (modern apps do; some legacy apps cache locale on first cold launch — kill via ios_kill_app and re-call this tool to force re-read).
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID | |
| locale | No | Optional BCP-47 / POSIX locale (defaults to <language>_<UPPER(language)>), e.g. "fr_FR", "es_US" | |
| bundleId | Yes | App bundle ID, e.g. com.apple.Preferences | |
| language | Yes | ISO 639-1 language code, e.g. "fr", "es", "en", "ja" |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure and does so thoroughly. It discloses the per-launch override, the fallback between RDSRunner and pymobiledevice3 DVT launch, that it reports which mechanism was used, and the legacy-app locale caching caveat with a concrete remediation (kill and re-call). This is exemplary transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: purpose, use case, override scope, session fallback mechanism, and a legacy caveat with a fix. The main idea is front-loaded, and no sentence is filler or redundant with the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter launch tool with no annotations and no output schema, the description is remarkably complete. It covers purpose, when to use it, behavioral edge cases, session handling, and the legacy-cache workaround. Nothing critical for an agent to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 Spanish example and explains why the language override matters, but it does not add substantial parameter-level semantics beyond what the input schema already documents. It is neither deficient nor additive enough to exceed baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Launch an iOS app forced into a specific language / locale.' It clearly distinguishes itself from language-setting tools ('without changing the device's system settings') and from plain launch tools, so an agent can tell it apart from ios_launch_app and ios_set_device_language immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly identifies the primary use case: 'Useful for QA testing app localization.' It also clarifies the per-launch override semantics and the reversion to system language. However, it stops short of explicitly naming sibling alternatives and stating when not to use them, so the when-not guidance is implied 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_list_appsAInspect
List the apps installed on an iOS device — user apps AND system apps like Settings and Safari, which the raw listing's default hides. Returns bundleId, name and type. Internal bundles are excluded: iOS reports 264 installed bundles on a typical iPad, of which ~51 are apps and the rest are XPC helpers and view services (MediaRemoteUIService, AAUIViewService, SpringBoard). Pass includeInternal to see those too. No automation session required.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID | |
| includeInternal | No | Include hidden system bundles — view services, XPC helpers, SpringBoard — and return the raw Info.plist dicts. Default false. Very large output. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full disclosure burden. It reveals default behavior (system apps included, internal bundles excluded), output contents, the effect of includeInternal with real examples, and that no session is needed. It could add explicit read-only intent, but 'List' and the absence of side effects are sufficiently clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four information-dense sentences, with the core purpose front-loaded. The statistical iPad example and bundle names are slightly elaborative but help set expectations; no filler or repetition. Could be trimmed, but each sentence earns relevance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete for a read-oriented list tool: it states scope, output fields, default exclusions, the optional includeInternal behavior, and session requirements. The udid parameter is already documented in the schema, and no output schema otherwise exists, so the return-field statement fills the gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaningful context: it explains why includeInternal matters (internal XPC helpers/view services are otherwise filtered out) and gives a concrete scale example. This goes beyond the schema's terse 'Include hidden system bundles...' note.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'List the apps installed on an iOS device' — a specific verb and resource — and immediately distinguishes this tool by including system apps that 'the raw listing's default hides.' It also states the returned fields (bundleId, name, type), making its purpose unmistakable and separating it from generic app-list siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context: list installed iOS apps, system apps included by default, internal bundles excluded, and no automation session required. It does not explicitly name alternative tools (e.g., device_list_apps) or state when not to use it, but the iOS-specific scope and filtering semantics provide directional guidance.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | X coordinate (screen points) | |
| y | Yes | Y coordinate (screen points) | |
| udid | Yes | iOS device UDID | |
| duration | No | Hold duration in ms (default: 800) |
Tool Definition Quality
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.
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.
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.
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.
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.
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 direct input path (no automation session needed). Coordinates are iOS screen points. Single-contact only. Returns "no HID available" on iOS 17.x / no-tunnel.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | X coordinate (screen points, or 0..1 fraction if norm=true) | |
| y | Yes | Y coordinate (screen points, or 0..1 fraction if norm=true) | |
| norm | No | If true, x/y (and path points) are 0..1 FRACTIONS of the screen — pass `pixelInScreenshot ÷ screenshotSize` directly (scale-free, matches the frontend, avoids point-guessing). Default false = iOS screen points. | |
| udid | Yes | iOS device UDID | |
| durationMs | No | Hold duration in ms (default: 600) |
Tool Definition Quality
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 behavioral traits. It adds valuable context about the return message on failure ('Returns "no HID available" on iOS 17.x / no-tunnel'), the single-contact restriction, and coordinate system (iOS screen points). It does not mention other traits like whether the operation blocks or what happens on successful completion, but for a simple gesture tool it is sufficiently transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: three sentences that front-load the core purpose, then clarify coordinate semantics and the key limitation. Every sentence adds value, with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple gesture tool with fully described schema parameters, the description sufficiently covers the core behavior, coordinate system, and failure mode. It is complete enough for an agent to invoke it correctly and anticipate the 'no HID available' error on unsupported iOS versions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description does not add much beyond the schema; it merely reiterates that coordinates are iOS screen points (already in schema) and mentions single-contact (not parameter-related). It does not explain the norm flag or durationMs beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool performs a long-press (hold) at (x,y) via the direct input path, with a specific verb and resource. It also distinguishes itself from siblings like ios_long_press by noting 'no automation session needed', making its unique purpose clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool: 'via the direct input path (no automation session needed)' contrasts it with session-based alternatives. It also mentions the single-contact limitation and the iOS 17.x / no-tunnel error condition, but does not explicitly name alternative tools or provide when-not-to-use scenarios beyond that limitation.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID |
Tool Definition Quality
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.
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.
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.
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.
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.
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_orientationBInspect
Set the screen orientation of an iOS device. Requires an active iOS automation session.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID | |
| orientation | Yes | Orientation: PORTRAIT or LANDSCAPE |
Tool Definition Quality
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.
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.
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.
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.
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.
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" to JUDGE FROM THE TREE instead of trusting a coordinate: with label it returns the COMPLETE SUBTREE of that element (a sign-in dialog is ~15 lines, where the whole tree is ~185k characters and will not fit in a response), and without it the tree comes back with anonymous layout containers pruned — nothing findable is ever hidden behind a pruned ancestor. Reach for the subtree whenever you need attributes the compact format omits: value, placeholderValue, focused, enabled. Requires an active iOS automation session (auto-starts if needed).
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Filter (description format): only this element type, prefix optional e.g. "Button" or "XCUIElementTypeButton". | |
| udid | Yes | iOS device UDID | |
| label | No | Filter: only return elements matching this label/name | |
| format | No | Output format: "description" (default, compact readable summary) or "xml" (full hierarchy) | |
| search | No | Case-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. | |
| visibleOnly | No | Filter: exclude elements outside the current viewport (default: true; ignored when search is set) | |
| tappableOnly | No | Filter (description format): only interactive control types (Button, Cell, Link, TextField, Switch, Tab, etc). Default false. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description bears full responsibility for behavioral disclosure. It details default format, coordinate semantics (center as tap point), zero-area flagging, off-screen flagging for search results, pruning of anonymous containers in xml mode, subtree behavior with label filter, and the fact that findable elements are never hidden behind pruned ancestors.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is lengthy but well-organized, covering all necessary aspects in a logical flow. Each sentence adds meaningful information, though a more structured layout (e.g., bullet points) could improve readability slightly. It remains efficient given the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully explains return formats (compact list with coordinates, xml tree, flags for zero-area and off-screen). It covers all 7 parameters, usage patterns, edge cases, and cross-references to sibling tools, making it self-contained 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds substantial value by explaining the meaning and interaction of parameters: format outputs (description vs xml), search's scope and its override of visibleOnly, tappableOnly's filter on interactive types, type prefix optionality, and label matching. Practical examples and caveats (e.g., subtree length) enrich understanding beyond schema definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves the UI hierarchy (page source) of an iOS device and emphasizes it is the single source of truth for element coordinates. It specifies the default format and distinct use cases, differentiating it from siblings like ios_tap_by_label and ios_scroll_to_element.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is provided on when to use each format (description vs xml), how to handle long lists with search, how to disambiguate duplicates, and when to prefer sibling tools (e.g., ios_tap_by_label over raw coordinates, ios_scroll_to_element over blind swiping). It also advises on prerequisites like requiring an active session.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ios_pcap_startAInspect
Start a device-wide NATIVE network packet capture on an iOS device. Captures REAL packets at the network layer, mostly TLS-encrypted, so there are NO HTTP bodies — the result is a Wireshark .pcapng for packet-level analysis. One capture per device. Optionally filter by process (process name, e.g. mobilesafari / backboardd) or interfaceName (e.g. en0), and auto-stop after packets frames. End with ios_pcap_stop. (For Safari HTTP traffic with bodies, use ios_safari_capture_network instead.)
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID | |
| packets | No | Stop automatically after N packets (optional; default: until ios_pcap_stop) | |
| process | No | Only capture packets for this process name (optional) | |
| interfaceName | No | Only capture this interface, e.g. en0 (optional) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the transparency burden. It discloses key behavioral traits: captures real network-layer packets, TLS-encrypted (no HTTP bodies), one capture per device, and produces a .pcapng file. It does not mention permission needs or behavior if a capture is already running, but the core constraints and limitations are well covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three well-structured sentences with critical information front-loaded. Every sentence provides actionable information: what it does, limitations, options, lifecycle, and alternatives. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is comprehensive for a packet-capture tool with no output schema and no annotations. It covers purpose, limitations, filters, auto-stop, and the stop command. A minor gap is not explaining what the command returns (e.g., capture file path), but this is likely handled by ios_pcap_stop and does not prevent correct usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value beyond the schema by providing concrete examples for `process` (mobilesafari / backboardd) and `interfaceName` (en0), and clarifying that filters are optional. This enriches the parameter meaning without being redundant.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action 'Start a device-wide NATIVE network packet capture' and defines the resource (iOS device) and output (.pcapng). It explicitly distinguishes itself from ios_safari_capture_network by noting the absence of HTTP bodies and the network-layer/TLS-encrypted focus.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit lifecycle guidance ('End with ios_pcap_stop') and a clear alternative ('For Safari HTTP traffic with bodies, use ios_safari_capture_network instead'). It also mentions optional filters and auto-stop, giving practical context for when to use and when to choose the sibling tool.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID | |
| bundleId | No | Focus one app (bundle id / name); else top processes by CPU | |
| intervalMs | No | Sample interval ms (default 1000) |
Tool Definition Quality
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| sessionId | Yes | Session id from ios_performance_record_start |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| topN | No | Limit to the top-N processes by CPU (default 15) | |
| udid | Yes | iOS device UDID | |
| bundleId | No | Focus a single app by bundle id (or app/process name), e.g. com.apple.mobilesafari |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | Pinch centre X (screen points) | |
| y | Yes | Pinch centre Y (screen points) | |
| udid | Yes | iOS device UDID | |
| scale | Yes | End/start finger-separation ratio: >1 zoom in, <1 zoom out (0.2–5) | |
| durationMs | No | Gesture duration in ms (default: 250) |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID | |
| button | Yes | Button name: home, volumeUp, volumeDown, return, go, done, search, backspace, delete, tab |
Tool Definition Quality
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.
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.
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.
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.
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.
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 privileged input path (no automation session needed): 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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Button name, e.g. "home" | |
| udid | Yes | iOS device UDID |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations to rely on, the description carries the full burden and does well by explaining the privileged input path, the lack of need for an automation session, and the SpringBoard-privileged access. It also discloses the error condition on certain iOS versions, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences that front-load the primary action and immediately follow with the key distinctions and caveat. Every word earns its place, with no fluff or repetition of schema data.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool with no output schema, the description covers the use case, the privileged behavior, limitations, and an error condition. It does not mention the success return value, but this is a straightforward button press and the absence is a minor gap. Overall, it is complete enough for an agent to select and invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds minimal semantic value beyond the schema; it repeats the 'name' example 'home' that the schema already provides, but does not elaborate on allowed values or the role of 'udid'. It is adequate but not enhanced.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function with a specific verb and resource: 'Press a hardware button via the privileged input path.' It distinguishes itself from the non-HID sibling tools by explaining it reaches SpringBoard-privileged buttons that virtual touch cannot, 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.
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 pressing hardware buttons like Home that are filtered from virtual touch, and notes that no automation session is required. It also warns about the failure condition on iOS 17.x/no-tunnel, effectively advising when the tool may not work, though it does not explicitly name an alternative tool.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID |
Tool Definition Quality
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| httpPath | Yes | httpPath returned by ios_record_stop (e.g. /recordings/rec-ios-<uuid>.mp4) |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| fps | No | Input MJPEG framerate hint (default 24). Higher = smoother but larger files. | |
| udid | Yes | iOS device UDID | |
| maxDurationSec | No | Hard cap on recording duration in seconds (default 300, max 600). Recording auto-stops if exceeded. |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| recordingId | Yes | recordingId returned by ios_record_start |
Tool Definition Quality
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.
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.
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.
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.
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.
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 direct HID input (no automation session needed) — mouse-button-up / touch-up. Pairs with ios_contact_hid. Coordinates are iOS screen points. Returns "no HID available" on iOS 17.x / no-tunnel.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | X coordinate (screen points, or 0..1 fraction if norm=true) | |
| y | Yes | Y coordinate (screen points, or 0..1 fraction if norm=true) | |
| norm | No | If true, x/y (and path points) are 0..1 FRACTIONS of the screen — pass `pixelInScreenshot ÷ screenshotSize` directly (scale-free, matches the frontend, avoids point-guessing). Default false = iOS screen points. | |
| udid | Yes | iOS device UDID |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It goes beyond a simple operation statement by disclosing the error return 'no HID available' on iOS 17.x/no-tunnel, and clarifies the coordinate system. It does not mention success return values or the precondition that a contact must be held, but it is reasonably transparent for a low-risk HID action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the primary action, and every sentence adds value: the action, the pairing sibling, coordinate clarification, and the known failure condition. No wasteful filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple lift operation with no output schema, the description covers the action, the coordinate system, the pairing relationship, and a specific error case. It lacks an explicit statement about what a successful return looks like and does not state the precondition that a contact must already be held, but these are minor gaps given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 says 'Coordinates are iOS screen points', but the schema already explains this for x and y, including the norm parameter. No additional parameter-level semantics are provided beyond what the schema already contains.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a specific verb and resource: 'Lift the held contact at (x,y) via direct HID input'. It clearly distinguishes this from siblings by noting it pairs with ios_contact_hid and states the action as mouse-button-up/touch-up.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear context by saying 'Pairs with ios_contact_hid' and notes 'no automation session needed' to differentiate from session-based alternatives. It also mentions the failure mode on iOS 17.x/no-tunnel, but does not explicitly list when not to use this tool or alternative tools beyond the pairing hint.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Navigate the page to this URL inside the capture session to record the full page-load waterfall (pass the current URL to reload) | |
| udid | Yes | iOS device UDID | |
| limit | No | Max 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. | |
| format | No | Output format: "summary" (default) returns { records, bodiesOmitted? }; "har" returns a HAR 1.2 document | |
| pageId | No | CDP 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 | |
| throttle | No | Emulate 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. | |
| triggerJs | No | JavaScript 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. | |
| durationMs | No | Collection window in milliseconds (default: 5000, max: 30000) | |
| onlyErrors | No | Only failed / 5xx records | |
| urlSubstring | No | Only records whose URL contains this substring — target the requests you care about | |
| includeBodies | No | Fetch 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. | |
| platformVersion | No | Ignored (kept for compatibility) |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID | |
| pageId | No | CDP 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 | |
| triggerJs | No | JavaScript 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. | |
| durationMs | No | Collection window in milliseconds (default: 5000, max: 15000) | |
| platformVersion | No | Ignored (kept for compatibility) |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID | |
| pageId | No | CDP 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 | |
| platformVersion | No | Ignored (kept for compatibility) |
Tool Definition Quality
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.
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.
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.
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.
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.
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, bounding box {x,y,w,h} and a visibility flag. USE suggested — the locator worth writing (id, then test-id, name, aria-label, placeholder), each verified unique before it is offered, with playwright giving the same target in getByRole/getByTestId form. css and xpath are diagnostic fallbacks, not recommendations: the CSS path is an nth-of-type chain over layout classes and does not belong in a page object. When suggested is null nothing stable exists — act via ref and treat the missing test-id as the real finding. Set includeStyles=true to also return a curated set of computed styles per element. Omit pageId to auto-pick the active Safari page.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID | |
| limit | No | Max elements to return (default 150) | |
| pageId | No | CDP 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 | |
| selector | No | CSS selector to scope extraction (default: interactive/meaningful elements) | |
| includeStyles | No | Include a curated set of computed styles per element (default false) | |
| platformVersion | No | Ignored (kept for compatibility) |
Tool Definition Quality
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 key behaviors: returns interactive/meaningful elements by default (or CSS selector), includes bounding box and visibility flag, explains locator field semantics (suggested, playwright, css, xpath), and describes pageId auto-pick logic. It also notes includeStyles adds computed styles. No destructive or permission-related information is needed for this read-only tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single long paragraph but front-loads the main purpose and output. Every sentence contributes value—explaining output fields, locator recommendations, default behavior, and parameter details. It could be slightly more structured (e.g., bullet points for return fields) but remains efficient with no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description fully explains return values (tag, text, attributes, bounding box, visibility, locator fields). It covers edge cases (null suggested, auto-pick page, includeStyles toggle) and provides actionable guidance. The tool is well-scoped for its purpose, and the description leaves no critical gaps 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, but the description enriches several parameters: for pageId it explains 'Omit it to use the page ios_safari_navigate last landed on... only pass it to target a DIFFERENT tab'; for selector it clarifies default ('interactive/meaningful elements'); for includeStyles it specifies 'curated set of computed styles'. This adds significant meaning beyond the schema's basic type descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool extracts 'locator-friendly element data from a Safari page for building Playwright/Selenium locators,' specifying the verb (extract), resource (Safari page elements), and output fields (tag, text, attributes, bounding box, visibility flag). It distinguishes itself from siblings like ios_safari_get_dom (full DOM) and ios_safari_evaluate (JS execution) by focusing on locator-ready data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is provided on how to interpret results: 'USE suggested — the locator worth writing...', warning that 'css and xpath are diagnostic fallbacks, not recommendations' and that CSS path 'does not belong in a page object.' It also advises when suggested is null: 'act via ref and treat the missing test-id as the real finding.' This tells the agent exactly how to use the tool's output and when to rely on different locator strategies.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ios_safari_evaluateAInspect
Evaluate a JavaScript expression in the context of a Safari page on an iOS device via the Web Inspector. Uses Runtime.evaluate internally. Returns the result as a string (JSON-stringified for objects), followed by a second block naming the tab it actually ran on — check that if a result looks like it came from the wrong page. Omit pageId to auto-pick the frontmost Safari tab. WAITING: UI frameworks paint a frame or two AFTER the click that triggers them, so an evaluate fired immediately can read the DOM before the menu/overlay/row exists. Use waitForSelector to block until an element appears (and waitMs to let it settle) INSTEAD of splitting the work into a separate poll call — both wait inside this same call on the same tab. DO NOT CLICK WITH THIS TOOL. A click dispatched from JavaScript — .click(), or dispatchEvent of a MouseEvent — is an untrusted event (isTrusted false). Component frameworks and anything gated on a real user gesture (file pickers, clipboard, autoplay, anti-bot checks) may ignore it, so the evaluate SUCCEEDS and the page does nothing — a failure that looks like a passing call. Use webpage_click instead: it has the device tap its own screen at the element, delivering a real trusted touch (pointerdown, touchstart, mousedown, click). Same for typing — webpage_type.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID | |
| pageId | No | CDP 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 | |
| waitMs | No | Settle delay applied just before evaluating (and AFTER waitForSelector matches, when both are given). Use for animations that have started but not finished. Maximum 10000 ms | |
| expression | Yes | JavaScript expression to evaluate | |
| waitTimeoutMs | No | How long waitForSelector may poll. Default 5000 ms, maximum 15000 ms | |
| platformVersion | No | Ignored (kept for compatibility) | |
| waitForSelector | No | CSS selector to wait for BEFORE evaluating. Polls until it matches, then runs the expression. Errors if it never appears within waitTimeoutMs — it will not evaluate anyway and hand back a null that reads like a real answer |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses return format (string plus second block naming the actual tab), warns that results may come from the wrong page, explains frontmost tab auto-pick behavior, and details the untrusted event issue (isTrusted false) meaning clicks may silently do nothing. It also notes waitForSelector's error behavior returning a null that looks like a real answer. With no annotations, this transparency is particularly valuable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every segment earns its place, moving from core purpose to return format to critical behavioral warnings, with clear section markers like 'WAITING:' and 'DO NOT CLICK WITH THIS TOOL.' It's front-loaded and structured for quick scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with no output schema, the description explains return value structure, tab selection behavior, waiting semantics, and dangerous misuse patterns. It covers the main edge cases (wrong tab, untrusted events, null on timeout) and integrates with sibling tool alternatives, making it effectively complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds contextual usage guidance for waitForSelector and waitMs but doesn't introduce new parameter semantics beyond what the schema already provides. The pageId reference is simplified and slightly inconsistent with the schema's 'last navigated' rule, but not a significant addition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool evaluates a JavaScript expression in a Safari page on an iOS device via the Web Inspector, naming the specific verb and resource. It distinguishes itself from sibling evaluate tools (android_devtools_evaluate, web_evaluate) by tying to iOS Safari, and adds scope by mentioning return format and pageId behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly instructs not to click with this tool and names webpage_click as the alternative for trusted events, and webpage_type for typing. It also advises using waitForSelector within the same call instead of a separate poll call, giving clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ios_safari_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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID | |
| pageId | No | CDP 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 | |
| selector | No | Optional CSS selector — returns outerHTML of the first matching element, or null if not found | |
| platformVersion | No | Ignored (kept for compatibility) |
Tool Definition Quality
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.
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.
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.
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.
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.
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 index, pageId (the CDP target id), url, title, type, active, and state per page, plus a top-level currentActiveTab (the pageId on screen, or null when none is). index is positional within THIS listing and is not stable across calls — resolve it to a pageId here, then pass that pageId. iOS shows exactly ONE tab at a time, so every ios_safari_* tool called WITHOUT pageId drives the active tab and refuses a backgrounded one — you do NOT need to list pages and thread an id just to act on the current tab, only to target a DIFFERENT one. state says what each page is doing, and the distinction matters because the fixes are opposite: "foreground" = the tab on screen (at most one, and it is the active: true one); "background" = alive but not visible, because another tab or another app is in front — pass its pageId explicitly to drive it anyway; "unresponsive" = the page answers nothing, either because it is suspended (device asleep or locked) or because a dialog (alert/confirm/prompt) is open and blocking the page — those look identical from here, so take a screenshot to tell them apart rather than assuming the device is asleep; "unprobed" = past the probe cap, nothing was measured. Pages "background" with no foreground means Safari is not frontmost. Confirming state costs one bounded check per page (run in parallel), so this is a little slower than a bare listing and never fails the whole call just because nothing is in the foreground. Requires Web Inspector enabled: Settings → Safari → Advanced → Web Inspector.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID | |
| platformVersion | No | Ignored (kept for compatibility) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and excels. It discloses that index is positional and unstable, that iOS shows one tab at a time, that state confirmation costs a bounded parallel check per page, that 'unresponsive' could mean device asleep or a dialog is open, and that the call 'never fails the whole call just because nothing is in the foreground.' These are non-obvious behavioral traits that significantly help the agent reason about outcomes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but each sentence earns its place. It front-loads the purpose, then systematically explains return fields, state values, usage implications, and prerequisites. The structure flows naturally from what → why → how, with no fluff. The length 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.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description must fully explain the return structure and edge cases. It delivers the full list of fields, defines each state, explains the active-tab model, distinguishes pageId from index, mentions the Web Inspector requirement, and clarifies fallback behavior. This is everything an agent needs to correctly interpret results and decide next actions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The two parameters (udid, platformVersion) are already fully described in the schema with 100% coverage. The description does not add new input-parameter semantics—it focuses on output and behavioral context. Per the scoring rule, baseline 3 applies when schema covers parameters; no further compensation is needed but none is added.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear, specific verb+resource: 'List inspectable Safari pages on an iOS device via the Web Inspector CDP bridge.' It enumerates the exact return fields (index, pageId, url, etc.) and adds a top-level currentActiveTab, and distinguishes itself from sibling page-listing tools by focusing on iOS Web Inspector semantics. This is unambiguous and distinguishes from android_devtools_list_pages or webpage_tabs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly explains when this tool is needed and when it isn't: 'you do NOT need to list pages and thread an id just to act on the current tab, only to target a DIFFERENT one.' It also describes the meanings of each state ('foreground', 'background', 'unresponsive', 'unprobed') and leaves clear guidance on how to handle each, including when to pass pageId explicitly and when to take a screenshot to disambiguate. 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.
ios_safari_mock_addAInspect
Add (or update in place, when id matches an existing route) a mock/abort rule for Safari/WKWebView requests on this device. mode "mock" (default) serves the given status/headers/body without the request leaving the device; mode "abort" fails it so the page sees a network error. Routes apply immediately and survive navigation. WEB CONTENT ONLY: this intercepts requests made by browser/WebView pages. Requests made by native app code are NOT intercepted and never will be by this tool. Nothing device-wide is changed and no certificate is installed — the effect is scoped to the page. For requests made by native app code use ios_traffic_mock_add instead.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Route id to update in place; omit to auto-generate a new one | |
| body | No | Response body for mode "mock" (text, or base64 when bodyEncoding is "base64") | |
| mode | No | "mock" serves a canned response (default); "abort" fails the request | |
| udid | Yes | Device id (Android serial or iOS UDID) | |
| method | No | Optional HTTP method filter (e.g. "GET"/"POST"); matches any method when omitted | |
| pageId | No | Pin routing to a specific page id (from the *_list_pages tool). Omit to follow the active page automatically across navigations and new tabs — recommended. | |
| status | No | HTTP status to serve for mode "mock" (default 200) | |
| delayMs | No | Latency injected before responding/failing, in ms (clamped to 60s) | |
| enabled | No | Whether the route is active (default true) — disabled routes are kept but ignored | |
| headers | No | Response headers for mode "mock", as {headerName: value} — e.g. {"content-type": "application/json"}. On iOS a `charset` in content-type is NOT applied to the response: an HTML body with non-ASCII characters must declare it in the document (e.g. <meta charset="utf-8">) or it will be decoded with the default encoding and render as mojibake. | |
| matchUrl | Yes | URL pattern to match against the request's full URL | |
| matchType | No | How matchUrl is interpreted against the request URL (default "contains") | |
| bodyEncoding | No | Encoding of `body` (default "text") |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full disclosure burden. It explains that modes 'mock' and 'abort' behave differently, routes apply immediately and survive navigation, and the effect is scoped to the page without device-wide changes or certificate installation. It mentions the update-in-place behavior via id. However, it omits details like maximum number of routes, cleanup behavior, or performance implications, which would enhance transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is five sentences long, each conveying essential information. It is compact and avoids redundancy. However, it could be more structured (e.g., bullet points) for easier scanning, but it is still efficient and front-loaded with the main action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 13 parameters and no output schema, the description covers the key functional aspects: purpose, modes, scope, and sibling alternative. It does not describe the return value or success/failure behavior, but this is acceptable given the absence of an output schema. Overall, it provides sufficient context for correct usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds context about the two modes ('mock' serves canned response, 'abort' fails request) and the update-in-place behavior of the 'id' parameter. However, it does not provide additional semantics for most parameters beyond what the schema already describes. The description reinforces but does not significantly extend parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool adds or updates a mock/abort rule for Safari/WKWebView requests. It distinguishes from sibling tools like ios_traffic_mock_add by specifying the scope (web content only vs. native app code). The verb 'add (or update)' and resource 'mock/abort rule' are 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is provided: use for web content (browser/WebView pages), not for native app code requests. The description directly names the alternative tool (ios_traffic_mock_add) for native requests. It also clarifies the scope (page-level, not device-wide, no certificate installation) and that routes survive navigation.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device id (Android serial or iOS UDID) |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device id (Android serial or iOS UDID) |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Route id to remove (from *_mock_list) | |
| udid | Yes | Device id (Android serial or iOS UDID) |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device id (Android serial or iOS UDID) |
Tool Definition Quality
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.
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.
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.
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.
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.
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_set_input_filesAInspect
Set the files on a file-upload input () in Safari on an iOS device, WITHOUT opening the device's file picker. This is the only way to test an upload flow end to end on iOS: tapping an upload control opens a native sheet that automation cannot drive. Provide file content inline, or name a file already on the device (see ios_file_push / ios_upload_targets) to have it read from there. Fires the input and change events afterwards so framework bindings and validation run, then reads the input back and reports the file names and sizes the PAGE actually sees — so a silent no-op can't pass as success. Total content limit 2 MB.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID | |
| files | Yes | Files to attach. Pass several only for a multiple-file input | |
| index | No | Which match to use when the selector matches several (0-based, default 0) | |
| pageId | No | CDP target id. Omit to use the page ios_safari_navigate last landed on | |
| selector | Yes | CSS selector for the file input. Must resolve to an <input type="file"> element |
Tool Definition Quality
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 impressively. It discloses that the tool bypasses the file picker, fires input/change events, reads back what the page actually sees (names and sizes), and enforces a 2 MB content limit. This gives the agent a complete picture of side effects and failure-detection mechanisms without needing external hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, dense paragraph that front-loads the primary purpose and then adds critical constraints and behaviors. Every sentence earns its place: the file-picker avoidance, the 'only way' rationale, the content-source options, and the event-firing/verification details. No redundancy or irrelevant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a 5-parameter tool with no output schema, the description is remarkably complete. It covers invocation options (selector, index, pageId), file-source choices (text, base64, devicePath), the 2 MB cap, and what the tool returns conceptually (file names and sizes the page sees). The only missing piece is the exact response format, but the description's statement suffices for an agent to understand what to expect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaningful operational context beyond the schema: how to supply file content (inline vs. devicePath), the total 2 MB limit, and the verification behavior that helps the agent interpret results. It also implicitly guides the choice between text, contentBase64, and devicePath by mentioning 'file content inline, or name a file already on the device'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the action ('Set the files') and the resource ('file-upload input in Safari on an iOS device'), and it explicitly distinguishes the tool from siblings by noting it works WITHOUT opening the device's file picker. It also differentiates from file-related tools like ios_file_push/ios_upload_targets by focusing on the input element, not the device filesystem.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool—'This is the only way to test an upload flow end to end on iOS'—and explains why (tapping an upload control opens a native sheet automation cannot drive). It also references complementary tools (ios_file_push / ios_upload_targets) for getting files onto the device, giving clear alternatives for that aspect. The 'only way' phrasing also implies when not to use other approaches.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ios_screenshotAInspect
Take a HIGH-FIDELITY screenshot of an iOS device (slow full-fidelity path). Returns base64 PNG image. For routine per-action screen checks prefer ios_mjpeg_screenshot — it is much faster; reserve ios_screenshot for when you need a crisp, full-fidelity frame. If the device is asleep (black frame) it auto-wakes and retries once. Requires an active iOS automation session (auto-starts if needed).
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully discloses key behaviors: returns a base64 PNG, is slow/full-fidelity, auto-wakes and retries if device is asleep, and requires an active iOS session (auto-starts if needed). This goes beyond basic expectations and helps the agent anticipate behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, front-loaded with the core purpose, and each sentence adds value: purpose, output, usage guidance, and behavioral caveats. There is no redundancy or extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool without an output schema, the description is complete: it explains the return format, the speed/fidelity tradeoff, the auto-wake retry behavior, and session requirements. It effectively distinguishes from relevant siblings and gives the agent enough to decide when to use it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers the single parameter 'udid' with description 'iOS device UDID', achieving 100% schema coverage. The description adds no additional semantic detail about the parameter, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states precisely what the tool does: 'Take a HIGH-FIDELITY screenshot of an iOS device (slow full-fidelity path).' It clearly identifies the resource (iOS device) and action (screenshot), and differentiates from the sibling tool ios_mjpeg_screenshot by highlighting the fidelity/speed tradeoff.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when to use this tool vs. the alternative: '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.' Also notes the auto-wake and session auto-start behavior, giving clear context for usage.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID | |
| label | Yes | Accessibility label or text of the element to scroll to | |
| direction | No | Scroll direction (default: down) |
Tool Definition Quality
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.
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.
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.
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.
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.
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 into the FOCUSED field on an iOS device — tap a text field first. Use \n in text to press the Return/Go key (e.g. "user@example.com\n" to submit). Refuses when nothing is focused instead of reporting a success it cannot back: WDA accepts the keystrokes either way, so with no focused field the text goes nowhere and the old behaviour still said it was typed. Pass force:true to send anyway (rare — for surfaces where the active element is not reported). Requires an active iOS automation session.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Text to type. Use \n to press Return/Go key. | |
| udid | Yes | iOS device UDID | |
| force | No | Send even when no focused field is reported (default: false) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does excellent work: it discloses that the tool refuses when nothing is focused (unlike old behavior that falsely reported success), explains why (WDA accepts keystrokes regardless), and warns that without a focused field text goes nowhere. Force:true is documented as rare. All behavioral quirks 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action, uses efficient single sentences, and provides just enough technical detail. Slightly above 3 because it packs significant behavioral nuance into a compact paragraph without fluff. Could be slightly more concise on the refusal behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-param tool with 100% schema coverage and no output schema, the description is very complete: covers prerequisites, edge cases, behavioral traits, and all parameters. No mention of return value (e.g., whether it returns success/failure), but output schema is absent which reduces burden. Slight gap: doesn't explicitly state the tool returns nothing meaningful or may throw error on refusal.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so baseline is 3. The description adds value beyond schema by explaining the newline escape in context of Return/Go and providing a concrete example. It also clarifies force:true is for rare cases where active element is not reported. Minor deduction: example usage could be more general.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool types text into the focused field on an iOS device, distinguishing it from sibling tools like session_send_keys or web_type which are for web or other contexts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states the prerequisite ('tap a text field first'), explains how to use newline for Return/Go (with example), and notes when force:true is needed ('for surfaces where the active element is not reported'). It also explains the edge case of no focused field.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ios_set_device_languageAInspect
Change the iOS device's system language and / or locale (persistent, affects every app). iOS may relaunch SpringBoard to apply the change — expect a 5-10s flicker, and the value can take a few seconds to read back. Pass a BASE language code ("fr", not "fr-CA"): iOS reports a region-qualified language but refuses to set one, so a regional code is split into its base language plus a locale automatically. For per-app testing without changing the whole device, prefer ios_launch_app_in_language.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID | |
| locale | No | POSIX locale, e.g. "fr_FR", "es_US" | |
| language | No | ISO 639-1 language code, e.g. "fr", "es", "en" |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure, and it does so thoroughly. It discloses persistence, global impact, the SpringBoard relaunch flicker, the read-back delay, and the automatic splitting of regional codes. No annotations exist to contradict it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise yet thorough. It front-loads the core purpose, then systematically addresses side effects, parameter nuances, and a usage alternative. Every sentence contributes valuable information without redundancy, making it well-structured for quick agent comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the essential aspects for a mutation tool: purpose, side effects, parameter handling, and usage guidance. It does not explicitly describe return values or success/error behavior, but since no output schema is provided and the side effects are clearly detailed, the omission is minor. The tool is well-specified for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage for all three parameters (udid, locale, language). The description adds crucial semantics beyond the schema: it clarifies that 'language' expects a base code like 'fr' not 'fr-CA' and explains how regional codes are split into base language plus locale. This significantly aids correct parameter usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear, specific verb ('Change') and resource ('iOS device's system language and/or locale'), and explicitly distinguishes itself from the sibling tool ios_launch_app_in_language, which is for per-app testing. An agent can immediately understand the tool's purpose without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: it notes the change is persistent and affects every app, mentions the side effect of SpringBoard relaunch, and directly advises to use ios_launch_app_in_language for per-app testing. This gives clear context for when to use this tool versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ios_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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID | |
| latitude | Yes | Latitude in decimal degrees, e.g. 37.7749 | |
| longitude | Yes | Longitude in decimal degrees, e.g. -122.4194 |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID | |
| content | Yes | Text content to set on clipboard |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID | |
| settings | No | Settings to update (e.g. {"mjpegServerScreenshotQuality": 25}). Omit to get current settings. |
Tool Definition Quality
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.
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.
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.
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.
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.
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"]
| Name | Required | Description | Default |
|---|---|---|---|
| args | No | Additional arguments for the subcommand | |
| udid | Yes | iOS device UDID | |
| subcommand | Yes | Device-management subcommand (e.g. "info", "syslog", "diskspace", "ip", "devicename") |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID |
Tool Definition Quality
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.
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.
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.
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.
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.
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_supported_languagesAInspect
List the languages and locales this iOS device accepts, plus what it is set to now. Read this before ios_set_device_language rather than guessing a code: an unsupported value is rejected with a bare "SetProhibited" that names no reason. Note the asymmetry — the current language reads back region-qualified (e.g. "en-CA") but only the BASE codes listed in languages can be set; the region belongs in the locale.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID |
Tool Definition Quality
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 the crucial asymmetry about region-qualified current language vs base codes for setting, and mentions the error string. It implies read-only via 'list' but doesn't explicitly state no side effects; still, it provides substantial behavioral context beyond the bare function.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately long but every sentence adds value: purpose, usage warning, and an important asymmetry detail. It is front-loaded with the core functionality and uses clear phrasing, though slightly verbose. Could be tightened but remains efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with one parameter and no output schema, the description conveys what will be returned (languages, locales, current language) and the critical caveat about setting. Even without an output schema, the agent knows what to expect. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is only a single udid parameter, and the schema description already covers it fully (100% coverage). The description adds no further meaning about the udid itself, 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states it lists the languages/locales the device accepts plus the current setting, which is a specific verb and resource. It clearly distinguishes from the sibling ios_set_device_language by being the read-only counterpart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It tells the agent to read this before ios_set_device_language to avoid guessing a code, explaining that unsupported values are rejected with a bare 'SetProhibited' error. This explicitly gives the when-to-use and why, outperforming many descriptions.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| x1 | Yes | Start X coordinate | |
| x2 | Yes | End X coordinate | |
| y1 | Yes | Start Y coordinate | |
| y2 | Yes | End Y coordinate | |
| udid | Yes | iOS device UDID | |
| duration | No | Swipe duration in ms (default: 500) |
Tool Definition Quality
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.
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.
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.
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.
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.
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 direct input path (no automation session needed). Coordinates are iOS screen points. Single-contact only. Returns "no HID available" on iOS 17.x / no-tunnel.
| Name | Required | Description | Default |
|---|---|---|---|
| x1 | Yes | Start X (screen points, or 0..1 fraction if norm=true) | |
| x2 | Yes | End X (screen points, or 0..1 fraction if norm=true) | |
| y1 | Yes | Start Y (screen points, or 0..1 fraction if norm=true) | |
| y2 | Yes | End Y (screen points, or 0..1 fraction if norm=true) | |
| norm | No | If true, x/y (and path points) are 0..1 FRACTIONS of the screen — pass `pixelInScreenshot ÷ screenshotSize` directly (scale-free, matches the frontend, avoids point-guessing). Default false = iOS screen points. | |
| udid | Yes | iOS device UDID | |
| durationMs | No | Swipe duration in ms (default: 300) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the full burden, and it does well: it discloses the direct input path, single-contact restriction, coordinate space ('iOS screen points'), and a specific failure mode ('Returns "no HID available" on iOS 17.x / no-tunnel'). It does not mention permissions or detailed success return behavior, but for a swipe operation this is substantial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loaded with the primary action, and conveys the most important constraints and error condition without redundant detail. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (7 params, no output schema) and the broad sibling list, the description covers the essential context: no session needed, coordinate system, single-contact only, and a known iOS 17.x failure. It does not describe return values beyond the error string, but that omission is minor for a swipe action.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides 100% parameter coverage, including descriptions for each x/y coordinate and the `norm` fraction semantics. The description adds the phrase 'Coordinates are iOS screen points', which reinforces but does not significantly extend the schema. Therefore, the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states the specific action ('Swipe from (x1,y1) to (x2,y2)') and the resource ('via the direct input path'), clearly distinguishing it from the sibling `ios_swipe` which would require an automation session. The verb and resource are unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly indicates when this tool is appropriate ('no automation session needed') and provides a critical exclusion ('Returns "no HID available" on iOS 17.x / no-tunnel'). However, it does not explicitly name alternative tools like `ios_swipe` or `ios_drag_hid` for comparison, so it falls just short of full usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ios_syslog_captureAInspect
Capture the iOS device's live system log for a few seconds and return the lines. This is the device log (os_log/syslog) — where crashes on launch, permission denials and app startup failures appear. Not app console logs: for a web page use ios_safari_console_logs. Filter with process and/or contains — an idle device produces hundreds of lines per second, so an unfiltered capture is mostly noise. Run the action you want to debug WHILE the capture is running, or capture right after it. No automation session required.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID | |
| level | No | Minimum severity: "error" = Error+Fault only, "notice" excludes Debug/Info. Default all | |
| process | No | Only lines from this process/image, e.g. "SpringBoard" (case-insensitive substring) | |
| seconds | No | How long to collect for (default 5, max 60) | |
| contains | No | Only lines containing this text (case-insensitive) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that the tool captures live logs for a few seconds and returns lines, and that unfiltered captures are mostly noise. It mentions no automation session is required. With no annotations, the description carries full burden; it covers the key behavioral traits but does not detail capture timing specifics or output truncation limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is front-loaded with the core action and immediately clarifies system vs. app logs. It is relatively concise (3 sentences), but the third sentence could be more direct. No wasted words, but slightly more verbose than necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of annotations, schema, and output schema, the description is fully complete. It defines the tool's purpose, scope, differentiation from siblings, and usage patterns. The complexity is low, and the description leaves no major gaps for an agent to misinterpret.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents parameters. The description adds value by explaining the filtering rationale (idle noise) and suggesting practical usage, but does not supplement parameter details beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool captures a live system log (os_log/syslog) from an iOS device, specifying it returns lines. It explicitly distinguishes itself from sibling tools like ios_safari_console_logs (for web pages) and lists specific use cases: crashes, permission denials, and app startup failures.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when to use (debugging device-level issues) and when not to (app console logs, which points to ios_safari_console_logs). Offers concrete filtering advice using `process` and `contains` to avoid noise from idle devices, and suggests running the target action during capture or immediately after.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ios_tapAInspect
Tap at (x,y) on an iOS device screen — the FALLBACK for when an element has no usable label. Prefer ios_tap_by_label (taps by accessibility label via the automation session, no coordinate math, works even on zero-area elements) whenever the target has a name in ios_page_source. Coordinates here are in physical screen points and must come from ios_page_source (the authoritative source), NOT eyeballed from a screenshot. Requires an active iOS automation session.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | X coordinate in screen points (from ios_page_source element center) | |
| y | Yes | Y coordinate in screen points (from ios_page_source element center) | |
| udid | Yes | iOS device UDID | |
| duration | No | Tap hold duration in ms (default: 100) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of disclosing behavior. It mentions the fallback nature, coordinate source, and session requirement. However, it does not specify failure modes or return behavior, which are not covered elsewhere, though these are less critical for a tap action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: opening with purpose, then usage guidance, then a key requirement. Every sentence adds essential information, with 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.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple action tool with no output schema or annotations, the description covers all critical aspects: what it does, when to use it instead of an alternative, how to obtain valid parameters, and a prerequisite (active session). It is complete enough 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.
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 emphasizing that coordinates are in physical screen points and must originate from ios_page_source, reinforcing the warning against using guesses from screenshots. This goes beyond the schema's parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Tap at (x,y) on an iOS device screen.' It also identifies itself as the 'FALLBACK' for elements without labels, distinguishing it from ios_tap_by_label. This specific verb+resource+scope makes the purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is provided: 'Prefer ios_tap_by_label ... whenever the target has a name in ios_page_source.' It also warns that coordinates must come from ios_page_source, not screenshots, and that an active automation session is required. This gives clear when-to-use and when-not-to-use instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ios_tap_by_labelAInspect
PREFERRED way to tap on iOS: find a UI element by its accessibility label and tap it in one call via the automation session. No coordinate math, and it works on zero-area elements (e.g. bottom-tab labels) where ios_tap(x,y) would miss. Use this before falling back to ios_tap with raw coordinates. If the element is off-screen it auto-scrolls to bring it into view first (disable with autoScroll:false). On no match, returns similar labels (incl. off-screen) to retry with. Requires an active iOS automation session (auto-starts if needed).
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID | |
| label | Yes | Accessibility label or visible text of the element to tap | |
| match | No | How to match `label`. Default "contains" — strict, and the only modes that act without interpretation. "fuzzy" tolerates typos and word-order drift, and is tried ONLY after strict finds nothing; it REFUSES when two candidates are too close rather than guessing between them (e.g. "Sign" vs Sign In / Sign Out), and reports which attribute it matched. | |
| autoScroll | No | Scroll the element into view if off-screen before tapping (default: true) |
Tool Definition Quality
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 auto-scroll behavior (with disable option), behavior on no match (returns similar labels), and the requirement for an active iOS automation session (auto-starts if needed). This covers key behavioral traits comprehensively.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences front-load the core purpose and key differentiator. Every sentence adds value: preferred method, no coordinate math, zero-area elements, fallback hint, auto-scroll behavior, no-match feedback, session requirement. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 4 parameters and no output schema, the description covers when to use, parameter behavior, edge cases (off-screen, no match), and prerequisites (active session). It leaves no significant gaps given the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds modest extra context for the `match` parameter (explaining fallback and refusal logic) but does not significantly enhance understanding of the label or autoScroll parameters beyond the schema descriptions. No value added beyond what the schema already conveys.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool taps a UI element by its accessibility label in one call, distinguishing it from coordinate-based alternatives like ios_tap. The phrase 'PREFERRED way to tap on iOS' sets clear context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to use this before falling back to ios_tap with raw coordinates. Mentions it works on zero-area elements where coordinate taps fail, and on no match it returns similar labels to retry. Provides clear 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.
ios_tap_hidAInspect
Tap at (x,y) via the direct input path (no automation session needed). 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 the automation session is unavailable. Returns "no HID available" on iOS 17.x / no-tunnel.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | X coordinate (screen points, or 0..1 fraction if norm=true) | |
| y | Yes | Y coordinate (screen points, or 0..1 fraction if norm=true) | |
| norm | No | If true, x/y (and path points) are 0..1 FRACTIONS of the screen — pass `pixelInScreenshot ÷ screenshotSize` directly (scale-free, matches the frontend, avoids point-guessing). Default false = iOS screen points. | |
| udid | Yes | iOS device UDID |
Tool Definition Quality
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 covers coordinate frame ('same frame as ios_page_source'), single-contact limitation, and an error condition on unsupported platforms. However, it does not describe what a successful return value looks like or whether the tap is instantaneous or has any side effects, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tightly written sentences, each serving a distinct purpose: action, coordinate context, and usage guidance including a fallback caveat. No redundant phrasing or unnecessary details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tap tool, the description is nearly complete: it explains what it does, when to use it, coordinate semantics, and a platform-specific failure case. The lack of explicit success return information is minor given no output schema and the trivial nature of a tap action.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents parameter types and defaults. The description adds value by clarifying the coordinate reference frame ('iOS screen points (same frame as ios_page_source)'), which is not fully explained in the schema's x/y descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Tap at (x,y) via the direct input path'. It clearly distinguishes from sibling ios_tap by noting 'no automation session needed' and 'force HID', 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool vs alternatives: 'Prefer ios_tap for normal automation; use this to force HID or when the automation session is unavailable.' Also provides a critical environment caveat: 'Returns "no HID available" on iOS 17.x / no-tunnel.'
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID | |
| bundleId | No | App bundle ID to terminate (default: current foreground app) |
Tool Definition Quality
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.
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.
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.
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.
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.
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_traffic_flowsAInspect
Snapshot recent DECRYPTED HTTPS flows (request/response) captured since ios_traffic_start. Each flow: method, url, host, status, contentType, req/resp sizes, durationMs. Set includeBodies to also return headers + (truncated) request/response bodies. Filter by urlSubstring or onlyErrors. Returns the most recent limit flows.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID | |
| limit | No | Max flows to return, most recent first-matched (default 100) | |
| onlyErrors | No | Only 5xx / connection-error flows | |
| urlSubstring | No | Only flows whose URL contains this substring | |
| includeBodies | No | Include headers + bodies (each body capped at 32000 chars). Default false. |
Tool Definition Quality
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 goes beyond the schema by mentioning that only DECRYPTED HTTPS flows are captured, that bodies are truncated, and that the snapshot is since ios_traffic_start. These are meaningful operational traits. It does not explicitly mention that the capture must be active, but this is strongly implied by the phrasing and the companion start tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, tightly packed with relevant information. The first sentence states the core purpose and return fields. The second explains the optional body inclusion. The third covers filtering and limit. No filler or redundant phrasing; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that there is no output schema, the description does well to list the returned fields and optional body payload. It covers the main options and their effects. The primary gap is not explicitly stating that a capture must be in progress (started via ios_traffic_start), but the phrase 'since ios_traffic_start' covers this context for an informed agent. Overall, it is sufficient for a tool with this level of complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by explaining what includeBodies returns (headers + truncated bodies), how urlSubstring and onlyErrors filter flows, and what fields each flow contains (method, url, host, status, etc.). It connects the 'limit' parameter to the 'most recent' behavior, reinforcing rather than duplicating the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Snapshot recent DECRYPTED HTTPS flows') with a clear resource and scoping. It lists the fields returned, distinguishing it from starting/stopping traffic capture (ios_traffic_start/stop) and from Android equivalents. The verb 'snapshot' and the explicit 'since ios_traffic_start' establish a unique purpose without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: after ios_traffic_start has been called. It gives practical guidance on how to use includeBodies, urlSubstring, onlyErrors, and limit. It stops short of explicitly naming alternatives or excluding cases (e.g., 'use android_traffic_flows for Android'), but the sibling context and platform prefix make the usage clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ios_traffic_mock_addAInspect
Add (or update in place, if id matches an existing route) a mock/abort rule that short-circuits future matching HTTPS requests on this device inside the TLS-inspecting proxy — the request never reaches the real server. mode "mock" (default) returns the given status/headers/body; mode "abort" kills the connection so the app sees a network failure. Requires TLS capture to already be running on this device (ios_traffic_start) — routes are stored per-device and take effect live, no restart needed. Certificate-pinned apps cannot be intercepted at all (same limit as capture itself), so a route targeting pinned traffic will simply never match.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Route id to update in place (replaces the existing route); omit to auto-generate a new one | |
| body | No | Response body to inject for mode "mock" (text, or base64 when bodyEncoding is "base64") | |
| mode | No | "mock" injects a canned response (default); "abort" kills the connection | |
| udid | Yes | iOS device UDID | |
| method | No | Optional HTTP method filter (e.g. "GET"/"POST"); matches any method when omitted | |
| status | No | HTTP status to inject for mode "mock" (default 200) | |
| delayMs | No | Latency to inject before responding/aborting, in ms (clamped to 60s server-side) | |
| enabled | No | Whether the route is active (default true) — disabled routes are kept but ignored | |
| headers | No | Response headers to inject for mode "mock", as {headerName: value} — e.g. {"content-type": "application/json"} | |
| matchUrl | Yes | URL pattern to match against the request's full URL | |
| matchType | No | How matchUrl is interpreted against the request URL (default "contains") | |
| bodyEncoding | No | Encoding of `body` (default "text") |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the short-circuit behavior, mode outcomes (mock returns status/headers/body, abort kills connection), live application of routes, and the pinned-app limitation. It does not mention edge cases like overlapping rules or persistence semantics, but overall it is highly transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four dense sentences, front-loaded with the primary action, then modes, prerequisites, and limitations. Every sentence earns its place without redundancy, making it an efficient and well-structured description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 12 parameters, no annotations, and no output schema, the description covers key contextual needs: prerequisites, effect, and constraints. It lacks return-value details and explicit examples, but for an add/update tool, the provided context is largely sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides a 100% coverage with detailed descriptions for all 12 parameters, including enums and defaults. The description reinforces the mode semantics but doesn't add new parameter-level details beyond what the schema already offers. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a specific verb ('Add or update') and a specific resource (mock/abort rule for HTTPS requests on an iOS device via TLS proxy). It distinguishes itself from siblings by naming the platform (ios) and the traffic interception mechanism, while also explaining the two modes (mock/abort) that affect behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states a prerequisite ('Requires TLS capture to already be running on this device (ios_traffic_start)') and a limitation ('Certificate-pinned apps cannot be intercepted at all'). This gives clear context for when to use the tool, though it does not explicitly compare to alternatives like ios_traffic_mock_remove.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ios_traffic_mock_listAInspect
List the mock/abort routes currently configured for this device (see ios_traffic_mock_add).
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. The verb 'List' implies a read-only operation, and the description states what it lists. However, it does not disclose return format, potential side effects, or any prerequisites, though for a list operation this is minimal risk.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is front-loaded with the action and resource, and it references a related tool for additional context. 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.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter list tool with no output schema or annotations, the description is adequately complete. It states the purpose and directs users to ios_traffic_mock_add for related actions. It doesn't explain all possible sibling relationships, but the tool's simplicity makes this acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes the only parameter (udid) with 'iOS device UDID', providing 100% coverage. The description does not add any additional parameter semantics beyond what the schema provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'List' and identifies the resource as 'mock/abort routes currently configured for this device'. This clearly distinguishes it from sibling tools like ios_traffic_mock_add and ios_traffic_mock_remove, which perform different actions on the same resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies when to use this tool: when you need to see the currently configured mock/abort routes. It also references ios_traffic_mock_add for related context. It does not explicitly state when not to use it or list alternatives, but for a simple list operation this is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ios_traffic_mock_removeAInspect
Remove one mock/abort route by id, or every route on this device when all is true. Returns the resulting route list.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Route id to remove (from ios_traffic_mock_add or ios_traffic_mock_list) | |
| all | No | Remove every route configured for this device instead of a single one | |
| udid | Yes | iOS device UDID |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the two removal modes and that it returns the resulting route list, which is valuable since there are no annotations and no output schema. However, it doesn't mention potential side effects such as whether removal is immediate, reversible, or impacts existing traffic, so behavioral transparency is limited but not misleading.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that efficiently conveys the action, its conditionals, and the return value. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with three parameters and no output schema or annotations, the description covers the essential behavior: what it removes, the alternative modes, and the result. It lacks edge-case details like error handling or side-effect warnings, but is adequate for typical use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Since schema description coverage is 100%, the description's role is minimal. It adds a small semantics by presenting `id` and `all` as mutually exclusive modes ('by `id`' vs 'every route when `all` is true'), which is not explicitly stated in the schema. This adds modest value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Remove one mock/abort route by `id`, or every route on this device when `all` is true.' This is a specific verb (Remove) with a resource (mock/abort route) and explicit conditions, distinguishing it from add/list sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides context on when to use the tool (to remove mock/abort routes) and references where the route `id` comes from (ios_traffic_mock_add or ios_traffic_mock_list). However, it doesn't explicitly exclude alternatives like ios_safari_mock_remove, though the tool name provides sufficient scope.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ios_traffic_startAInspect
Start TLS inspection on a physical iOS device: brings up a per-device TLS-inspecting proxy and installs a CA-trust + HTTP-proxy config profile, so subsequent HTTPS traffic is DECRYPTED and captured (works for native apps too, unlike Safari DevTools). Then drive the app and read flows with ios_traffic_flows. Defaults to the supervised SILENT install (zero on-device interaction); if no supervision keybag is configured it falls back to a prompt install (user taps Install on the device). Certificate-pinned apps will not decrypt.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID | |
| silent | No | Supervised silent install (default true). Set false to force the on-device prompt install. Silent requires the device to be supervised and a supervision keybag to be configured on the server. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so thoroughly. It discloses the proxy setup, CA-trust profile installation, decryption behavior, native app support, silent vs. prompt install fallback, the supervision keybag requirement, and the limitation with certificate-pinned apps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the main action and proceeds logically through purpose, native app distinction, follow-up workflow, install modes, and caveat. Every sentence contributes useful behavioral or usage information without unnecessary fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex start-operation with no output schema, the description covers the full behavioral picture: what gets installed, decryption effects, interaction requirements, fallback logic, limitations, and the next step. It is sufficiently complete for an agent to correctly invoke and interpret the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, providing a baseline of 3. The description adds meaningful context by explaining the `silent` default, when a fallback to prompt install occurs, and the supervision keybag requirement, going beyond the schema's basic boolean description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Start TLS inspection on a physical iOS device.' It clearly distinguishes this from sibling tools by explaining it enables decrypted HTTPS capture for native apps 'unlike Safari DevTools' and points to ios_traffic_flows for reading flows.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clear context is provided: the tool is for starting TLS inspection on physical iOS devices, and it explicitly contrasts with Safari DevTools for native app coverage. It also names the follow-up tool ios_traffic_flows, but does not explicitly state when to avoid using it or mention status/stop siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ios_traffic_statusAInspect
Report whether TLS inspection is running for a device and how many flows are buffered.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of disclosing behavior. It clearly indicates the tool is a report (non-mutating) and specifies exactly what it reports: TLS inspection status and buffered flow count. It does not mention any side effects or prerequisites, but for a status lookup, the description is sufficiently transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence that directly conveys the tool's purpose without any filler or redundant phrasing. It is appropriately sized and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple status-reporting tool with one parameter, no output schema, and no nested objects. The description fully explains what the tool does and what information it returns (running state and buffered flow count), which is sufficient for an agent to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for the single parameter 'udid' ('iOS device UDID'). The tool description does not add any extra meaning or context beyond the schema, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Report' and clearly identifies the resource: whether TLS inspection is running and the number of buffered flows. This distinguishes it from sibling tools like ios_traffic_start, ios_traffic_stop, and ios_traffic_flows, which have action-oriented or flow-listing purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies its use as a status-checking tool, but it lacks explicit guidance on when to use it versus alternatives. There is no mention of 'use after ios_traffic_start' or 'before ios_traffic_stop', nor any exclusions. The context of sibling tools suggests a clear niche, but the description itself does not articulate when to invoke it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ios_traffic_stopAInspect
Stop TLS inspection for a device from THIS (AI) consumer only. If the workspace UI (or another agent) also has capture open on the same device, the TLS-inspecting proxy and CA/proxy profile are left running for them — the response includes stillRunning: true in that case. Only when every consumer has stopped are the profile removed, the proxy killed, and buffered flows discarded.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID |
Tool Definition Quality
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 conditional cleanup behavior, the stillRunning:true response signal, the lifecycle of the profile/proxy, and that buffered flows are discarded. This goes far beyond a simple mutation statement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a compact two-sentence block that front-loads the primary action and then packs necessary conditionals and side effects without redundancy. Every clause adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description covers the action, conditional behavior, result signaling, and cleanup semantics. It fully equips an agent to decide when to call this tool and what to expect in response, even for a nuanced multi-consumer scenario.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (udid is described as 'iOS device UDID'), so the baseline is 3. The description does not add further parameter detail, but none is needed given the schema's clarity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource+scope: 'Stop TLS inspection for a device from THIS (AI) consumer only.' This clearly differentiates from sibling tools like ios_traffic_start and ios_traffic_status by naming the action and its limited consumer scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides strong contextual guidance by explaining when the full cleanup happens (only when every consumer stops) and when the proxy is left running (if UI or another agent has capture open). It implies when to call this tool (to stop this AI's TLS inspection) but does not explicitly name alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ios_uninstall_appBInspect
Uninstall an app from an iOS device by bundle ID. No automation session required.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID | |
| bundleId | Yes | App bundle ID to uninstall |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID |
Tool Definition Quality
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.
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.
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.
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.
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.
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_upload_targetsAInspect
Find where to push a file so a FILE PICKER on the device can select it — for driving an upload in Safari or in an app under test. Call this before ios_file_push when the file is meant to be chosen by a picker, because writing a file and a picker seeing it are not the same thing: the shared media directory is writable but NO picker reads it (a JPEG pushed to /DCIM does not enter the Photos library, verified on iOS 26.6 even across a reboot, and the media Downloads folder is not the Files app's Downloads). Returns app containers with pickable_from: ["files_app"] means that app declares UIFileSharingEnabled, so its Documents/ is listed under "On My iPad" in the Files app — which is what Safari's "Choose File" browses. An empty pickable_from means the push still works and the app itself can read the file, but no picker will show it. Pickable targets sort first; push to targets[0].push_path. If nothing is pickable, advice says what to change.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description takes full responsibility for behavioral disclosure. It goes beyond a simple statement by revealing that the shared media directory is writable but not picker-visible, verifying this on iOS 26.6, and explaining the meaning of `pickable_from` values, sorting behavior, and the `advice` fallback. This is rich, actionable context that fully informs the agent about side effects 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but not overly long; every sentence contributes value. It opens with the core purpose, then provides usage guidance, followed by behavioral and output details. The structure flows logically from what to do, to pitfalls, to how to interpret results. Slight verbosity from the detailed examples is warranted given the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, absence of an output schema, and single required parameter, the description is remarkably complete. It explains return values (`pickable_from`, `push_path`, `advice`), how to act on the result (push to `targets[0].push_path`), why certain paths fail, and what the user should do if nothing is pickable. No critical information is missing for 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, `udid`, is fully documented in the schema with 'iOS device UDID', giving 100% schema coverage. The description does not add any additional parameter-specific detail beyond implicit reference to the device. Since the schema already covers the parameter semantics, the description's lack of added info keeps this at baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb+resource: 'Find where to push a file so a FILE PICKER on the device can select it'. It clearly distinguishes itself from ios_file_push by focusing on picker-visible locations, and even references ios_file_push as the subsequent action. This is unambiguous and differentiates the tool from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool: 'Call this before ios_file_push when the file is meant to be chosen by a picker'. It also explains why this is necessary, noting that writing a file and a picker seeing it are not the same thing, and gives a concrete example of a common pitfall. This provides clear context and an exclusion criterion for when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ios_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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID |
Tool Definition Quality
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID | |
| element | No | Narrow to one element by accessibility label, resolved the same way ios_tap_by_label resolves it. | |
| onlyIssues | No | Return only elements with a flagged problem, skipping ones that announce fine. Default false. |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | iOS device UDID |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| labels | No | Optional labels to attach. Each label must be a single token (no spaces). | |
| summary | Yes | Short issue title. Keep under 200 chars; longer summaries get truncated by Jira. | |
| issueType | No | Issue type name (e.g. "Bug", "Task", "Story"). Defaults to "Task" if omitted. Must match a type available in the target project. | |
| projectKey | Yes | Jira project key (e.g. "ACME", "PROJ"). All uppercase letters/digits/underscore. | |
| description | No | Issue body. Plain text — markdown is not interpreted. Convert markdown to plain prose before passing. |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Jira issue key in the form PROJECT-NUMBER (e.g. "ACME-123" or "PROJ-4567") |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
jira_searchAInspect
Search Jira issues with a JQL query. Returns up to 50 matching issues with the same projection as jira_get_issue. Narrow the JQL if you need more — the hard cap exists to keep agent context bounded. Common JQL examples: project = ACME AND status = "In Progress", assignee = currentUser() AND created >= -7d, text ~ "login bug".
| Name | Required | Description | Default |
|---|---|---|---|
| jql | Yes | Jira Query Language query. See https://confluence.atlassian.com/jirasoftwarecloud/advanced-search-reference-jql-fields | |
| maxResults | No | Max issues to return (default 20, hard cap 50). Increase only when you need a wider sweep. |
Tool Definition Quality
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 explicitly discloses the 50-result hard cap and the projection alignment with jira_get_issue, and explains the rationale behind the cap. While it doesn't state pagination or error behavior, the cap disclosure is meaningful behavioral context 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, zero wasted words. Every sentence earns its place: the first defines the action, the second addresses the cap and its rationale, the third provides three concrete, varied JQL examples. Exceptionally economical given the information conveyed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a search tool with two well-documented parameters and no output schema, the description covers the essentials: search mechanism, result cap, projection equivalence to a known sibling tool, and usage examples. It doesn't describe return value structure, but there's no output schema and the projection reference partially compensates. A small gap remains on pagination or offsetting for the 50-cap case.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema documents both parameters well. The description adds value by explaining the default (20) and cap (50) for maxResults and by providing JQL syntax examples, but the 'same projection as jira_get_issue' reference is useful structural context. This is a solid baseline-3 case where schema and description share the load evenly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states a specific verb+resource: 'Search Jira issues with a JQL query.' It names the search mechanism (JQL), the resource (Jira issues), the return limit (50), and the projection (same as jira_get_issue). This clearly distinguishes it from sibling tools like jira_get_issue (single issue) 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides concrete guidance on when to use: narrow the JQL when more than 50 results are needed, with explicit rationale (hard cap to keep agent context bounded). Includes common JQL examples showing realistic usage patterns. Lacks explicit when-not-to-use guidance against jira_get_issue, but the examples and cap explanation convey clear usage context.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | Review status to filter by. Defaults to "pending". | |
| replay_id | No | Optional — 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. |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
playwright_backAInspect
Go back one history entry in the DESKTOP grid browser (by pageId). Not a device — for a phone or tablet use webpage_back.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | Yes | Page ID from web_navigate |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must carry the behavioral burden. It clearly identifies the action and platform scope, but does not disclose what happens when history is empty, whether the page reloads, or what the tool returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two terse sentences deliver the core action, the scope, and the device exclusion with no filler. The most important information is front-loaded in the first sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with no output schema, the description covers the essential success path and routing constraints. Minor edge cases like empty browsing history are not addressed, but they are low-impact for such a simple operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes pageId as 'Page ID from web_navigate' with 100% coverage. The description only restates that the operation is keyed by pageId and adds no additional parameter semantics beyond the schema, so it stays at the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise action ('Go back one history entry') and a specific resource ('DESKTOP grid browser (by pageId)'). It also distinguishes itself from the sibling webpage_back by noting it is not for phone or tablet use.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent when to use this tool (desktop grid browser) and when not to use it (phone or tablet), naming the alternative tool, webpage_back. This gives clear routing guidance without relying on inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playwright_console_messagesAInspect
Console output captured from the DESKTOP grid browser page (by pageId) since it opened, including page errors. Buffered from load — nothing is lost by asking late. NOT a device — for a real phone or tablet use android_devtools_console_logs or ios_safari_console_logs (by udid).
| Name | Required | Description | Default |
|---|---|---|---|
| filter | No | Case-insensitive substring filter, e.g. "error" | |
| pageId | Yes | Page ID from web_navigate |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries behavioral disclosure and it adds valuable details: logs are buffered from page load, asking late loses nothing, and page errors are included. It does not describe return shape or permissions, but those are less critical for this read-oriented console log tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences with no irrelevant detail: it front-loads what the tool returns, then explains buffering behavior, then gives device alternatives. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple log retrieval tool with no output schema, it explains the data scope, buffering semantics, and non-device limitation. The main missing detail is the exact return shape, but the content is described well enough for an agent to invoke and interpret it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents both parameters fully, including 'Page ID from web_navigate' and 'Case-insensitive substring filter.' The description mostly restates 'by pageId' without adding extra parameter-level information, so it stays at the schema-coverage baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: captured console output from the DESKTOP grid browser page identified by pageId, including page errors. It clearly differentates this from device console tools by asserting 'NOT a device.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent when to call late: 'Buffered from load — nothing is lost by asking late.' It also gives when-not-to-use and named alternatives: 'NOT a device — for a real phone or tablet use android_devtools_console_logs or ios_safari_console_logs (by udid).'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playwright_dragAInspect
Drag one element onto another in the DESKTOP grid browser (by pageId) — reorderable lists, kanban columns, file drop targets. NOT a device — there is no webpage_drag; on a real phone or tablet use device_swipe / device_drag_drop (Android) or ios_drag_drop (iOS), by udid.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | CSS selector of the drop target | |
| from | Yes | CSS selector of the element to drag | |
| pageId | Yes | Page ID from web_navigate |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It adds useful behavioral context about the environment (desktop grid browser, pageId) and device exclusions, but it does not disclose side effects, visibility requirements, waits, or failure behavior of the drag interaction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences cover the action, scope, typical use cases, and the key device alternatives. There is no filler, and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple three-parameter drag action with fully documented schema, this description is nearly complete: it identifies the target environment, the pageId mechanism, and when to route to other tools. It does not mention return values or error conditions, and it leaves the relationship to web_drag implicit, so it is not a perfect 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: pageId is tied to web_navigate, and from/to are described as CSS selectors. The description adds use-case color (reorderable lists, kanban, file drop) but no additional parameter constraints or syntax beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Drag one element onto another' in the 'DESKTOP grid browser (by pageId)'. It also lists concrete use cases and explicitly distances itself from device tools, so an agent can distinguish it from the many sibling automation tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-not guidance ('NOT a device') and names Android/iOS alternatives: device_swipe, device_drag_drop, ios_drag_drop. However, it does not explicitly contrast with the sibling web_drag, even though the 'DESKTOP grid browser (by pageId)' qualifier partially covers that distinction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playwright_fill_formAInspect
Fill several fields at once in the DESKTOP grid browser (by pageId). One call instead of a web_type per field — noticeably faster on a long form, and it reports which field failed. NOT a device — there is no webpage_fill_form; on a real phone or tablet fill fields one at a time with webpage_type (by udid).
| Name | Required | Description | Default |
|---|---|---|---|
| fields | Yes | Fields to fill, in order | |
| pageId | Yes | Page ID from web_navigate |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the behavioral disclosure burden. It clearly communicates that the tool performs a batch mutation, claims a performance benefit, and importantly states that it reports which field failed. A minor gap is that it does not specify what happens to already-filled fields when one fails, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three efficient sentences: the first states the core behavior and target, the second adds when it is beneficial and a key outcome, and the third routes around the main alternative. No filler or redundant restating of the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-parameter tool with full schema coverage and no output schema, the description gives enough context to select and invoke it correctly: target environment, pageId source, batching behavior, failure reporting, and mobile alternative. It could additionally describe the return format or partial-failure semantics, but those are not blockers.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters pageId and fields are already documented in the schema. The description adds the context of multi-field batching and failure reporting, but does not need to explain parameter formats further; baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a precise action ('Fill several fields at once') on a specific resource ('DESKTOP grid browser (by pageId)'), making the tool's purpose immediately clear. It also explicitly distinguishes itself from the per-field web_type flow and from a device-level tool, so an agent can tell it apart from siblings like web_type and webpage_type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage guidance is explicit: use this tool for filling multiple fields in one call to be faster on long forms, and do not use it on a real phone/tablet — instead use webpage_type by udid. It also warns that there is no webpage_fill_form equivalent, reducing the chance of an agent searching for a nonexistent sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playwright_forwardAInspect
Go forward one history entry in the DESKTOP grid browser (by pageId). Not a device — for a phone or tablet use webpage_forward.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | Yes | Page ID from web_navigate |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It clearly states the core behavior: navigating forward in history. However, it does not disclose edge-case behavior such as what happens when there is no forward history entry, whether it returns a result, or whether it changes the current page state beyond navigation. This is a minimal but not deeply transparent description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action and scope, followed by a clear exclusion. There is no redundant wording or filler. Every sentence contributes either the action, the context, or routing guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity action with one parameter, no output schema, and no annotations, the description is complete enough. It tells the agent what the tool does, the environment it operates in, when not to use it, and which alternative to use. The parameter is already fully documented in the schema, so nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage for the single parameter and already describes pageId as 'Page ID from web_navigate'. The description merely references pageId without adding new semantic detail, so the baseline score of 3 applies. No additional parameter meaning is needed for this simple one-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Go forward one history entry'), a specific target ('the DESKTOP grid browser'), and the required handle ('by pageId'). It clearly differentiates itself from the sibling webpage_forward by explicitly stating it is not for phone/tablet devices. An agent can understand exactly what this tool does and how it differs from nearby tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when not to use this tool ('Not a device') and provides the alternative for the excluded case ('for a phone or tablet use webpage_forward'). This gives clear usage routing without requiring the agent to inspect other tool definitions. The implied use case, desktop grid browser navigation, is also clear from the first sentence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playwright_get_attributeAInspect
Read one attribute of an element in the DESKTOP grid browser (by pageId) — href, value, aria-label, data-*, anything. Not a device — for a phone or tablet use webpage_get_attribute.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | Yes | Page ID from web_navigate | |
| selector | Yes | CSS selector of the element | |
| attribute | Yes | Attribute name, e.g. href / value / aria-label |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It clarifies that this is a read-only operation and scopes it to desktop grid browser sessions. It does not mention what happens when the attribute is missing or whether the return value is null, but for a simple attribute read this is a reasonable level of transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The core action is front-loaded, followed by the key constraint and the sibling alternative. Every part earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter read tool with full schema coverage, the description covers what the tool does, where it applies, and which sibling to use instead. It lacks an explicit statement of the return value format or missing-attribute behavior, but the explanation is adequate for an agent to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds useful nuance by showing that arbitrary attributes including data-* are supported and emphasizing 'anything', which goes beyond the schema's href/value/aria-label examples. It also reinforces the pageId-based environment.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Read one attribute of an element in the DESKTOP grid browser (by pageId)'. It gives concrete examples like href, value, aria-label, and data-*, and explicitly distinguishes itself from mobile/tablet via webpage_get_attribute, making sibling differentiation clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use it (desktop grid browser elements) and when not to ('Not a device — for a phone or tablet use webpage_get_attribute'). This names the alternative tool directly, leaving no ambiguity about the intended context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playwright_get_textAInspect
Read visible text from the DESKTOP grid browser (by pageId) — one element, or the whole page when no selector is given. This is how you ASSERT on what is actually on screen. Not a device — for a phone or tablet use webpage_get_text (by udid).
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | Yes | Page ID from web_navigate | |
| selector | No | CSS selector; omit for the whole page body |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the safety/behavior burden. It discloses that only visible text is read, that omitting selector returns the whole page, and frames it as an assertion/read operation. It doesn't cover edge cases like missing elements, but for a read-only text tool this is solid behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences: core function, primary use case, and routing to alternative. No filler, and the most important scoping detail is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity, 2-parameter read tool, the description covers what it does, how to target whole page vs element, when to use it, and which sibling to use instead. The absence of an output schema is mitigated because returning text is self-evident from 'Read visible text.'
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds value by explaining selector omission yields whole-page text and that pageId refers to the desktop grid browser. It reinforces the schema's 'omit for the whole page body' with the 'one element' contrast.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action — 'Read visible text' — and a precise resource: the DESKTOP grid browser identified by pageId. It also clarifies scope (one element vs whole page) and explicitly differentiates from webpage_get_text for phone/tablet, so an agent can distinguish it from siblings without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly tells the agent when to use this tool: to ASSERT on what is actually on screen. It also provides an exclusion and alternative by saying 'Not a device — for a phone or tablet use webpage_get_text (by udid).' This is direct routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playwright_hoverAInspect
Hover an element in the DESKTOP grid browser (by pageId) — the way to open a hover menu or reveal a tooltip before clicking. Not a device — for a phone or tablet use webpage_hover.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | Yes | Page ID from web_navigate | |
| selector | Yes | CSS selector of the element |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden. It clearly states this is a desktop-browser hover action, not a device action, and explains the expected UI effect (opening hover menus or revealing tooltips). It does not detail waiting behavior or error cases, but for a simple hover gesture the core behavior is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no filler. The main action and platform context are front-loaded, followed by a useful alternative pointer. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity tool with two fully documented parameters and no output schema, the description provides sufficient context: what it operates on, when to use it, and what to use instead on phone/tablet. It could mention visibility requirements or wait behavior, but these are not critical for understanding how to invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents pageId and selector. The description adds minimal parameter-level meaning beyond 'by pageId' and the desktop-grid context, matching the baseline for well-covered schemas.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Hover an element in the DESKTOP grid browser (by pageId)'. It also states the functional purpose of the action ('open a hover menu or reveal a tooltip before clicking') and explicitly distinguishes itself from the device-oriented sibling webpage_hover.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear when-to-use guidance: use it to reveal hover menus or tooltips before clicking. It also gives an explicit exclusion and alternative: 'Not a device — for a phone or tablet use webpage_hover.' This is direct and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playwright_network_requestsAInspect
Network requests made by the DESKTOP grid browser page (by pageId) since it opened, with status codes. Buffered from load. Use filter to narrow to an API path. NOT a device — for a real phone or tablet use android_devtools_capture_network or ios_safari_capture_network (by udid).
| Name | Required | Description | Default |
|---|---|---|---|
| filter | No | Case-insensitive substring match on the URL | |
| pageId | Yes | Page ID from web_navigate | |
| failedOnly | No | Only show responses with status >= 400 |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral burden. It discloses that data is buffered from load and includes status codes, which is useful. However, it does not explicitly state whether the operation is read-only, whether the buffer resets on navigation, or whether it returns the full buffer each time—ambiguities that matter for a network inspection tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, each with a clear role: core purpose, buffer behavior, filter tip, and device exclusion. The structure is logical and front-loaded. There is slight redundancy between 'since it opened' and 'Buffered from load', but it does not detract from the overall clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema and no annotations, the description is reasonably complete for invocation (pageId, filter, scope). However, it leaves the return format vague beyond 'status codes' and does not clarify buffer reset behavior or page lifecycle requirements. An agent could call it correctly but might misinterpret results without further details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds a useful hint for filter ('narrow to an API path') but does not add meaning for failedOnly or go beyond what the schema already provides for pageId. It does not compensate for any gaps because there are none, but it also doesn't significantly enrich parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns network requests for a specific desktop grid browser page identified by pageId, scoped to requests since the page opened, and includes status codes. It also explicitly distinguishes itself from device-specific tools by naming alternatives, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'NOT a device' and directs users to android_devtools_capture_network or ios_safari_capture_network for real phone/tablet contexts. It also advises using the filter parameter to narrow to an API path, providing concrete when-to-use and 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.
playwright_press_keyAInspect
Press a key in the DESKTOP grid browser (by pageId) — Enter, Tab, Escape, ArrowDown, or a chord like Control+A. Targets an element when a selector is given, otherwise the focused one. Not a device — for a phone or tablet use webpage_press_key.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Key name, e.g. Enter / Tab / Escape / ArrowDown / Control+A | |
| pageId | Yes | Page ID from web_navigate | |
| selector | No | CSS selector to focus first; omit to use focus as-is |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. It discloses targeting behavior (selector vs focused element), the desktop-browser scope, and the fact that it is not a hardware/device key press. It could add what the call returns or whether it waits, but for a simple input action this is 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, purposeful sentences with the core action and key examples first. No filler; each clause adds scope, targeting behavior, or an alternative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 3-parameter key-press tool, the description covers what keys are accepted, where the action applies, how targeting works, and which sibling to use instead. No output schema is needed for this fire-and-forget action, and no critical invocation detail is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description mostly restates the schema's key examples and selector behavior without adding new parameter-level details beyond the desktop grid browser context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action ('Press a key'), a specific resource ('DESKTOP grid browser by pageId'), and key examples. It also distinguishes itself from device-related siblings by explicitly saying it is not for phone/tablet and pointing to webpage_press_key.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent when not to use it ('Not a device') and names the alternative for phone/tablet ('webpage_press_key'). The selector-or-focused-element behavior also clarifies the correct call pattern.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playwright_reloadAInspect
Reload the current page in the DESKTOP grid browser (by pageId). Not a device — for a phone or tablet use webpage_reload.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | Yes | Page ID from web_navigate |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral transparency burden. It discloses that the tool operates on the current page in the DESKTOP grid browser and requires a pageId, but it does not mention side effects such as losing unsaved page state or whether it waits for page load. Reload semantics are fairly standard, but the description adds only modest behavioral context beyond the action itself.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exceptionally concise: one sentence states the action and scope, and a second sentence provides the key exclusion and alternative. Every piece of text earns its place, and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, single-parameter reload tool, the description is complete. The parameter is fully documented in the schema, there is no output schema requiring return-value explanation, and the description provides enough scoping and sibling differentiation 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already covers the single parameter with a clear description ('Page ID from web_navigate'), and schema coverage is 100%. The tool description merely repeats 'by pageId' without adding new details about where the ID comes from or how it is used, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Reload the current page'), the specific resource ('DESKTOP grid browser'), and the required identifier ('by pageId'). It also differentiates itself from phone/tablet reload by naming webpage_reload as the alternative, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says this tool is not for a device and directs the agent to use webpage_reload for phone or tablet. It does not mention other potential alternatives like web_reload, but the desktop vs. device distinction provides sufficient usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playwright_resizeAInspect
Resize the DESKTOP grid browser viewport (by pageId) — for checking responsive breakpoints without a real handset. A real phone is still the honest test; this only changes the window. NOT a device — a real handset has a fixed screen, so there is no webpage_resize; pick a different device by udid instead.
| Name | Required | Description | Default |
|---|---|---|---|
| width | Yes | Viewport width in CSS pixels | |
| height | Yes | Viewport height in CSS pixels | |
| pageId | Yes | Page ID from web_navigate |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It clearly states this only changes the window and is not a real hardware device, which is the key non-obvious behavior. It does not mention return values or side effects, but for a simple viewport resize, the main behavioral caveat is covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and includes useful caveats about real-device fidelity and alternative device selection. It is slightly repetitive with the 'real handset' warning appearing twice, but every sentence still contributes meaningful guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple three-parameter resize tool with no output schema, the description covers purpose, usage context, limitations, and the alternative path. The schema handles parameter details, and the description fills in the behavioral context needed for correct selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents all three parameters with 100% coverage, so the baseline is 3. The description adds no additional parameter-level meaning beyond referring to pageId and viewport/window terminology already present in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: 'Resize the DESKTOP grid browser viewport (by pageId)' and immediately distinguishes the tool from real-device resizing. It is clear this is a viewport-level operation, not a device emulator.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly tells the agent when to use it ('checking responsive breakpoints without a real handset') and when not to ('A real phone is still the honest test'). It also directs the agent to pick a different device by udid for actual device behavior, providing a concrete alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playwright_select_optionAInspect
Choose an option in a in the DESKTOP grid browser (by pageId), by value or visible label. Not a device — for a phone or tablet use webpage_select_option.
| Name | Required | Description | Default |
|---|---|---|---|
| label | No | Visible option text; used when value is not given | |
| value | No | Option value attribute | |
| pageId | Yes | Page ID from web_navigate | |
| selector | Yes | CSS selector of the <select> |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It does add environment constraints (desktop grid, not a device) and selection modes (by value or visible label), but it does not disclose side effects such as triggered change events, form submission, or failure behavior when no matching option exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences front-load the operation and context, then add the alternative. There is no filler or repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple select tool with a fully described schema, the description is nearly complete: it gives the action, target context, parameter modes, and the key sibling alternative. It does not describe return/error behavior, but the operation is simple and the schema covers the inputs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents pageId, selector, value, and label. The description adds the relationship 'by value or visible label,' which mirrors the schema and adds no new syntax or precedence details, so a baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Choose'), a specific resource ('an option in a <select>'), and a specific execution context ('DESKTOP grid browser (by pageId)'). It further distinguishes itself from the phone/tablet sibling by naming webpage_select_option.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states the context in which to use the tool (desktop grid browser with a pageId) and gives an explicit when-not rule with an alternative: 'Not a device — for a phone or tablet use webpage_select_option.' This leaves little ambiguity about routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playwright_upload_fileAInspect
Set files on a file input in the DESKTOP grid browser (by pageId). Paths are read on the RDS host, not your machine. NOT a device — there is no webpage_upload_file; the device equivalent is ios_safari_set_input_files (by udid).
| Name | Required | Description | Default |
|---|---|---|---|
| paths | Yes | Absolute file paths on the RDS host | |
| pageId | Yes | Page ID from web_navigate | |
| selector | Yes | CSS selector of the <input type=file> |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It discloses the non-obvious trait that paths are read on the RDS host rather than the caller's machine, and it clarifies the browser/device boundary. It does not describe return behavior or failure modes, but for a simple file-input setter the core side-effect expectations are communicated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each with a distinct purpose: what the tool does, where paths are read, and what it is not. The important scoping caveat appears early, and device alternatives are given without padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with only three fully documented required parameters and no output schema, the description plus schema is nearly sufficient. The main missing piece is behavior on error (e.g., nonexistent host paths or invalid selectors), but an agent can invoke the tool correctly with the information given.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds the RDS-host warning, but that is already reflected in the paths schema ('Absolute file paths on the RDS host'). No parameter-level meaning beyond the schema is provided, though none is urgently needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action and resource ('Set files on a file input') and scopes it to the DESKTOP grid browser keyed by pageId. It explicitly marks what the tool is not (a device operation) and names sibling alternatives, so an agent can differentiate it from ios_safari_set_input_files and web_upload_file.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States when it applies (DESKTOP grid browser, pageId) and when not ('NOT a device'), with an explicit alternative (ios_safari_set_input_files by udid). The RDS-host caveat also prevents the common mistake of using local paths. This is 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.
playwright_wait_forAInspect
Wait for a condition in the DESKTOP grid browser (by pageId) before continuing: an element to appear or disappear, text to show up, or a fixed delay. Prefer this over polling with web_evaluate. Not a device — for a phone or tablet use webpage_wait_for (by udid).
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | Wait until this text appears anywhere on the page | |
| state | No | visible | hidden | attached | detached (default: visible). Applies to selector. | |
| pageId | Yes | Page ID from web_navigate | |
| selector | No | CSS selector to wait for | |
| timeoutMs | No | Timeout in ms (default 10000) |
Tool Definition Quality
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 conveys that the tool blocks until a condition is met and describes supported condition types, but it does not state behavior on timeout, whether it returns a value or throws, or details about polling semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: the first sentence states the core purpose and scope, the second gives usage guidance, and the third explicitly names the alternative for mobile. Every sentence earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a wait tool with full schema coverage, the description covers what it waits for, which browser context it applies to, how it relates to web_evaluate, and when to select webpage_wait_for instead. The main gap is the absence of timeout/error outcome details, but the schema's timeoutMs parameter partially offsets that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and each parameter has a clear schema-level description. The tool description adds contextual meaning by naming the condition categories (element, text, delay) but does not provide meaningful additional semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as a wait-for-condition operation on the DESKTOP grid browser using pageId, and enumerates the exact conditions it handles: element appear/disappear, text appearance, or fixed delay. It also explicitly distinguishes itself from webpage_wait_for, making it easy for an agent to select correctly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit guidance on when to use this tool, including a strong preference over polling with web_evaluate. It also provides a clear exclusion: for phone/tablet browsers, use webpage_wait_for (by udid).
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.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | Optional short rationale for your decision — logged for traceability, not stored on the record. | |
| decision | Yes | Your verdict on this candidate. | |
| review_id | Yes | Review id from list_visual_reviews |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| sessionId | Yes | Session ID |
Tool Definition Quality
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.
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.
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.
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.
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.
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)
| Name | Required | Description | Default |
|---|---|---|---|
| elementId | Yes | Element ID from session_find_element | |
| sessionId | Yes | Session ID |
Tool Definition Quality
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.
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.
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.
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.
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.
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.)
| Name | Required | Description | Default |
|---|---|---|---|
| level | No | Filter to a single level. Pass "error" to see only errors. | |
| limit | No | Max entries to return (most recent first-shown). Default 50, max 500. | |
| sessionId | Yes | Browser session ID (same id used by the other session_* tools) |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| browserName | Yes | Browser name (chrome, firefox, MicrosoftEdge) or empty for a mobile session | |
| capabilities | No | Additional W3C capabilities (e.g. automation-engine settings, device UDID) | |
| platformName | No | Platform (ANDROID, IOS, linux, etc.) | |
| browserVersion | No | Browser version |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| args | No | Arguments to pass to the script | |
| script | Yes | JavaScript code to execute (e.g. "return document.title") | |
| sessionId | Yes | Session ID |
Tool Definition Quality
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.
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.
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.
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.
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.
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".
| Name | Required | Description | Default |
|---|---|---|---|
| using | Yes | Locator strategy (e.g. "css selector", "xpath", "id") | |
| value | Yes | Locator value (e.g. "#login-btn", "//button[@id='submit']") | |
| sessionId | Yes | Session ID |
Tool Definition Quality
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| sessionId | Yes | Session ID |
Tool Definition Quality
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
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.
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.
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.
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.
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.
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.)
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Filter by resource type, e.g. "xhr", "fetch", "document", "script", "stylesheet", "image". | |
| limit | No | Max requests to return (most recent). Default 50, max 500. | |
| sessionId | Yes | Browser session ID (same id used by the other session_* tools) | |
| failuresOnly | No | When true, only show requests that failed or returned status >= 400. |
Tool Definition Quality
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.
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.
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.
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.
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.
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)
| Name | Required | Description | Default |
|---|---|---|---|
| sessionId | Yes | Session ID |
Tool Definition Quality
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| sessionId | Yes | Session ID to quit |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| sessionId | Yes | Session ID |
Tool Definition Quality
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Text to type into the element | |
| elementId | Yes | Element ID from session_find_element | |
| sessionId | Yes | Session ID |
Tool Definition Quality
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL to navigate to | |
| sessionId | Yes | Session ID |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| message | Yes | The feedback itself — be specific and actionable about what happened and why it mattered. | |
| category | Yes | Kind of feedback being reported. | |
| severity | No | How much this impacted the task, if applicable. | |
| tool_name | No | Name of the MCP tool this feedback concerns, e.g. "device_tap". | |
| reproduction | No | Steps/inputs that reproduce the issue, if this is a bug report. | |
| suggested_fix | No | A concrete suggestion for how the tool could be improved. |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| caseId | Yes | TestRail case id | |
| workspacePath | Yes | Path INSIDE your /workspace mount, e.g. "/workspace/screenshots/step4.png". The file must exist. | |
| displayFilename | No | Override the filename shown in TestRail. Defaults to the basename of workspacePath. |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| refs | No | Comma-separated reference keys (e.g. "PROJ-123,PROJ-124") shown as chips | |
| title | Yes | Case title (max 250 chars, will be trimmed) | |
| typeId | No | Case type_id (tenant-specific; omit for default) | |
| sectionId | Yes | TestRail section id to create the case under | |
| priorityId | No | Priority id (1-4 in stock TestRail; tenants may customise) | |
| customSteps | No | Plain-text steps (TestRail "Text" template) | |
| customPreconds | No | Preconditions text | |
| customStepsSeparated | No | Structured steps (TestRail "Steps + Expected Result" template) — preferred for BDD |
Tool Definition Quality
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.
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.
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.
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.
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.
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_find_casesAInspect
Search a TestRail project for cases whose title contains the given text (case-insensitive substring), walking ALL pages server-side. USE THIS — not testrail_list_cases — to check whether a case already exists before calling testrail_create_case, because it cannot be fooled by a truncated page. Returns only matching cases plus scanned/capReached so a "no matches" answer can be trusted. Narrow with sectionId/suiteId to scan less.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Text to look for inside case titles (case-insensitive substring) | |
| compact | No | Return only id + title per match instead of all 7 fields | |
| suiteId | No | Optional suite scope | |
| projectId | Yes | TestRail project id | |
| sectionId | No | Optional section scope |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It clearly discloses full server-side pagination, the return of scanned/capReached so 'no matches' answers are trustworthy, and case-insensitive substring matching. While it doesn't explicitly state read-only status, the verb 'search' implies a non-mutating operation, and no side effects are relevant. It doesn't cover rate limits or auth, but that is beyond expected scope for a search tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: the first states the core action, the second gives use-case-specific guidance with an explicit alternative, and the third explains result fields and a performance tip. There is no fluff, and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite lacking an output schema and annotations, the description adequately covers the tool's behavior, including the trustworthiness of 'no matches' via scanned/capReached and the effect of optional filters. It could have listed the exact return fields when compact=false, but mentioning 'all 7 fields' and the compact option gives sufficient context for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes every parameter (100% coverage), providing baseline 3. The description adds practical meaning beyond the schema by explaining why to use optional filters: 'Narrow with sectionId/suiteId to scan less.' This gives agents guidance on reducing resource usage, which is not inferable from the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Search a TestRail project for cases whose title contains the given text (case-insensitive substring), walking ALL pages server-side.' It explicitly differentiates from the sibling testrail_list_cases by naming it and stating the exact use case (checking for existing cases before create_case), making the tool's role unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides direct, actionable guidance: 'USE THIS — not testrail_list_cases — to check whether a case already exists before calling testrail_create_case, because it cannot be fooled by a truncated page.' It also advises narrowing the scan with sectionId/suiteId, covering both why and how to use the tool effectively.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| attachmentId | Yes | Attachment id from testrail_list_attachments |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| caseId | Yes | TestRail case id (the C-number, e.g. 14344) |
Tool Definition Quality
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.
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.
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.
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.
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.
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_all_casesAInspect
List EVERY case in a TestRail project/suite/section, walking all pages server-side so the caller never handles offsets. Returns compact id+title rows by default because the full form overruns the output limit on real projects — pass compact:false only for a narrow sectionId. Capped at 20 pages (5000 cases); check capReached. If you only need to know whether one specific case exists, use testrail_find_cases instead — it is far cheaper.
| Name | Required | Description | Default |
|---|---|---|---|
| compact | No | Defaults to true (id + title only). Set false for all 7 fields — only safe on a small section. | |
| suiteId | No | Optional suite scope | |
| projectId | Yes | TestRail project id | |
| sectionId | No | Optional section scope |
Tool Definition Quality
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 behaviors: server-side pagination (caller never handles offsets), output limits (capped at 20 pages/5000 cases), the compact-by-default result format, and the capReached flag. This is substantial transparency beyond what annotations might provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, zero waste. Each sentence conveys critical information: the exhaustive list behavior, the compact default rationale, and the alternative tool. The structure front-loads the main purpose and then provides warnings and alternatives.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with pagination, size caps, and no output schema, the description covers essential return behavior (compact id+title rows, capReached) and warns about practical pitfalls. It is complete enough for an agent to select and invoke the tool correctly without additional documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters already have descriptions. The description adds meaning to 'compact' by explaining the default behavior and when it's safe to set false, and to 'sectionId' by implying it narrows scope. It also mentions capReached, which relates to output, adding extra context not in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states 'List EVERY case in a TestRail project/suite/section' – a specific verb (list), resource (case), and scope. It clearly distinguishes itself from sibling tools like testrail_list_cases and testrail_find_cases by emphasizing the exhaustive nature and the alternative for single-case lookups.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the tool's intended use for listing every case and walking pages server-side. It provides a concrete exclusion: 'If you only need to know whether one specific case exists, use testrail_find_cases instead — it is far cheaper.' Also warns that compact:false should only be used with a narrow sectionId, guiding safe usage.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| caseId | Yes | TestRail case id |
Tool Definition Quality
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.
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.
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.
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.
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.
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_casesAInspect
List test cases in a TestRail project, optionally scoped to a suite and/or section. Use this to discover case ids before calling testrail_get_case, or to check what already exists before creating a new case with testrail_create_case. Returns { cases: [...], paging: {...} }, where each case is a compact summary (id, title, section_id, suite_id, priority_id, type_id, refs) — call testrail_get_case for full step detail on a specific case. Results are NOT auto-paged: TestRail caps a page at 250, so always check paging.hasMore and re-call with offset=paging.nextOffset before concluding a case does not exist. Prefer scoping with sectionId/suiteId over paging the whole project.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max cases to return in this page (TestRail default 250) | |
| offset | No | Row offset for paging past the first page | |
| compact | No | Return only id + title per case instead of all 7 fields. Roughly 15x smaller — use when scanning for whether a case exists, then call testrail_get_case for detail. | |
| suiteId | No | Suite id — required for multi-suite projects, optional for single-suite | |
| projectId | Yes | TestRail project id | |
| sectionId | No | Section id — scope results to cases directly inside this section |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries full responsibility. It discloses the return shape ({ cases, paging }), the compact per-case fields, the 250-page cap, the lack of auto-paging, and the need to check paging.hasMore and follow paging.nextOffset. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five sentences, each earning its place: purpose, use cases, return shape, pagination warning, and scoping best practice. Front-loaded with the primary action and no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description fully compensates by describing the return format, compact fields, pagination behavior, and relationship to related tools. It is complete enough for an agent to invoke correctly and avoid the common paging pitfall.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description reinforces paging semantics with 'offset=paging.nextOffset' and 'paging.hasMore', and mentions sectionId/suiteId scoping, but it does not add significant meaning beyond the already detailed schema descriptions for individual parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it lists test cases in a project with optional suite/section scoping, and explicitly mentions workflows with testrail_get_case and testrail_create_case. However, it does not explicitly distinguish itself from sibling tools like testrail_list_all_cases or testrail_find_cases, so differentiation is incomplete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance: use it to discover case ids before testrail_get_case, or to check existence before testrail_create_case. It also recommends preferring sectionId/suiteId scoping over paging the whole project. It lacks explicit when-not guidance versus alternatives like list_all_cases or find_cases.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
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.
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.
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.
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.
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.
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, newest first. Returns { runs: [...], paging: {...} } — run id (R-number), name, created_on, completed_on, and pass/fail counts. Results are NOT auto-paged: TestRail caps a page at 250, so check paging.hasMore and re-call with offset=paging.nextOffset before concluding a run does not exist. Use milestoneId or createdAfter (epoch seconds) to filter to a release or window instead of paging through history.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max runs to return in this page (TestRail default 250) | |
| offset | No | Row offset for paging past the first page | |
| projectId | Yes | TestRail project id | |
| milestoneId | No | Optional milestone filter | |
| createdAfter | No | Optional epoch-seconds lower bound on created_on |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses the non-obvious pagination behavior (not auto-paged, 250 cap), return shape, and field contents. This goes well beyond the trivial 'list runs' statement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, each earning its place: purpose, return shape, paging caveat, and filter advice. Front-loaded with primary action and scoped efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema or annotations, the description covers return structure, paging semantics, field details, and filter strategy. Complete for a list operation without overly verbose content.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. Description adds value by explaining how offset interacts with paging, that createdAfter is epoch seconds, and why to use filters instead of paging—richer than schema descriptions alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states "List TestRail runs for a project, newest first" using a specific verb and resource. Distinguishes from sibling tools like testrail_list_cases or testrail_list_suites by focusing on runs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when to use filters ("Use milestoneId or createdAfter ... instead of paging through history") and how to handle pagination ("check paging.hasMore and re-call with offset=paging.nextOffset"). Lacks direct alternative tool references, but gives clear context for effective usage.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| suiteId | No | Suite id — required for multi-suite projects, optional for single-suite | |
| projectId | Yes | TestRail project id |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | TestRail project id (from testrail_list_projects) |
Tool Definition Quality
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.
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.
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.
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.
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.
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 EVERY test inside a TestRail run, walking all pages server-side so the caller never handles offsets. Returns each test with its T-id (test instance, e.g. T1234), C-id (underlying case_id — feed this to testrail_get_case), title, and status_id. Filter by statusIds (TestRail status: 1=passed, 2=blocked, 3=untested, 4=retest, 5=failed) to e.g. list only failed tests when triaging. Capped at 20 pages (5000 tests); check capReached before concluding a test is not in the run.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | TestRail run id (R-number) | |
| statusIds | No | Optional status filter — e.g. [5] for failed only, [2,5] for blocked+failed |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full burden of behavioral disclosure, and it does so richly. It explains server-side pagination, a 20-page/5000-test cap, the meaning of returned T-id and C-id, status ID mapping, and the capReached caveat, which is critical for avoiding false negatives.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with the primary purpose. Each sentence delivers distinct value: pagination handling, return fields, filtering, and limits. No filler or redundant information—every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description fully explains what the tool returns (fields, IDs, status), how pagination works, and the critical capReached caveat. The two parameters are adequately covered, and the description is sufficient for an agent to invoke the tool correctly, even in complex triage scenarios.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for both parameters, so the baseline is 3. The description adds value beyond the schema by explaining the statusIds filter with concrete examples, clarifying the meaning of runId (R-number) implicitly, and teaching the relationship between test instances and case IDs. This is helpful but not exhaustive, hence a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists every test inside a TestRail run, with a specific verb ('List'), resource ('tests inside a TestRail run'), and distinctive scope (all pages, server-side pagination). It distinguishes itself from sibling tools that list cases or runs by explicitly mentioning test instances and run context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool: when you need tests within a run, and it suggests filtering by statusIds for triaging failed tests. It also hints at the relationship to testrail_get_case. However, it does not explicitly name alternative tools or state when not to use it (e.g., versus testrail_list_cases).
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.
| Name | Required | Description | Default |
|---|---|---|---|
| refs | No | New refs string (e.g. "PROJ-123,PROJ-124") | |
| title | No | New title (max 250 chars) | |
| caseId | Yes | TestRail case id (C-number) | |
| labels | No | Full new label set (REPLACE — read existing first if you want to add without removing). TestRail 7.5+ only. | |
| typeId | No | Change type_id | |
| priorityId | No | Change priority_id | |
| customSteps | No | New plain-text steps | |
| customPreconds | No | New preconditions | |
| customStepsSeparated | No | New structured steps (BDD-preferred). Replaces existing. |
Tool Definition Quality
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| itemId | Yes | Item id — a flow recording id (itemType='test') or plan id (itemType='testPlan') | |
| suiteId | Yes | Suite id to add the item to | |
| itemType | Yes | What itemId points at | |
| orderIndex | No | Position within the suite (appended if omitted) |
Tool Definition Quality
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Suite name (required) | |
| description | No | Optional suite description | |
| parentSuiteId | No | Parent suite id to nest this suite under (omit for a top-level suite) |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| suiteId | No | Fetch this single suite and include its items (tests + plans) | |
| parentSuiteId | No | List only suites whose parent is this id (use '' or omit for all) |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Optional label for this run | |
| udid | Yes | UDID of the device to run all resolved tests on | |
| suiteId | Yes | Suite id to execute |
Tool Definition Quality
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | Run id returned by test_suite_run |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| label | No | Optional short label for this comparison (e.g. flow/step name), for log correlation only. | |
| review_id | No | Instead 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_base64 | Yes | The live/current screenshot to compare against the baseline, raw base64 (no "data:" prefix). | |
| baseline_image_base64 | No | The baseline/expected screenshot, raw base64 PNG or JPEG (no "data:" prefix). Omit if using review_id instead. |
Tool Definition Quality
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.
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.
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.
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.
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.
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_backAInspect
Go back one history entry in the DESKTOP grid browser (by pageId). Not a device — for a phone or tablet use webpage_back.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | Yes | Page ID from web_navigate |
Tool Definition Quality
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 identifies the scope (DESKTOP grid browser) and the operation (back one history entry), and it explicitly warns that this is not for mobile devices. For a simple navigation action, this is sufficient behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler. The core action and scope are front-loaded, and the alternative tool is mentioned in the second sentence. Every word adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with a clear operation and explicit alternative routing, the description is nearly complete. It could mention behavior when there is no history entry, but that is a minor edge case for such a simple navigation action.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already states that pageId is the 'Page ID from web_navigate'. The description only reuses 'by pageId' without adding new meaning beyond the schema, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('go back'), a specific resource ('DESKTOP grid browser'), and the required identifier ('by pageId'). It distinguishes itself from webpage_back, which is the mobile/tablet counterpart, so an agent can tell them apart without needing to inspect schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when this tool should be used: for the desktop grid browser, not for a phone or tablet. It names the alternative tool (webpage_back) and the condition for choosing it, giving the agent clear routing guidance.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | Yes | Page ID from web_navigate | |
| selector | Yes | CSS selector of the element to click |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | Yes | Page ID from web_navigate |
Tool Definition Quality
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.
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.
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.
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.
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.
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_console_messagesAInspect
Console output captured from the DESKTOP grid browser page (by pageId) since it opened, including page errors. Buffered from load — nothing is lost by asking late. NOT a device — for a real phone or tablet use android_devtools_console_logs or ios_safari_console_logs (by udid).
| Name | Required | Description | Default |
|---|---|---|---|
| filter | No | Case-insensitive substring filter, e.g. "error" | |
| pageId | Yes | Page ID from web_navigate |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations were provided, so the description carries full behavioral burden. It discloses buffering behavior ('Buffered from load — nothing is lost by asking late'), scope by pageId, inclusion of page errors, and explicitly excludes device contexts. This is strong transparency beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences, each earning its place: the core purpose, the buffering guarantee, and the device exclusion with alternatives. Front-loaded with the most important information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given this is a simple log-retrieval tool with full schema parameter coverage, the description is complete for correct selection and invocation. It covers source, scope, buffer behavior, error inclusion, and sibling routing; no critical operational detail is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds little parameter detail beyond mentioning pageId by name; filter semantics are already well described in the schema with 'Case-insensitive substring filter, e.g. "error"'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource ('Console output captured from the DESKTOP grid browser page'), identifies the required key ('by pageId'), and notes it includes page errors. It also distinguishes itself from device-level log tools by explicitly saying 'NOT a device' and naming the relevant sibling alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear when-to-use context: it is for the desktop grid browser page and is buffered from page load. It also gives explicit when-not-to-use guidance and alternatives: 'for a real phone or tablet use android_devtools_console_logs or ios_safari_console_logs'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
web_dragAInspect
Drag one element onto another in the DESKTOP grid browser (by pageId) — reorderable lists, kanban columns, file drop targets. NOT a device — there is no webpage_drag; on a real phone or tablet use device_swipe / device_drag_drop (Android) or ios_drag_drop (iOS), by udid.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | CSS selector of the drop target | |
| from | Yes | CSS selector of the element to drag | |
| pageId | Yes | Page ID from web_navigate |
Tool Definition Quality
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 transparency. It conveys the action, platform scope, and common use cases, but does not disclose return behavior, side effects of a successful drag, or behavior on invalid selectors. This is adequate but leaves some operational expectations implicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long with no filler. The core action and platform scope are front-loaded, and the device-alternative guidance is packed into one efficient sentence without losing clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple three-parameter tool, the description plus schema provides the necessary context: what to drag, where, and which alternatives to use for other platforms. The main gap is the lack of explicit return-value or outcome expectations, which matters more because there is no output schema or annotations to fill that in.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema documents all three parameters with helpful descriptions, including the fact that pageId comes from web_navigate and that from/to are CSS selectors. The description only mentions pageId in passing and adds no parameter semantics beyond what the schema already provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Drag one element onto another in the DESKTOP grid browser (by pageId).' It also lists concrete use cases such as reorderable lists, kanban columns, and file drop targets, and explicitly separates this tool from device-side drag tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly defines the intended context (desktop grid browser by pageId) and explicitly names device alternatives: device_swipe / device_drag_drop for Android and ios_drag_drop for iOS. However, it does not distinguish web_drag from the closely related sibling playwright_drag, which also performs browser-based drags.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | Yes | Page ID from web_navigate | |
| script | Yes | JavaScript expression to evaluate (e.g. "document.title" or "() => window.location.href") |
Tool Definition Quality
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.
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.
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.
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.
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.
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_fill_formAInspect
Fill several fields at once in the DESKTOP grid browser (by pageId). One call instead of a web_type per field — noticeably faster on a long form, and it reports which field failed. NOT a device — there is no webpage_fill_form; on a real phone or tablet fill fields one at a time with webpage_type (by udid).
| Name | Required | Description | Default |
|---|---|---|---|
| fields | Yes | Fields to fill, in order | |
| pageId | Yes | Page ID from web_navigate |
Tool Definition Quality
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 adds valuable traits: batch operation, speed benefit, failure reporting for a specific field, and a clear exclusion of device use. It does not mention details like whether existing field values are overwritten, but the description is still substantive for a form-filling tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence earns its place: the first states the action and scope, the second explains the performance benefit and failure reporting, and the third provides a critical exclusion and alternative. It is compact, front-loaded, and free of filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with only two well-documented parameters and no output schema, the description is complete enough for an agent to invoke it correctly. It clarifies target environment, when to use it, when not to use it, and what operational behavior to expect. No crucial selection or invocation information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents pageId and fields. The description adds no significant parameter-level meaning beyond what the schema provides; it reuses 'by pageId' and mentions 'fields' but does not elaborate on selector or text semantics. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Fill several fields at once in the DESKTOP grid browser (by pageId).' It clearly distinguishes the tool from related siblings like web_type and webpage_type, so an agent can identify what this tool does without inspecting the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use this tool: for batch filling in the desktop grid browser, instead of calling web_type per field. It also says when not to use it: for real phones/tablets, use webpage_type field by field. This is direct, actionable guidance with named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
web_forwardAInspect
Go forward one history entry in the DESKTOP grid browser (by pageId). Not a device — for a phone or tablet use webpage_forward.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | Yes | Page ID from web_navigate |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of disclosing behavior. It does state the target environment and navigation intent, but it does not mention what happens when there is no forward history entry, whether it mutates browser state beyond navigation, or any prerequisites beyond pageId. This leaves 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, zero filler, with the core action and scope front-loaded. The sibling-routing guidance is included without bloating the description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, no-output-schema tool, the description covers the action, target environment, and key alternative. It does not discuss edge cases like missing history or failure behavior, but the tool is simple enough that this is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with pageId already described as 'Page ID from web_navigate'. The tool description mentions pageId again but adds little beyond the schema. Baseline 3 is appropriate because the schema handles the parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('Go forward one history entry'), a specific resource ('DESKTOP grid browser'), and identifies the required identifier ('by pageId'). It also distinguishes itself from the sibling tool webpage_forward, so an agent can tell this tool apart without inspecting schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly addresses when this tool is appropriate by stating 'Not a device' and directing phone/tablet usage to webpage_forward. It could additionally state when forward navigation is unavailable, but the core routing guidance is clear and useful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
web_get_attributeAInspect
Read one attribute of an element in the DESKTOP grid browser (by pageId) — href, value, aria-label, data-*, anything. Not a device — for a phone or tablet use webpage_get_attribute.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | Yes | Page ID from web_navigate | |
| selector | Yes | CSS selector of the element | |
| attribute | Yes | Attribute name, e.g. href / value / aria-label |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the burden of behavioral disclosure. It communicates read-only behavior and platform scope, but does not mention what happens when the element or attribute is missing. For a simple getter this is acceptable but not fully transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two focused sentences with no filler. The core action, scope, and routing alternative are all front-loaded and efficiently stated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 3-parameter read tool, the description covers what it does, where it applies, and which sibling to use for devices. It could add return-value or error behavior details, but the essential context is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are already well documented. The description adds minor context about the browser type and attribute examples, but does not meaningfully enhance parameter understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the action: reading one attribute of an element in the DESKTOP grid browser, scoped by pageId. It lists concrete attribute examples and distinguishes itself from device-based alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states the intended context (desktop grid browser, not a device) and names the alternative for phone/tablet usage: webpage_get_attribute. This provides clear routing among similar getter tools.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | Yes | Page ID from web_navigate |
Tool Definition Quality
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.
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.
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.
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.
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.
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_get_textAInspect
Read visible text from the DESKTOP grid browser (by pageId) — one element, or the whole page when no selector is given. This is how you ASSERT on what is actually on screen. Not a device — for a phone or tablet use webpage_get_text (by udid).
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | Yes | Page ID from web_navigate | |
| selector | No | CSS selector; omit for the whole page body |
Tool Definition Quality
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 conveys that this is a read-only, assertion-oriented tool operating on visible text only, and clarifies the element/page scoping behavior. It doesn't document return shape or failure modes, so it falls just short of a 5, but it is much clearer than a bare 'Get text' definition.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each earning its place: the first states the core behavior and scope, the second states the intended assertion use case, and the third routes to the correct alternative for devices. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool with full schema coverage and no nested objects, the description is nearly complete: it defines the source, optional selector behavior, intended use, and non-device exclusion. The only minor gap is the exact return representation, but since no output schema exists, the description still gives enough context for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents pageId as 'Page ID from web_navigate' and selector as 'CSS selector; omit for the whole page body'. The description reinforces the whole-page behavior but does not add meaningful new parameter semantics beyond the schema, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Read visible text from the DESKTOP grid browser (by pageId)'. It precisely defines scope (one element vs whole page) and explicitly contrasts with webpage_get_text for phone/tablet, so an agent can distinguish it from siblings without inspecting schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states when to use it ('This is how you ASSERT on what is actually on screen') and when not to ('Not a device — for a phone or tablet use webpage_get_text (by udid)'). This gives an explicit alternative and a clear decision rule, which is strong guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
web_hoverAInspect
Hover an element in the DESKTOP grid browser (by pageId) — the way to open a hover menu or reveal a tooltip before clicking. Not a device — for a phone or tablet use webpage_hover.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | Yes | Page ID from web_navigate | |
| selector | Yes | CSS selector of the element |
Tool Definition Quality
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 environment (desktop grid browser), the effect (opens hover menu / reveals tooltip), and the action's role before clicking. It does not cover error handling or return values, but for a simple hover operation the disclosed behavior 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences: the first front-loads the action and scope, the second provides an explicit alternative. No fluff or repetition, and every phrase carries useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool with no output schema, the description covers purpose, scope, sequencing, and the key alternative. The schema documents param sources. Nothing essential is missing 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides full descriptions for both parameters (pageId from web_navigate, CSS selector), so schema coverage is 100%. The description adds context about the desktop grid scope but does not add further parameter-level semantics. Baseline 3 applies because the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action and resource: 'Hover an element in the DESKTOP grid browser (by pageId)' and explains the intent ('open a hover menu or reveal a tooltip before clicking'). It clearly distinguishes from device-level hover tools by limiting scope to the desktop grid, and the distinction from webpage_hover is explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when not to use the tool: 'Not a device — for a phone or tablet use webpage_hover.' It also frames the action as a pre-click step, giving the agent a clear sequencing hint. This is direct, unambiguous usage guidance with a named alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
web_network_requestsAInspect
Network requests made by the DESKTOP grid browser page (by pageId) since it opened, with status codes. Buffered from load. Use filter to narrow to an API path. NOT a device — for a real phone or tablet use android_devtools_capture_network or ios_safari_capture_network (by udid).
| Name | Required | Description | Default |
|---|---|---|---|
| filter | No | Case-insensitive substring match on the URL | |
| pageId | Yes | Page ID from web_navigate | |
| failedOnly | No | Only show responses with status >= 400 |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it discloses meaningful behavioral context: data is 'Buffered from load' (so requests before load are not available), results include status codes, and the scope is tied to a specific pageId in the desktop grid browser. It does not disclose whether this is a snapshot or live stream, buffering limits, or behavior on navigation, but the core temporal semantics are explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, each earning its place: core purpose with scope, the buffering behavior, a parameter usage tip, and the device distinction with named alternatives. The key fact (DESKTOP grid browser page, by pageId, since opened) is front-loaded and there is zero fluff or redundant schema repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no output schema and no annotations, so the description must carry more weight, and it covers the essentials: what is returned (network requests with status codes), the scoping (pageId, desktop grid, since load), and filtering guidance. The return structure per request (URL shape, headers, timing fields) is unspecified, and there is no note on limits or clearing behavior, but for an observationally scoped capture tool the missing details are moderate rather than critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents all three parameters, establishing the baseline of 3. The description adds only a minor usage hint — that filter can narrow to an API path — which builds on the schema's 'substring match on URL' rather than significantly extending it. No additional meaning for pageId or failedOnly is provided beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it lists network requests for the DESKTOP grid browser page, scoped by pageId, since the page opened, with status codes. It further distinguishes itself by explicitly declaring 'NOT a device,' separating it from the android_devtools_* and ios_safari_* capture tools. The scoping ('since it opened', 'by pageId', 'DESKTOP grid browser page') leaves no ambiguity about what this tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit when-to-use signal ('Network requests made by the DESKTOP grid browser page'), an explicit when-not-to-use signal ('NOT a device'), and names the exact alternatives ('use android_devtools_capture_network or ios_safari_capture_network (by udid)'). It also advises using the filter parameter to narrow to an API path. This covers all three elements of the criterion.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device UDID / serial (iOS or Android) | |
| pageId | No | Target page/tab id — auto-picked when omitted | |
| socket | No | Android only: abstract unix socket name (default: chrome_devtools_remote) | |
| platformVersion | No | Ignored (kept for compatibility) |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device UDID / serial (iOS or Android) | |
| method | Yes | Protocol method as "Domain.command", e.g. "Emulation.setDeviceMetricsOverride" | |
| pageId | No | Target page/tab id — auto-picked when omitted | |
| params | No | The command's parameter object; omit for commands that take none | |
| socket | No | Android only: abstract unix socket name (default: chrome_devtools_remote) |
Tool Definition Quality
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.
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.
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.
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.
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.
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_browsing_dataAInspect
Clear cookies, localStorage, sessionStorage and/or the Cache Storage API for the page in the device browser (iOS Safari or Android Chrome, auto-detected). USE THIS to get a genuinely clean session between test cases: webpage_reload deliberately PRESERVES localStorage, so a reload keeps you logged in and carries app state into the next case. Every scope is VERIFIED by re-reading it afterwards and the result reports before/after counts, so a scope that could not be cleared says so instead of being assumed. On iOS cookies are removed one at a time through the Web Inspector (Page.deleteCookie), which reaches HttpOnly cookies that document.cookie cannot; on Android Network.clearBrowserCookies clears them in one call. HTTP cache: Android clears it via Network.clearBrowserCache (the browser reports no count, so it is returned as issued rather than verified); iOS has no Web Inspector equivalent, so only the Cache Storage API is cleared there and the HTTP cache is reported unsupported rather than silently skipped. DOES NOT LOG YOU OUT OF HTTP BASIC AUTH. Those credentials live in the browser credential store, which is none of these scopes — verified on qa.tms-hmpu.com, where an authenticated session shows 0 cookies, 0 localStorage and 0 sessionStorage. To force a Basic-auth challenge again, terminate the browser (ios_terminate_app com.apple.mobilesafari) and navigate afresh.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device UDID / serial (iOS or Android) | |
| pageId | No | Target page/tab id — auto-picked when omitted | |
| scopes | No | What to clear (default: ["all"]). "all" = every scope this platform supports. | |
| socket | No | Android only: abstract unix socket name (default: chrome_devtools_remote) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description extensively documents behavioral traits despite no annotations being provided. It explains verification behavior (scopes verified by re-reading with before/after counts), platform-specific differences (iOS removes cookies via Web Inspector reaching HttpOnly; Android uses Network.clearBrowserCookies), HTTP cache treatment (cleared on Android but unsupported on iOS), and the limitation regarding HTTP Basic Auth credentials. This fully compensates for missing annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is comprehensive but somewhat lengthy (about 15 sentences). It is front-loaded with the core purpose, which is good, but the latter portion dives into platform-specific implementation details that, while valuable, could be more terse. Every sentence adds information, but the verbosity slightly reduces scanning efficiency for the agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is remarkably complete given the tool complexity (4 parameters, 2 platforms, 5 scopes, no output schema). It covers what gets cleared, verification guarantees, platform differences, edge cases (Basic Auth), and how it differs from sibling tools. Without an output schema, the description compensates by describing the result (before/after counts, unsupported scopes reported). No gaps remain for effective tool selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all 4 parameters. The description adds value by explaining the meaning of 'all' (all scopes the platform supports) and the default value (['all']). However, it does not add detail beyond what the schema provides for udid, pageId, or socket, though the action-specific behavior is well covered.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it clears multiple web storage types (cookies, localStorage, sessionStorage, cache) and specifies the device browsers (iOS Safari, Android Chrome). It distinguishes itself from sibling tools like webpage_reload (which preserves localStorage) and webpage_clear_cookies (which only handles cookies). The verb 'clear' plus explicit resource scopes provides an unambiguous purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool: 'get a genuinely clean session between test cases'. It contrasts with webpage_reload which 'deliberately PRESERVES localStorage', and notes that webpage_clear_browsing_data is needed to clear state that reload retains. It also warns about HTTP Basic Auth, directing users to ios_terminate_app instead. This provides clear when-to-use and when-not-to guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
webpage_clear_cookiesAInspect
Expire all NON-HttpOnly cookies visible to the current page origin in the device browser (iOS Safari or Android Chrome, auto-detected), via document.cookie. PREFER webpage_clear_browsing_data: it reaches HttpOnly cookies (which this cannot — and a session cookie is usually exactly the HttpOnly one you wanted gone), verifies the result by re-reading the cookie jar, and can clear localStorage/sessionStorage/caches in the same call. This tool remains for callers that specifically want the document.cookie behaviour. Returns { cleared } — the count of cookies expired, NOT verified afterwards.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device UDID / serial (iOS or Android) | |
| pageId | No | Target page/tab id — auto-picked when omitted | |
| socket | No | Android only: abstract unix socket name (default: chrome_devtools_remote) | |
| platformVersion | No | Ignored (kept for compatibility) |
Tool Definition Quality
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 clearly discloses the limitation of only affecting non-HttpOnly cookies, the use of document.cookie, the lack of verification after clearing, and the return format. It does not, however, discuss potential failure scenarios, permissions needed, or whether the operation is idempotent. Still, for a simple tool the disclosure 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences long, no wasted words. The first sentence immediately conveys the core purpose. The second sentence provides the alternative recommendation concisely. The third sentence describes the return value and a key behavioral note. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, the description is complete. It covers the tool's scope, limitations, the recommended alternative, the return value, and the lack of verification. Even without an output schema, the return type is described. No crucial information appears to be missing for a developer to use this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (all 4 parameters have descriptions). The tool description adds one piece of information not in the schema: that 'pageId' is auto-picked when omitted. Otherwise, the description does not elaborate on parameter semantics beyond what the schema already provides. With high coverage, the baseline is 3, and the added value is minimal.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('expire') and clearly identifies the resource ('NON-HttpOnly cookies'), the scope ('visible to current page origin'), the method ('document.cookie'), and the platforms ('iOS Safari or Android Chrome'). It also distinguishes itself from the sibling tool 'webpage_clear_browsing_data' by explicitly stating its limitation regarding HttpOnly cookies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to prefer the alternative tool 'webpage_clear_browsing_data' and why that tool is generally better (reaches HttpOnly cookies, verifies results, clears additional storage). It then clarifies that this tool exists for callers who specifically need the 'document.cookie' behavior, 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.
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".
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | Element 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. | |
| udid | Yes | Device UDID / serial (iOS or Android) | |
| force | No | Skip 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. | |
| pageId | No | Target page/tab id — auto-picked when omitted | |
| socket | No | Android only: abstract unix socket name (default: chrome_devtools_remote) | |
| selector | No | CSS selector for the target element. Provide this or `ref`. | |
| snapshot | No | Append a webpage_snapshot of the resulting page (actionable elements only) so you can see what the click changed without a second call (default: false) | |
| timeoutMs | No | How long to keep retrying while the element is not yet clickable (default: 5000, max: 30000) | |
| pointerType | No | How 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`. | |
| platformVersion | No | Ignored (kept for compatibility) |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device UDID / serial (iOS or Android) | |
| pageId | No | Target page/tab id — auto-picked when omitted | |
| socket | No | Android only: abstract unix socket name (default: chrome_devtools_remote) | |
| platformVersion | No | Ignored (kept for compatibility) |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | Element 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. | |
| name | Yes | Attribute name to read, e.g. "href", "value", "aria-label" | |
| udid | Yes | Device UDID / serial (iOS or Android) | |
| pageId | No | Target page/tab id — auto-picked when omitted | |
| socket | No | Android only: abstract unix socket name (default: chrome_devtools_remote) | |
| selector | No | CSS selector for the target element. Provide this or `ref`. | |
| platformVersion | No | Ignored (kept for compatibility) |
Tool Definition Quality
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device UDID / serial (iOS or Android) | |
| pageId | No | Target page/tab id — auto-picked when omitted (iOS: appIdKey.pageIdKey; Android: CDP target id) | |
| socket | No | Android only: abstract unix socket name (default: chrome_devtools_remote) | |
| selector | No | Optional CSS selector — returns outerHTML of the first matching element, or null | |
| platformVersion | No | iOS only: platform version for the remote debugger (default: 17.0) |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | Element 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. | |
| udid | Yes | Device UDID / serial (iOS or Android) | |
| pageId | No | Target page/tab id — auto-picked when omitted | |
| socket | No | Android only: abstract unix socket name (default: chrome_devtools_remote) | |
| selector | No | CSS selector for the target element. Provide this or `ref`. | |
| platformVersion | No | Ignored (kept for compatibility) |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | Element 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. | |
| udid | Yes | Device UDID / serial (iOS or Android) | |
| pageId | No | Target page/tab id — auto-picked when omitted | |
| socket | No | Android only: abstract unix socket name (default: chrome_devtools_remote) | |
| selector | No | CSS selector for the target element. Provide this or `ref`. | |
| platformVersion | No | Ignored (kept for compatibility) |
Tool Definition Quality
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.
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.
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.
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.
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.
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_traffic_mock_add / ios_traffic_mock_add instead.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Route id to update in place; omit to auto-generate a new one | |
| body | No | Response body for mode "mock" (text, or base64 when bodyEncoding is "base64") | |
| mode | No | "mock" serves a canned response (default); "abort" fails the request | |
| udid | Yes | Device id (Android serial or iOS UDID) | |
| method | No | Optional HTTP method filter (e.g. "GET"/"POST"); matches any method when omitted | |
| pageId | No | Pin routing to a specific page id (from the *_list_pages tool). Omit to follow the active page automatically across navigations and new tabs — recommended. | |
| socket | No | Abstract unix socket name (default: chrome_devtools_remote) | |
| status | No | HTTP status to serve for mode "mock" (default 200) | |
| delayMs | No | Latency injected before responding/failing, in ms (clamped to 60s) | |
| enabled | No | Whether the route is active (default true) — disabled routes are kept but ignored | |
| headers | No | Response headers for mode "mock", as {headerName: value} — e.g. {"content-type": "application/json"}. On iOS a `charset` in content-type is NOT applied to the response: an HTML body with non-ASCII characters must declare it in the document (e.g. <meta charset="utf-8">) or it will be decoded with the default encoding and render as mojibake. | |
| matchUrl | Yes | URL pattern to match against the request's full URL | |
| matchType | No | How matchUrl is interpreted against the request URL (default "contains") | |
| bodyEncoding | No | Encoding of `body` (default "text") |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses critical behavioral traits: mode behaviors (mock vs. abort), scope (web content only, no device-wide changes, no certificate installation), persistence (routes survive navigation), and a platform caveat for iOS headers charset handling. Missing some potential edge cases (e.g., order of multiple routes, concurrency limits), but overall transparent enough for an agent to understand outcomes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with multiple sentences that front-load the core action and mode explanation before detailing constraints and alternatives. Every sentence adds value, and it avoids fluff. Slightly longer than minimal, but all content is relevant and clearly ordered.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (14 parameters, no output schema, no annotations), the description covers the essential behavior, modes, scope, constraints, and even provides iOS-specific guidance. It doesn't explain regex pattern format or the exact behavior of updating an existing route (beyond 'update in place'), but combined with the schema descriptions, an agent should have enough context to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds meaningful value beyond schema: explains default mode ('mock'), provides iOS caveat for headers parameter, recommends omitting pageId to follow the active page, and explains matchType default ('contains'). This extra context helps an agent choose correct parameter values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool adds or updates a mock/abort rule for browser requests on the device. It distinguishes two modes ('mock' serves a canned response, 'abort' fails the request) and explicitly limits scope to web content only, contrasting with native app mock tools (e.g., xxx_traffic_mock_add). This differentiates it from siblings like android_devtools_mock_add and ios_safari_mock_add, which are platform-specific variants.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance: it explains the two modes and their effects, states that routes apply immediately and survive navigation, and gives a clear alternative for native app requests: 'use android_traffic_mock_add / ios_traffic_mock_add instead.' It also advises on pageId usage ('recommended' to omit for automatic tracking). No ambiguity about when to use this tool versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device id (Android serial or iOS UDID) |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device id (Android serial or iOS UDID) |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Route id to remove (from *_mock_list) | |
| udid | Yes | Device id (Android serial or iOS UDID) |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device id (Android serial or iOS UDID) |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Key to press | |
| udid | Yes | Device UDID / serial (iOS or Android) | |
| pageId | No | Target page/tab id — auto-picked when omitted | |
| socket | No | Android only: abstract unix socket name (default: chrome_devtools_remote) | |
| platformVersion | No | Ignored (kept for compatibility) |
Tool Definition Quality
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.
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.
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.
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.
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.
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_reloadAInspect
Reload the page open in the device browser (CDP Page.reload) — works on BOTH iOS Safari and Android Chrome. Confirms the document was actually replaced rather than trusting the protocol ack: a sentinel is written to window before the reload and the call only reports reloaded:true once it is gone. Returns the post-reload url, and reloaded:false with a reason when the document survived, so a reload that quietly did nothing cannot read as success. Also waits for the NEW document to finish loading and reports ready, so the page is drivable when the call returns. This is the state-reset primitive between test cases on iOS, where tabs cannot be opened or closed — and unlike a same-hash navigate it forces a real load, which an SPA router would otherwise skip, leaving stale dialogs and form state behind. Pass hard:true to bypass the HTTP cache.
| Name | Required | Description | Default |
|---|---|---|---|
| hard | No | Bypass the HTTP cache (CDP ignoreCache) — a from-network reload (default: false) | |
| udid | Yes | Device UDID / serial (iOS or Android) | |
| pageId | No | Target page/tab id — auto-picked when omitted | |
| socket | No | Android only: abstract unix socket name (default: chrome_devtools_remote) | |
| platformVersion | No | Ignored (kept for compatibility) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavioral traits: sentinel verification ensures the document was actually replaced, reloaded:false with a reason is returned if the reload failed, it waits for the new document to finish loading and reports ready, and hard:true bypasses cache. This exceeds typical descriptions by explaining the internal check and return semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Although dense, every sentence contributes meaningful detail: core action, cross-platform support, verification mechanism, return values, readiness behavior, iOS-specific rationale, and cache bypass. The structure is front-loaded with the action, then behavioral details, then context, with no wasteful filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete: it explains return values (url, reloaded, reason, ready), the verification approach, the iOS use case, the difference from same-hash navigation, and the hard parameter. Given the tool's complexity and lack of an output schema, this description fully covers what an agent needs to invoke it correctly and interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 marginal value by mentioning hard:true, but that is already documented in the schema. It does not elaborate on udid, pageId, or socket beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reloads the page in the device browser via CDP Page.reload, and explicitly notes it works on both iOS Safari and Android Chrome. It contrasts with sibling navigation/reload tools and emphasizes the forced real load vs. same-hash navigate, making its purpose distinct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides strong usage context: it is the state-reset primitive between test cases on iOS, and explicitly distinguishes from a same-hash navigate by forcing a real load. It does not formally list alternatives or when-not-to-use, but the context is clear enough to guide agent selection.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | Android only: capture just this element, named by a ref from a page-elements listing | |
| udid | Yes | Device UDID / serial (iOS or Android) | |
| pageId | No | Target page/tab id — auto-picked when omitted | |
| socket | No | Android only: abstract unix socket name (default: chrome_devtools_remote) | |
| selector | No | Android only: capture just this element (CSS selector), scrolled into view | |
| platformVersion | No | Ignored (kept for compatibility) |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | Element 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. | |
| udid | Yes | Device UDID / serial (iOS or Android) | |
| pageId | No | Target page/tab id — auto-picked when omitted | |
| socket | No | Android only: abstract unix socket name (default: chrome_devtools_remote) | |
| selector | No | CSS selector for the target element. Provide this or `ref`. | |
| platformVersion | No | Ignored (kept for compatibility) |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | Element 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. | |
| udid | Yes | Device UDID / serial (iOS or Android) | |
| index | No | Select the option at this zero-based index | |
| label | No | Select the option whose visible text equals this | |
| value | No | Select the option whose value attribute equals this | |
| pageId | No | Target page/tab id — auto-picked when omitted | |
| socket | No | Android only: abstract unix socket name (default: chrome_devtools_remote) | |
| selector | No | CSS selector for the target element. Provide this or `ref`. | |
| platformVersion | No | Ignored (kept for compatibility) |
Tool Definition Quality
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.
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.
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.
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.
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.
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_set_cookieAInspect
Set a cookie on the CURRENT page origin in the device browser (iOS Safari or Android Chrome, auto-detected), via document.cookie. Use to seed auth/session state before a flow. LIMITATION: sets a NON-HttpOnly cookie on the current document origin only (cannot set HttpOnly/Secure-only or cross-domain cookies — that needs the browser CDP Network domain, which the iOS bridge does not expose). Defaults path=/ and a 365-day expiry. Returns { set, name, cookie }.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Expiry in days from now (default 365; 0 = session) | |
| name | Yes | Cookie name | |
| path | No | Cookie path (default: /) | |
| udid | Yes | Device UDID / serial (iOS or Android) | |
| value | Yes | Cookie value | |
| pageId | No | Target page/tab id — auto-picked when omitted | |
| socket | No | Android only: abstract unix socket name (default: chrome_devtools_remote) | |
| platformVersion | No | Ignored (kept for compatibility) |
Tool Definition Quality
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 (document.cookie), the critical limitation (HttpOnly/Secure/cross-domain not settable), the iOS bridge constraint, and defaults (path=/ and 365-day expiry). Returns { set, name, cookie }. It does not explicitly disclose side effects like overwriting an existing cookie of the same name, but the mechanism (document.cookie) makes this inferable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, dense, front-loaded paragraph. Every sentence earns its place: purpose, use case, limitation, defaults, return value. Zero waste, no fluff. Effectively communicates a complex tool with meaningful constraints in ~70 words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a cookie-setting tool with no output schema and no annotations, the description comprehensively covers mechanism, platform support, limitations, defaults, and return shape. The complexity is moderate (8 params, platform differences) and the description handles it well. Minor gaps: doesn't note that setting a cookie could overwrite existing ones or whether the page must be loaded/navigable first (a live document origin is required).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema documents all 8 parameters. The description adds value by explaining defaults (path=/, 365-day expiry, days=0 means session) beyond what the schema states. However, it doesn't clarify semantics for platformVersion ('ignored'), pageId auto-pick, or the socket default beyond what schema property descriptions already say. Baseline 3 with a slight add from days=0 clarification.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it sets a cookie on the CURRENT page origin via document.cookie, specifically for seeding auth/session state before a flow. This is specific (verb+resource+scope) and distinct from sibling tools like android_devtools_cookies and ios_safari_cookies which read cookies, while webpage_clear_cookies clears them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states when to use it ('to seed auth/session state before a flow') and clearly delineates what it CANNOT do (set HttpOnly/Secure-only or cross-domain cookies, which requires the CDP Network domain not exposed on iOS). It notes platform auto-detection. It doesn't explicitly name alternative tools for the cases it can't handle, but the limitation section strongly implies the boundary.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device UDID / serial (iOS or Android) | |
| limit | No | Maximum nodes to return (default: 400, max: 2000) | |
| pageId | No | Target page/tab id — auto-picked when omitted | |
| socket | No | Android only: abstract unix socket name (default: chrome_devtools_remote) | |
| selector | No | CSS selector to scope the snapshot to (default: the whole page) | |
| includeHidden | No | Include elements that are not visible (default: false) | |
| interactiveOnly | No | Only links, buttons, fields and other actionable roles (default: false) | |
| platformVersion | No | Ignored (kept for compatibility) |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | URL to open — for action "new" (default: about:blank) | |
| udid | Yes | Device UDID / serial (iOS or Android) | |
| action | No | What to do (default "list"). "new"/"select"/"close" are Android only. | |
| pageId | No | Tab to act on, from action "list" — required for "select" and "close" | |
| socket | No | Android only: abstract unix socket name (default: chrome_devtools_remote) | |
| platformVersion | No | Ignored (kept for compatibility) |
Tool Definition Quality
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.
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.
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.
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.
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.
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"), and when it fell back to jsValue it names the cause in fallbackReason — you never have to guess whether a degraded path was taken. Pass require:"native" to make an unavailable device keyboard a hard error instead of a silent downgrade, for fields that only behave correctly under real keystrokes. exact:false means the keystrokes landed but the component rewrote the value as you typed (masks, autocompletes) — that is a success, not a failure. By default appends to the existing value; pass clear:true to replace it.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | Element 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. | |
| text | Yes | Text to type | |
| udid | Yes | Device UDID / serial (iOS or Android) | |
| clear | No | Replace the existing value instead of appending (default: false) | |
| pageId | No | Target page/tab id — auto-picked when omitted | |
| socket | No | Android only: abstract unix socket name (default: chrome_devtools_remote) | |
| require | No | Set to "native" to fail loudly when the device keyboard is unavailable, instead of silently falling back to setting .value (isTrusted:false). Use for fields that gate on real keystrokes. iOS only — Android has no native-keyboard path here. | |
| selector | No | CSS selector for the target element. Provide this or `ref`. | |
| platformVersion | No | Ignored (kept for compatibility) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It transparently explains the exact behavior on iOS (taps field, types on device keyboard with trusted keystrokes) and Android (sets value via JS setter with isTrusted:false events). It details fallback reporting via `via` and `fallbackReason`, and clarifies that `exact:false` is a success case. This is exceptionally thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense paragraph, but every sentence is valuable and adds unique information. It is front-loaded with the main purpose and key differentiators. While it could benefit from bullet points for readability, it remains concise without wasted words, earning a 4 rather than 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 9 parameters, two platforms, complex fallback logic, and no output schema, the description covers all essential aspects: platform-specific behavior, fallback reporting, parameter effects, and response fields. It addresses edge cases (e.g., `exact:false` as success, `require:"native"` for iOS only) and explains the `socket` parameter. No gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All 9 parameters have schema descriptions (100% coverage), but the description adds significant meaning beyond schema: it explains the behavioral impact of `clear`, `require`, and `exact`, the relationship between `ref` and `selector`, and the `socket` parameter's Android-only nature. This goes well beyond what the schema alone provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool types text into an input/textarea in the device browser using CSS selector or ref. It explicitly differentiates from siblings by specifying cross-platform behavior (iOS Safari and Android Chrome) and the mechanism (native keyboard vs. JS value setter), which distinguishes it from web-only or single-platform typing tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear guidance on when to use this tool: for fields that react to typing rather than just reading .value. It also explains when to use the `require:"native"` option for fields needing real keystrokes and the meaning of `exact:false`. While it doesn't explicitly name alternative sibling tools, the context of device browser vs. other typing tools is implied and sufficient.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Device UDID / serial (iOS or Android) | |
| pageId | No | Target page/tab id — auto-picked when omitted | |
| socket | No | Android only: abstract unix socket name (default: chrome_devtools_remote) | |
| visible | No | Also 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) | |
| selector | Yes | CSS selector to wait for | |
| timeoutMs | No | Max time to wait in milliseconds (default: 5000, max: 30000) | |
| platformVersion | No | Ignored (kept for compatibility) |
Tool Definition Quality
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.
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.
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.
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.
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.
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_press_keyAInspect
Press a key in the DESKTOP grid browser (by pageId) — Enter, Tab, Escape, ArrowDown, or a chord like Control+A. Targets an element when a selector is given, otherwise the focused one. Not a device — for a phone or tablet use webpage_press_key.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Key name, e.g. Enter / Tab / Escape / ArrowDown / Control+A | |
| pageId | Yes | Page ID from web_navigate | |
| selector | No | CSS selector to focus first; omit to use focus as-is |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It explains how target selection works ('Targets an element when a selector is given, otherwise the focused one') and discloses the platform boundary. It could mention potential side effects like form submission or navigation, but the core behavior is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler: the first establishes action, context, and key syntax; the second clarifies targeting behavior and routes to the mobile alternative. Everything earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 3-parameter action with fully described schema, the description and schema together cover what the tool does, where it runs, how target selection works, and where to send phone/tablet requests. No output schema exists, so explaining return values is unnecessary.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the schema already describes pageId, key examples, and selector behavior. The description's key examples and selector-targeting note largely mirror the schema text ('CSS selector to focus first; omit to use focus as-is'), adding little new semantic value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a concrete action and resource: 'Press a key in the DESKTOP grid browser (by pageId)' followed by concrete key examples. It also explicitly distinguishes the tool from webpage_press_key, so an agent can tell them apart from a large sibling list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear usage context ('DESKTOP grid browser') and an explicit when-not/alternative: 'Not a device — for a phone or tablet use webpage_press_key.' This directly routes the agent to the correct sibling tool 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.
web_reloadAInspect
Reload the current page in the DESKTOP grid browser (by pageId). Not a device — for a phone or tablet use webpage_reload.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | Yes | Page ID from web_navigate |
Tool Definition Quality
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 states the core action and scope (reloads the current desktop-grid page by pageId), but it does not disclose whether it waits for the page to load, what it returns on success/failure, or whether it discards page state. This is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, no filler. The main action and scope are front-loaded, and the alternative routing is given immediately after. Every word adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter reload command, the description provides the action, platform context, and sibling alternative. It does not explain return/error behavior, which matters slightly because there is no output schema, but the low complexity makes the definition sufficiently complete for invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers the only parameter with 'Page ID from web_navigate' at 100% coverage. The description repeats 'by pageId' but adds no new semantic details beyond what the schema already provides, so it earns the baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Reload the current page in the DESKTOP grid browser (by pageId).' It clearly distinguishes itself from the device-based alternative and avoids being a tautology of 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states the context for use (DESKTOP grid browser) and gives a direct alternative: 'for a phone or tablet use webpage_reload.' This tells an agent exactly when to select this tool over the relevant sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
web_resizeAInspect
Resize the DESKTOP grid browser viewport (by pageId) — for checking responsive breakpoints without a real handset. A real phone is still the honest test; this only changes the window. NOT a device — a real handset has a fixed screen, so there is no webpage_resize; pick a different device by udid instead.
| Name | Required | Description | Default |
|---|---|---|---|
| width | Yes | Viewport width in CSS pixels | |
| height | Yes | Viewport height in CSS pixels | |
| pageId | Yes | Page ID from web_navigate |
Tool Definition Quality
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 states the tool 'only changes the window' and is not a device, which prevents misuse for real-device testing. It does not discuss return values or persistence, but for a non-destructive viewport resize this is a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The main action is front-loaded in the first sentence, followed by important caveats. The third sentence somewhat repeats the 'not a device' and 'real handset' points already made in the second sentence, adding mild redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple three-parameter resize tool with full schema coverage and no output schema, the description is complete enough: it states the purpose, the target, the limitation, and the alternative. An agent can correctly decide when and how to invoke it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and width, height, and pageId are already documented with meaningful descriptions such as 'Viewport width in CSS pixels' and 'Page ID from web_navigate'. The tool description adds contextual purpose but no additional parameter-level meaning, 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Resize the DESKTOP grid browser viewport (by pageId)'. It also differentiates itself from device-level tools by explicitly saying it is 'NOT a device' and that no webpage_resize exists.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use the tool: 'for checking responsive breakpoints without a real handset'. It also gives a clear exclusion: a real phone is the honest test, and for device-like resizing the agent should 'pick a different device by udid instead'.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | Yes | Page ID from web_navigate |
Tool Definition Quality
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.
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.
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.
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.
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.
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_select_optionAInspect
Choose an option in a in the DESKTOP grid browser (by pageId), by value or visible label. Not a device — for a phone or tablet use webpage_select_option.
| Name | Required | Description | Default |
|---|---|---|---|
| label | No | Visible option text; used when value is not given | |
| value | No | Option value attribute | |
| pageId | Yes | Page ID from web_navigate | |
| selector | Yes | CSS selector of the <select> |
Tool Definition Quality
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 clearly describes the action being performed, but it does not disclose potential side effects, whether change/input events are triggered, error behavior, or what happens when no matching option is found. There is no contradiction with annotations, but the description is minimal on 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, both informative, with the core action front-loaded and the routing caveat placed at the end. No wasted words or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple select action, the description is largely complete: it names the target context, the selection method, and the correct alternative for mobile. The schema fully documents parameters. The only gaps are lack of return value/error behavior information, but the tool is simple enough that this is a minor omission rather than a blocking issue.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters. The description adds the 'by value or visible label' distinction and targets the desktop grid browser, but it does not provide material parameter semantics beyond 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Choose an option') and resource ('a <select> in the DESKTOP grid browser'), and clarifies that selection can be by value or visible label. It also distinguishes itself from the mobile/tablet sibling webpage_select_option, so an agent can identify the right tool without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says this is not for a device and directs phone/tablet usage to webpage_select_option. This gives a clear condition for when not to use the tool and names the alternative, which is exactly what an agent needs for routing.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | Yes | Page ID from web_navigate |
Tool Definition Quality
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Text to type | |
| pageId | Yes | Page ID from web_navigate | |
| selector | Yes | CSS selector of the input element |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
web_upload_fileAInspect
Set files on a file input in the DESKTOP grid browser (by pageId). Paths are read on the RDS host, not your machine. NOT a device — there is no webpage_upload_file; the device equivalent is ios_safari_set_input_files (by udid).
| Name | Required | Description | Default |
|---|---|---|---|
| paths | Yes | Absolute file paths on the RDS host | |
| pageId | Yes | Page ID from web_navigate | |
| selector | Yes | CSS selector of the <input type=file> |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It does reveal a key non-obvious behavior: paths are resolved on the RDS host, not the local machine. However, it does not disclose other potentially relevant behaviors such as error behavior, return value, or whether setting files replaces existing input selections.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with no filler. The core action is front-loaded, and the host-path warning and device-alternative note are compact and useful, each earning its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity, clear schema descriptions, and no output schema, the description provides the essential context: desktop grid browser scope, pageId mechanism, host-side path semantics, and the correct device alternative. It omits minor details like return format and failure conditions, but an agent has enough to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters. The description largely repeats the path-host concept already present in the paths parameter description ('Absolute file paths on the RDS host'), adding no substantial new parameter-level meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action and resource: 'Set files on a file input in the DESKTOP grid browser (by pageId).' It clearly distinguishes this tool from device-level equivalents by stating 'NOT a device' and explicitly naming ios_safari_set_input_files as the device counterpart, so an agent can differentiate it 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit context for when to use the tool (desktop grid browser with a pageId) and when not to use it (not a device). It also names the alternative for device scenarios: ios_safari_set_input_files (by udid), and warns that paths are read on the RDS host rather than the local machine.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
web_wait_forAInspect
Wait for a condition in the DESKTOP grid browser (by pageId) before continuing: an element to appear or disappear, text to show up, or a fixed delay. Prefer this over polling with web_evaluate. Not a device — for a phone or tablet use webpage_wait_for (by udid).
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | Wait until this text appears anywhere on the page | |
| state | No | visible | hidden | attached | detached (default: visible). Applies to selector. | |
| pageId | Yes | Page ID from web_navigate | |
| selector | No | CSS selector to wait for | |
| timeoutMs | No | Timeout in ms (default 10000) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden. It discloses that the tool blocks before continuing, supports element visibility, text appearance, and fixed delays, and is scoped to desktop browser pages. It does not explain timeout failure behavior or what happens after the wait, but the timeoutMs parameter provides partial context. Overall, the core behavior is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: it states the purpose, lists supported conditions, and gives alternatives in three sentences. Every sentence adds value, and the most important scoping and guidance appear early. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a relatively simple wait tool, the description covers the primary use case, platform scope, alternatives, and condition types. The main gap is the fixed-delay claim not being clearly tied to a schema parameter, which could confuse an agent reading the schema. Otherwise, the description is sufficient for correct tool selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents all five parameters with 100% coverage, so the baseline is 3. The description adds useful framing by mapping pageId to the desktop browser and mentioning condition categories, but it does not clarify how a 'fixed delay' is expressed in parameters (no delayMs field exists, so it likely relies on timeoutMs with no selector/text). This slight mismatch prevents a higher score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Wait for a condition') and the specific resource ('DESKTOP grid browser (by pageId)'). It enumerates the condition types (appear, disappear, text, fixed delay), and it differentiates this tool from web_evaluate and webpage_wait_for. An agent can immediately understand what this tool does and how it differs from nearby siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: 'Prefer this over polling with web_evaluate' and 'for a phone or tablet use webpage_wait_for (by udid)'. This tells the agent when to choose this tool and which alternative to use instead. No ambiguity remains about the intended context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Frequently Asked Questions
Claiming proves that you control a remote MCP connector. It does not move, proxy, or interrupt the server.
Open the connector listing, choose Claim ownership, and sign in to Glama.
Complete one verification method:
GitHub identity — fastest for official registry listings. For a namespace such as
io.github.alice/server, link the matching GitHub user or an account that owns the GitHub organization, then choose Claim with GitHub.HTTP challenge — works when you can deploy a public file. Generate a token, publish the exact JSON Glama shows at
/.well-known/glama.jsonon the same origin as the connector, then choose Check HTTP challenge.DNS challenge — works when you control DNS but cannot change the server. Generate a token, create the exact TXT record Glama shows, wait for it to propagate, then choose Check DNS challenge.
After verification, Glama sends a confirmation email and gives you access to listing details, thumbnails, health checks, and analytics. Keep the HTTP file or DNS record in place: Glama periodically checks it and ownership remains verified while the token is discoverable.
The HTTP ownership file has this structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"claim": "glama_claim_..."
}Claim tokens are opaque, stable, and bound to the signed-in Glama account. They contain no email address or other personal information. If Glama can no longer discover a verified HTTP or DNS token, it starts a seven-day grace period before removing claim-based access. Restore the same token during that period to keep ownership verified. Never publish an email address, Glama session token, GitHub token, or connector credential as ownership proof.
If verification fails, confirm that you copied the current token exactly. The HTTP file must be public, return valid JSON with a successful HTTP response, and stay on the connector's origin. DNS changes may need more time to propagate. A claim cannot transfer to a different origin or hostname: if the connector target changes, Glama starts the grace period and the new target must be claimed separately after the previous claim is released.
For a connector linked to the official MCP Registry, registry updates continue to replace its name, description, and URL by default. After claiming, open Manage connector and enable Use Glama listing details as the source of truth if edits made on Glama should be preserved. Categories and thumbnails are always managed on Glama; registry linkage and technical connection settings continue to sync.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
To improve your MCP server's ranking:
Claim ownership of the server listing
Complete the server profile with an accurate description and thumbnail
Provide a test profile so Glama can connect to and evaluate the server
Keep tool definitions clear and complete to earn a high Tool Definition Quality Score (TDQS)
Route real usage through the Glama Gateway; more recorded successful server uses also improve the ranking
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Related MCP Connectors
Control real Android and iOS devices with LLM agents — tap, swipe, type, automate flows.
Automate cloud Chrome—navigate, click, type, screenshot, run code, record screen video
AI-powered browser automation — navigate, click, fill forms, and extract data from any website.
Cloud iOS simulators and Android emulators your agent can create, drive, and throw away.
Related MCP Servers
AlicenseBqualityAmaintenanceEnables AI assistants to automate mobile app testing and development for iOS and Android through natural language interactions. Supports intelligent element identification, session management, automated test generation, and comprehensive device interactions including clicks, swipes, screenshots, and app management.3112,466464Apache 2.0- AlicenseAqualityBmaintenanceEnables AI assistants to control mobile and desktop devices with natural language, including running automation tasks, taking screenshots, and managing devices.65MIT

MobAI MCP Serverofficial
AlicenseAqualityBmaintenanceEnables AI assistants to automate mobile devices (Android and iOS) through a single DSL interface, supporting actions like tap, type, swipe, and assertions.20176244Apache 2.0- AlicenseAqualityAmaintenanceEnables Claude Desktop to automate web browsers and mobile applications (iOS/Android) using WebDriverIO. Supports browser automation, mobile app testing, touch gestures, app lifecycle management, and hybrid app context switching through natural language.314,34937MIT