Skip to main content
Glama
ettomarett

Browserose MCP

by ettomarett

Browserose MCP

MCP Tool for Agents to control the Google Chrome browser.

Browserose MCP is an MCP (Model Context Protocol) server that lets AI agents and IDEs control Google Chrome via Playwright, with full iframe support: snapshot and interact inside iframes (e.g. ALM SCORM players, embedded apps).

The toolset is sufficient for full end-to-end automation. You can complete entire flows—login, multi-step navigation, nested iframes, quizzes, and course completion—without manual steps or switching tabs. Use navigation, locators, frame selectors, coordinate fallbacks, and diagnostics as needed.

Requirements

  • Node.js 18+

  • Chrome installed (or set PLAYWRIGHT_MCP_USE_CHROMIUM=1 to use Chromium)

  • Playwright browsers: npx playwright install chromium (or chrome if available)

Related MCP server: OLTestStack

Install and build

npm install
npx playwright install chromium
npm run build

Cursor / IDE configuration

Add to ~/.cursor/mcp.json (or project .cursor/mcp.json):

{
  "mcpServers": {
    "playwright-chrome": {
      "command": "node",
      "args": ["/absolute/path/to/Browserose-MCP/build/index.js"]
    }
  }
}

Restart Cursor after editing mcp.json.

Environment variables

  • PLAYWRIGHT_MCP_HEADLESS — set to 1 or true to run the browser headless (default: headed so you see the window).

  • PLAYWRIGHT_MCP_USE_CHROMIUM — set to 1 or true to use Playwright's Chromium instead of system Chrome.

  • PLAYWRIGHT_MCP_VIEWPORT_MAXIMIZED — window opens maximized by default. Set to 0 or false to use a fixed size (see width/height below).

  • PLAYWRIGHT_MCP_VIEWPORT_WIDTH — viewport width in pixels (default: 1280). Used only when maximized is off.

  • PLAYWRIGHT_MCP_VIEWPORT_HEIGHT — viewport height in pixels (default: 800). Used only when maximized is off.

Examples: To use a fixed size instead of maximized, set PLAYWRIGHT_MCP_VIEWPORT_MAXIMIZED=0 and optionally PLAYWRIGHT_MCP_VIEWPORT_WIDTH=1920, PLAYWRIGHT_MCP_VIEWPORT_HEIGHT=1080.

Popup handler

When a link or button opens a new tab (e.g. Go to activity on IBM SkillsBuild opens the SCORM player in a new window), the MCP automatically attaches to that new tab. The browser context listens for the page event; when a new page is created, the internal page reference is updated so that all subsequent tool calls (navigate, click, snapshot, frame_probe, etc.) run in the new tab, not the original one. You do not need to switch tabs manually or use a separate “switch to tab” tool: click Go to activity, wait for the player to load, then continue with the same tools—they will already target the player tab. Implementation: in src/browser.ts, context.on("page", (newPage) => { page = newPage; }) runs on every new page (popup or target=_blank). Restart the MCP server (or Cursor) after pulling changes so the handler is active.

Tools (quick reference)

Tool

Purpose

browser_navigate

Go to URL

browser_go_back / browser_go_forward

History

browser_snapshot

Accessibility-like tree of the page; use includeFrames: true to include same-origin iframes

browser_snapshot_frame

Snapshot a single iframe by selector (e.g. iframe, iframe#pplayer_iframe)

browser_click

Click by ref; optional frameSelector for elements inside an iframe

browser_type

Type text; optional ref, frameSelector, submit

browser_type_locator

Type into element by role/text/css; optional frameSelector (omit = main page)

browser_hover

Hover by ref; optional frameSelector

browser_select_option

Select option(s) by ref; optional frameSelector

browser_press_key

Press a key; optional frameSelector

browser_screenshot

Page or iframe screenshot; optional frameSelector

browser_click_at

Click at (x, y) relative to a frame's viewport (for canvas/cross-origin when refs fail); requires frameSelector, x, y

browser_click_locator

Click by locator: role+name, text, or css. Optional: nth (0-based index), enabledOnly (first enabled match), scopeCss (within container). No snapshot needed.

browser_list_clickables

List clickables in a frame. Requires frameSelector when targeting an iframe (e.g. content frame). Optional filters: role, name, text, css; enabledOnly; scopeCss (within container). Use to discover what to click.

browser_frame_probe

Diagnostic: run inside frame to get url, title, readyState, button/clickable counts, textSample. If probe fails or counts=0, UI may be canvas.

browser_frame_bbox

Get frame bounding box (x, y, width, height) in page coordinates.

browser_click_at_rel

Click at relative (rx, ry) in 0..1 inside the frame (e.g. 0.5, 0.9 = center-bottom). Uses Playwright page.mouse.click.

browser_frame_inventory

Inside frame: list child iframes (id, name, src, rect), canvas (rect), shadowHosts count, bodyRect. Use to see if UI is in nested iframe or canvas.

browser_hit_test_rel

elementFromPoint at (rx, ry) in frame; returns tag, id, class, rect, pointerEvents, cursor (and iframe src/name). Confirms where clicks land.

browser_click_at_rel_debug

Frame screenshot + text with page coords and in-frame pixel where click_at_rel(rx, ry) would click.

browser_evaluate_click

Click element in frame via DOM .click() (frameSelector + css; optional nth). Bypasses visibility/actionability. Use when quiz SUBMIT or other button fails.

browser_evaluate_click_by_text

Click by text content in frame (frameSelector + text; optional match exact/contains, scopeCss, nth). Bypasses visibility/overlays. Use when quiz options or labels don’t respond to locator/click_at_rel.

browser_wait

Sleep (seconds)


Tools reference and use cases

Detailed description of each tool and when to use it. Optional frameSelector uses >> for nested iframes (e.g. iframe#a >> iframe#b).

Navigation

Tool

What it does

Use cases

browser_navigate

Opens a URL in the current tab.

Starting a flow, opening login pages, course URLs, or any target site.

browser_go_back

Goes back in history.

Undoing a navigation or returning from a redirect.

browser_go_forward

Goes forward in history.

Repeating a step after going back.

Snapshot and ref-based interaction

These tools use an accessibility/DOM snapshot to get refs (e.g. s1e2). You then pass that ref to click, type, hover, or select. Best when the page (or iframe) is same-origin and has a normal DOM.

Tool

What it does

Use cases

browser_snapshot

Captures an accessibility-like tree of the current page. Use includeFrames: true to include same-origin iframes.

Discovering structure and getting refs for main page and embedded frames in one call.

browser_snapshot_frame

Snapshots a single iframe by selector. For chained selectors (>>), uses CDP when in-frame evaluate isn't possible.

Inspecting one frame's tree; getting refs for elements inside that frame (same-origin or when CDP can provide refs).

browser_click

Clicks the element identified by ref. Optional frameSelector when the element is inside an iframe.

Buttons, links, checkboxes—any clickable from the snapshot.

browser_type

Types text into the focused element or the element identified by ref. Optional frameSelector, submit (press Enter).

Text inputs, search boxes, login fields.

browser_hover

Hovers over the element identified by ref. Optional frameSelector.

Opening dropdowns or tooltips before clicking.

browser_select_option

Selects option(s) in a dropdown by ref. Optional frameSelector.

Select elements, language pickers, filters.

browser_press_key

Sends a key (e.g. Enter, Tab, ArrowRight). Optional frameSelector to target a frame.

Submitting forms, keyboard navigation, escaping modals.

Locator-based interaction (no snapshot)

These tools use Playwright locators (role+name, text, or css) and do not require a snapshot. They work in cross-origin iframes and are the main escape hatch when refs aren't available or snapshot is empty.

Tool

What it does

Use cases

browser_click_locator

Clicks an element by locator: role+name, text, or css. Optional: nth (0-based index of match), enabledOnly (click first enabled match when several are disabled), scopeCss (resolve only within this container selector).

Cross-origin iframes, login buttons, SCORM "Next", quiz "SUBMIT" when multiple SUBMITs exist (use enabledOnly: true or nth), text inside a card (use scopeCss: ".quiz-card" to avoid sidebar).

browser_type_locator

Types into an element found by role/text/css. Optional: nth (0-based index), scopeCss (within container).

Login fields, search boxes, any input when snapshot isn't used; when several inputs match, use nth or scopeCss.

browser_list_clickables

Lists visible buttons/links in a frame. Optional: role, name, text, css (filter list to matches), enabledOnly (list only enabled), scopeCss (list only within container).

Discovering what's clickable; listing only "SUBMIT" buttons (role: "button", name: "SUBMIT") to see which is enabled; listing only clickables inside a quiz area (scopeCss).

Customizing by situation: Use nth when multiple elements match (e.g. 4th button named "SUBMIT"). Use enabledOnly to click the first enabled match when the DOM has several disabled copies. Use scopeCss to restrict the search to a container (e.g. .quiz-card, [role="dialog"]) so you don't match the same text or role in the sidebar or another panel.

Coordinate-based interaction (escape hatch)

When snapshot and locators both fail (e.g. canvas, custom-rendered UI, or wrong frame depth), use coordinates relative to a frame.

Tool

What it does

Use cases

browser_frame_bbox

Returns the frame's bounding box (x, y, width, height) in page coordinates.

Converting relative positions to absolute (x, y) for browser_click_at, or understanding frame position.

browser_click_at

Clicks at pixel (x, y) relative to the frame's viewport. Requires frameSelector, x, y.

Canvas or non-DOM UI when you know exact coordinates (e.g. from a screenshot).

browser_click_at_rel

Clicks at relative position (rx, ry) in [0..1] inside the frame (e.g. 0.5, 0.9 = center-bottom). Uses Playwright's mouse.

Clicking "bottom-right" or "center" of a frame when you don't have pixel coords; quick fallback for known layout.

browser_click_at_rel_debug

Returns a screenshot of the frame and the exact page coordinates and in-frame pixel where click_at_rel(rx, ry) would click.

Debugging: confirm that (rx, ry) lands on the right element before using browser_click_at_rel.

Diagnostics (finding the right frame / layer)

When a frame shows no buttons or empty text in the snapshot, the real UI is often in a child iframe, canvas, or shadow DOM. These tools help you find it.

Tool

What it does

Use cases

browser_frame_probe

Runs a small script inside the frame: returns url, title, readyState, counts of buttons/clickables, and a short textSample.

Quick check: "Does this frame have any DOM?" If buttons: 0, clickables: 0, textSample: "", the visible UI is likely in a child iframe or canvas.

browser_frame_inventory

Lists child iframes (id, name, src, rect), canvas elements (rect), count of shadow roots, and bodyRect.

When probe says "no content": find the real content frame (e.g. ALM SCORM's iframe#content-frame) or confirm the UI is canvas. Then extend the frame selector chain and use locators in that frame.

browser_hit_test_rel

Uses elementFromPoint(rx*width, ry*height) inside the frame; returns tag, id, class, rect, pointerEvents, cursor; for iframes, src/name.

Verify what element a relative point (rx, ry) hits—e.g. "Is (0.5, 0.92) really the Next button or an overlay?"

Utility

Tool

What it does

Use cases

browser_screenshot

Takes a screenshot of the full page or a specific iframe (frameSelector).

Visual verification, debugging layout, or feeding into vision models.

browser_wait

Pauses for a given number of seconds.

Letting the page or iframe finish loading before snapshot or click.


Use cases in practice

  • Normal web automation (main page)
    Use browser_snapshot (or browser_snapshot_frame with no/minimal nesting) to get refs, then browser_click, browser_type, browser_hover, browser_select_option with those refs. Optional browser_screenshot for verification.

  • Login flows
    Often on the main page: browser_type_locator and browser_click_locator with role/name or text (e.g. email → Continue → password → Log in). No snapshot required.

  • Single iframe, same-origin
    browser_snapshot_frame with frameSelector: "iframe#id" → get refs → browser_click / browser_type with the same frameSelector.

  • Cross-origin or "empty" iframe
    Snapshot may be empty or refs may not work. Use locators: browser_list_clickables with frameSelector to see what's there, then browser_click_locator and browser_type_locator with the same frameSelector and role/text/css.

  • ALM / SCORM (nested iframes)
    The visible lesson UI is often in a third-level iframe. If browser_frame_probe on iframe#pplayer_iframe >> iframe#modulePlayerIframe shows clickables: 0, run browser_frame_inventory on that chain; it will list child iframes (e.g. iframe#content-frame). Extend the chain to ... >> iframe#content-frame and use browser_list_clickables and browser_click_locator (e.g. role: "button", name: "Next") there. One-line takeaway: when the frame has no DOM content, use frame_inventory to find the real content iframe, then add it to the chain.

  • Canvas or custom-rendered UI
    If frame_inventory shows a large canvas and no useful iframe, or locators don't match: use browser_click_at_rel_debug to see where (rx, ry) lands, then browser_click_at_rel with adjusted (rx, ry), or browser_frame_bbox + browser_click_at with computed (x, y).

  • Quizzes / multiple identical buttons
    When several "SUBMIT" or "Next" buttons exist and only one is enabled, use browser_click_locator with enabledOnly: true (and same role/name) so the first enabled match is clicked. Or use browser_list_clickables with role: "button", name: "SUBMIT" (and optionally enabledOnly: true) to see indices, then click with nth. Use scopeCss (e.g. .quiz-card) to restrict to the current question card and avoid matching the sidebar.

  • Debugging "click does nothing"
    Check: (1) Correct frame? → browser_frame_probe and browser_frame_inventory. (2) Right element? → browser_list_clickables in that frame; browser_hit_test_rel to see what's under (rx, ry). (3) Right coordinates? → browser_click_at_rel_debug. (4) Multiple matches? → use nth or enabledOnly.


End-to-end: IBM SkillsBuild / ALM course

You can run the full course flow with only Browserose MCP tools: from the IBM page through login, learning plan, launching the activity, and completing lessons and quizzes.

1. Start from the IBM page and log in

  • Navigate to the course or plan URL (e.g. https://skills.yourlearning.ibm.com/activity/PLAN-...).

  • If redirected to login: browser_click_locator with text: "Log in with ibm" (or equivalent). On the IBM login page:

    • browser_type_locator with role: "textbox", name: "IBMid", and the email.

    • browser_click_locator with role: "button", name: "Continue".

    • browser_type_locator with role: "textbox", name: "Password", and the password.

    • browser_click_locator with role: "button", name: "Log in".

  • Use browser_wait and browser_screenshot as needed to confirm the next page.

2. Open the learning plan and the module

  • From the plan page: browser_click_locator with text: "Microcredential 1: Data Classification" (or the right section).

  • Then browser_click_locator with text: "Classifying and Sourcing Data" (or the target module).

  • Launch the activity: browser_click_locator with role: "button", name: "Go to activity".

  • Wait for the player: Clicking Go to activity may open the SCORM player in a new tab. The MCP attaches to new tabs automatically (popup handler), so the next tool calls then run in the player tab. Use browser_wait (e.g. 5–8 seconds), then browser_frame_probe or browser_frame_inventory on iframe#pplayer_iframe (and then iframe#pplayer_iframe >> iframe#modulePlayerIframe if needed) until the content frame is present. The visible lesson UI is in the content frame:
    iframe#pplayer_iframe >> iframe#modulePlayerIframe >> iframe#content-frame

3. Content frame: lessons and “Continue”

  • Continue / Next (content):
    browser_click_locator with frameSelector: "iframe#pplayer_iframe >> iframe#modulePlayerIframe >> iframe#content-frame", css: "button.continue-btn".

  • Use browser_list_clickables with that frameSelector to discover buttons (e.g. “Next”, “Continue”). Use browser_screenshot with that frameSelector when you need to see what’s on screen.

4. Practice quiz: two-pass strategy

The fastest way to pass is: (1) first pass—answer arbitrarily, submit, read the correct answer from feedback, memorize it; (2) TAKE AGAIN; (3) second pass—answer with the memorized correct options and submit.

  • Start or restart quiz:
    browser_click_locator in the content frame with text: "START QUIZ" or text: "TAKE AGAIN".

  • Select an option:
    If locators like #qmc-X-label are covered by overlays, use browser_click_at_rel in the content frame with e.g. rx: 0.5, and ry roughly: first option ~0.48–0.52, second ~0.56–0.6, third ~0.64–0.68 (tune if layout differs). Or use browser_hit_test_rel / browser_click_at_rel_debug to confirm.

  • Submit:
    browser_click_locator in the content frame with role: "button", name: "SUBMIT", enabledOnly: true (so the active SUBMIT is clicked).

  • Read feedback:
    After submit, use browser_frame_probe on the content frame and read textSample (or use browser_screenshot) to get “Correct answer: …” and store it per question index (Q1, Q2, …).

  • Next question:
    browser_click_at_rel in the content frame with rx: 0.65, ry: 0.85 (NEXT button area). Repeat until the quiz is done (no more SUBMIT or you see completion).

  • Second pass:
    Click TAKE AGAIN, then for each question click the option that matches the stored correct answer (by ry band or by locator if the correct option text is clickable), SUBMIT, then click (0.65, 0.85) for NEXT until the quiz is complete.

5. After the quiz and finishing the module

  • When the quiz is complete, use browser_click_locator in the content frame with css: "button.continue-btn" (or equivalent) to continue to the next lesson or close the module.

  • Repeat the same pattern for further lessons and quizzes until the module/course is marked complete.

Summary: All steps—login, plan navigation, “Go to activity”, waiting for the player, lesson Continue, quiz (two-pass with feedback reading and TAKE AGAIN), and completion—can be done with the existing tools (navigate, click_locator, type_locator, list_clickables, frame_probe, frame_inventory, click_at_rel, screenshot, wait). No manual tab switching or external tools are required.


Using iframes (including cross-origin / ALM SCORM)

  1. Navigate to a page that contains an iframe (e.g. ALM course page).

  2. Call browser_snapshot with includeFrames: true to get the main page plus same-origin iframes, or call browser_snapshot_frame with frameSelector: "iframe" (or iframe#id) to get only that frame's tree.

  3. Use the returned refs with browser_click, browser_type, etc., and pass the same frameSelector. For nested iframes use a chained selector with >>, e.g. iframe#pplayer_iframe >> iframe#modulePlayerIframe.

Example: click "Next" inside the first iframe:

  • browser_snapshot_frame with frameSelector: "iframe" → get ref for the "Next" button (e.g. f1e2).

  • browser_click with ref: "f1e2", frameSelector: "iframe".

Escape hatch (cross-origin / SCORM): For frames where snapshot fails, use Playwright locators directly (no AX/DOMSnapshot):

  • browser_list_clickables with frameSelector: "iframe#pplayer_iframe >> iframe#modulePlayerIframe" → lists buttons/links with text and enabled/disabled.

  • ALM SCORM: The visible lesson UI (e.g. "Next", "Learning objectives") lives in a third-level iframe. Use browser_frame_inventory on iframe#pplayer_iframe >> iframe#modulePlayerIframe to see child iframes; then chain to the content frame: iframe#pplayer_iframe >> iframe#modulePlayerIframe >> iframe#content-frame. Use that selector with browser_list_clickables and browser_click_locator (e.g. role: "button", name: "Next").

  • browser_click_locator with the same frameSelector and role: "button", name: "Next" (or text: "Next") → clicks the element. Works because Playwright targets the frame's context directly.

Cross-origin / SCORM (AX tree empty): The server also uses a 3-tier snapshot for frames:

  1. Tier A — CDP Accessibility.getFullAXTree (refs with backendDOMNodeId; click via box model).

  2. Tier B — If AX is empty, CDP DOMSnapshot.captureSnapshot (refs with viewport coordinates; click via Input.dispatchMouseEvent).

  3. Tier C — Use browser_screenshot with frameSelector, then browser_click_at with the same frameSelector and (x, y) to click by coordinates (e.g. canvas or when both AX and DOM snapshot fail).


License and author

  • License: This project is open source. Use and modify it freely.

  • Developer: ETTALBI OMAR

Available Tools

24 tools
browser_clickA

Click an element by ref from the snapshot. Use frameSelector for iframes; chain with ' >> ' for nested frames.

ParametersJSON Schema
NameRequiredDescriptionDefault
refYesElement ref from snapshot
frameSelectorNoOptional. Iframe selector, e.g. iframe#id or iframe#a >> iframe#b for nested

TDQS

A3.7/5.0
Behavior2/5

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

With no annotations, the description must carry the burden of behavioral disclosure. It explains how to target an element but says nothing about side effects, navigation, waiting behavior, or error handling. The iframe chaining detail is more parameter guidance than behavioral context, leaving the post-click outcome unspecified.

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

Conciseness5/5

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

Two sentences, front-loaded with the core action and immediately followed by a precise iframe usage note. 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.

Completeness3/5

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

For a simple 2-parameter tool, this is minimally adequate: it covers the basic click action and frame handling. However, without annotations or output schema, it lacks guidance on choosing this ref-based click over sibling click variants and does not explain expected return values or errors.

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

Parameters3/5

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

Schema description coverage is 100% and already documents both parameters, including the chaining syntax for nested frames. The description's frameSelector mention largely restates schema content, adding no significant extra semantics.

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

Purpose5/5

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

The description uses a specific verb ('Click') and clearly identifies the target as an element by ref from the snapshot. This distinguishes it from coordinate-based, locator-based, or text-based click tools among the siblings.

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

Usage Guidelines4/5

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

The description gives clear context for when to use this tool ('by ref from the snapshot') and provides concrete iframe usage instructions with chaining syntax. It does not explicitly exclude or compare against sibling click tools, but the ref-based condition implicitly defines its niche.

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

browser_click_atA

Click at (x, y) relative to a frame's viewport. Use when snapshot/refs are unavailable (e.g. cross-origin or canvas). Chain frameSelector for nested frames.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesX offset from frame viewport left
yYesY offset from frame viewport top
buttonNoleft | rightleft
clickCountNoNumber of clicks
frameSelectorYesFrame whose viewport (x,y) is relative to; use ' >> ' for nested

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It clarifies the coordinate frame ('relative to a frame's viewport') and how to target nested frames, which are meaningful behavioral traits. It does not mention click event details, wait behavior, or side effects, but these are less critical for a simple coordinate click action.

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

Conciseness5/5

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

The description is two sentences long, with the core action first and usage guidance second. Every sentence adds value without redundancy or filler. This is a model of conciseness.

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

Completeness4/5

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

Given the tool's complexity (5 parameters, no output schema, no annotations), the description provides necessary context for when to use coordinate-based clicking and how to handle nested frames. It does not explain return values, but that is not essential for a click action. The description, combined with the schema, provides sufficient context for most use cases.

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

Parameters3/5

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

The input schema provides descriptions for all 5 parameters (100% coverage), so the schema already documents the parameters. The description adds minimal extra meaning by reinforcing the coordinate system and frame chaining, but this largely duplicates the schema. Baseline 3 is appropriate because the description does not significantly add beyond the structured schema.

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

Purpose5/5

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

The description clearly states 'Click at (x, y) relative to a frame's viewport,' which identifies the specific verb, resource, and coordinate system. It distinguishes from sibling tools by noting the use case 'when snapshot/refs are unavailable (e.g. cross-origin or canvas),' separating it from element-based click tools.

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

Usage Guidelines4/5

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

The description explicitly says 'Use when snapshot/refs are unavailable' and gives examples (cross-origin, canvas), which clearly indicates when to use the tool. It also instructs to 'Chain frameSelector for nested frames,' providing practical usage guidance. However, it does not explicitly mention alternative tools or when not to use it, so it stops short of full exclusions.

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

browser_click_at_relB

Click at relative position (rx, ry) in [0..1] inside the frame. E.g. (0.5, 0.9) = center-bottom. Uses Playwright page.mouse.click for reliable coordinates.

ParametersJSON Schema
NameRequiredDescriptionDefault
rxYesRelative X in 0..1 (0=left, 1=right)
ryYesRelative Y in 0..1 (0=top, 1=bottom)
buttonNoleft | rightleft
frameSelectorYesChained iframe selector

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It discloses the implementation method (Playwright page.mouse.click) and reliability, but it does not mention side effects (e.g., triggering events, scrolling) or prerequisites (e.g., frame must be loaded). For a mutating 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.

Conciseness5/5

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

Two sentences, front-loaded with the core action and then a clarifying example and implementation note. Every word earns its place with no fluff.

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

Completeness3/5

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

The tool is simple, and the schema covers all parameters, but with no output schema and no annotations, the description doesn't describe what happens upon success/failure or whether the click occurs even if no element is at the coordinates. It is adequate for basic usage but lacks deeper context for a complete picture.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds an example that maps (0.5, 0.9) to center-bottom, which is helpful but largely redundant with the per-parameter descriptions. It doesn't provide syntax details beyond what the schema already documents.

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

Purpose4/5

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

The description clearly states a specific action ('Click') with a precise scope ('at relative position (rx, ry) in [0..1] inside the frame'). The example '(0.5, 0.9) = center-bottom' further clarifies the behavior and distinguishes it from absolute-position click tools like 'browser_click_at'. However, it doesn't explicitly name sibling alternatives, so it falls just short of a 5.

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

Usage Guidelines3/5

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

The description implies usage for clicking at relative coordinates within a frame and mentions reliability ('Uses Playwright page.mouse.click for reliable coordinates'). It does not contrast with alternatives (e.g., 'browser_click' for element-based clicks) or state when not to use it. This is clear context but with no exclusions.

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

browser_click_at_rel_debugA

Return frame screenshot plus exact page coordinates and in-frame pixel where click_at_rel(rx, ry) would click. No dot drawn; use to verify target.

ParametersJSON Schema
NameRequiredDescriptionDefault
rxYesRelative X in 0..1
ryYesRelative Y in 0..1
frameSelectorYesChained iframe selector

TDQS

A4.2/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses what it returns (screenshot, page coordinates, in-frame pixel) and a key limitation ('No dot drawn'), which is valuable behavioral context. It does not mention error behavior or side effects, but for a read-only debug tool this is sufficient.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the main output, and every word adds value. It conveys the essential information without any redundancy or irrelevant detail.

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

Completeness4/5

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

For a simple debug tool with no annotations and no output schema, the description covers the return value, key limitation, and usage intent. It lacks details on error handling or coordinate interpretation, but the tool's scope is narrow and the description is sufficiently complete for an agent to invoke it correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds little beyond the schema, only re-mentioning rx and ry in the context of click_at_rel. It does not provide extra meaning for frameSelector or the exact format of coordinates.

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

Purpose5/5

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

The description clearly states the tool returns a frame screenshot plus exact page coordinates and in-frame pixel where click_at_rel(rx, ry) would click. It distinguishes from siblings by explicitly mentioning 'No dot drawn' and 'use to verify target', contrasting with actual click tools like browser_click_at_rel.

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

Usage Guidelines4/5

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

The phrase 'use to verify target' gives a clear when-to-use scenario. It implies this is a debugging/verification alternative to click_at_rel, and the context of sibling tools reinforces that. However, it does not explicitly name alternatives or state when not to use it, so it falls short of a 5.

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

browser_click_locatorA

Click by Playwright locator. Use frameSelector for iframes; omit for main page. Provide one of: role+name, text, or css. Optional: nth (0-based index), enabledOnly (click first enabled match), scopeCss (resolve within container).

ParametersJSON Schema
NameRequiredDescriptionDefault
cssNoCSS selector (e.g. input[type=email], button)
nthNoOptional. 0-based index of match (e.g. 3 = 4th match). Use when multiple elements match.
nameNoAccessible name (regex or string); use with role
roleNoARIA role, e.g. button, link
textNoVisible text to match (alternative to role+name)
forceNoSkip actionability checks
scopeCssNoOptional. Resolve the locator only within this container (e.g. .quiz-card to avoid matching sidebar).
timeoutMsNoTimeout in ms
enabledOnlyNoOptional. If true, click the first matching element that is not disabled (e.g. first enabled SUBMIT among several).
frameSelectorNoOptional. Chained iframe selector; omit to target main page

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It discloses the locator-based approach and frame handling, and notes enabledOnly to click the first enabled match. However, it omits behavior like waiting for actionability, scrolling, error handling on no match, or navigation consequences, which is a notable gap.

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

Conciseness5/5

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

Three concise sentences. The core purpose is front-loaded, and every sentence provides essential usage guidance without redundancy.

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

Completeness4/5

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

For a 10-parameter tool with no annotations, the description covers the crucial aspects: primary locator modes, iframe handling, and optional parameters. It doesn't mention timeout or force, but those are well-documented in the schema, and overall the description is sufficient for typical use.

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

Parameters4/5

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

Schema coverage is 100%, giving a baseline of 3. The description adds value by enforcing the 'provide one of' rule and clarifying semantics for nth, enabledOnly, and scopeCss beyond what the schema states.

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

Purpose5/5

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

The description clearly states it clicks by Playwright locator, and outlines the specific locator strategies (role+name, text, css). This distinguishes it from coordinate-based or text-evaluation click tools among its siblings.

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

Usage Guidelines4/5

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

It gives concrete usage instructions: use frameSelector for iframes, omit for main page, and provide one of role+name, text, or css. It does not explicitly compare against alternative click tools like browser_click or browser_evaluate_click, but the intended usage is clear.

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

browser_evaluate_clickA

Click an element inside a frame via DOM .click() (runs in frame context). Bypasses visibility/actionability. Use when locator click fails (e.g. SUBMIT disabled or not visible). Same-origin frame only.

ParametersJSON Schema
NameRequiredDescriptionDefault
cssYesCSS selector (e.g. button.quiz-card__button, [aria-label=SUBMIT])
nthNoOptional. 0-based index when multiple match (default 0)
timeoutMsNoTimeout to resolve frame
frameSelectorYesChained iframe selector

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the burden of behavioral disclosure. It transparently reveals that it bypasses visibility/actionability, runs in frame context, and works only for same-origin frames. This is useful, but it doesn't mention side effects or failure behavior beyond the timeout parameter, so it's not fully comprehensive.

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

Conciseness5/5

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

The description is three short sentences, each delivering essential information: what it does, why to use it, and its constraint. It is front-loaded and free of filler, making it highly efficient for an agent to parse.

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

Completeness4/5

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

Given the tool's complexity (frame clicks, bypassing actionability), the description covers the core behavior, usage scenario, and a key limitation. It lacks an explicit statement about return values or what happens on failure, but the schema's timeoutMs and the absence of an output schema keep this from being a major gap.

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

Parameters3/5

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

The input schema already provides full descriptions for all parameters (100% coverage), so the baseline is 3. The description reinforces the frame context and the bypassing behavior, which indirectly clarifies the purpose of the frameSelector and css parameters, but it doesn't add significant new parameter-level detail beyond the schema.

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

Purpose5/5

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

The description clearly states the tool clicks an element inside a frame using DOM .click(), with the context of running in frame context. It distinguishes itself from sibling tools by specifying the mechanism (DOM .click()) and the limitation (same-origin frame only), making its purpose unambiguous.

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

Usage Guidelines4/5

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

It explicitly says to use when locator click fails (e.g., SUBMIT disabled or not visible), providing a clear trigger condition. It also notes the same-origin frame limitation, but does not name sibling alternatives directly or explicitly state when not to use it, so it falls just short of full guidance.

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

browser_evaluate_click_by_textA

Click an element by its text content via DOM .click() inside the frame. Bypasses visibility/actionability and overlay issues. Use when locator/click_at_rel fail (e.g. quiz options). Same-origin frame only.

ParametersJSON Schema
NameRequiredDescriptionDefault
nthNo0-based index when multiple elements match (default 0)
textYesExact or partial text to match (see match param)
matchNoexact = trimmed text equals; contains = textContent includesexact
scopeCssNoOptional. Search only inside this container (e.g. .page-lesson to exclude sidebar)
timeoutMsNoTimeout to resolve frame
frameSelectorYesChained iframe selector

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the transparency burden. It discloses key behaviors: using DOM .click(), bypassing visibility/actionability and overlay issues, and the same-origin frame constraint. However, it does not mention potential event simulation differences or error behavior, so it is not fully transparent.

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

Conciseness5/5

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

The description is compact: three sentences, each adding unique value. The main purpose leads, followed by behavioral notes and usage guidance. No fluff or repetition.

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

Completeness4/5

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

The tool is relatively simple (click action), and the schema fully documents all parameters. The description provides usage context, constraints, and clarifies when to choose it over alternatives. However, it does not describe return values or failure modes, but for a click tool this is acceptable. Given the lack of annotations, a complete description would ideally mention error handling, but overall it is adequate.

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

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description does not add extra parameter information beyond what the schema already provides; the mention of 'text content' aligns with existing parameter descriptions. No additional semantics are provided.

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

Purpose5/5

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

The description states a specific action: 'Click an element by its text content via DOM .click() inside the frame.' It clearly identifies the method and resource, and differentiates from siblings by positioning it as a fallback when 'locator/click_at_rel fail' and by noting the same-origin frame restriction.

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

Usage Guidelines5/5

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

The description explicitly says 'Use when locator/click_at_rel fail (e.g. quiz options)', naming alternatives and providing an example scenario. It also notes the limitation 'Same-origin frame only', which serves as an exclusion criterion.

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

browser_frame_bboxA

Get bounding box (x, y, width, height) of the frame in page coordinates. Use with browser_click_at or to compute relative clicks.

ParametersJSON Schema
NameRequiredDescriptionDefault
frameSelectorYesChained iframe selector; use ' >> ' for nested

TDQS

A4/5.0
Behavior3/5

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

No annotations are present, so the description carries the full burden. It adds useful context such as 'page coordinates' and the return tuple, but does not disclose whether the operation is read-only, what happens if the frame selector is invalid, or any potential side effects. This is a minimal but not misleading disclosure.

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

Conciseness5/5

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

The description is two short sentences with no fluff. The first sentence states the core function, and the second provides a concrete usage example. Every word earns its place.

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

Completeness4/5

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

For a simple one-parameter read-only tool with no output schema, the description covers the essential return shape and suggests a primary use case. It does not explicitly mention 'iframe' in the description, but the schema does. Overall, it is reasonably complete for the tool's complexity.

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

Parameters3/5

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

The schema fully documents the single parameter 'frameSelector' with the instruction 'use >> for nested'. Since schema description coverage is 100%, the description adds no extra parameter meaning beyond what the schema already provides, so the baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Get bounding box (x, y, width, height) of the frame in page coordinates.' It uses a specific verb ('Get') and resource ('bounding box of the frame'), and the mention of 'browser_click_at' distinguishes it from other browser tools.

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

Usage Guidelines4/5

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

The description gives explicit usage context: 'Use with browser_click_at or to compute relative clicks.' This tells the agent when to use the tool, though it does not explicitly exclude alternatives or list when-not-to-use scenarios.

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

browser_frame_inventoryA

Run inside the frame: list child iframes (id, name, src, rect), canvas elements (rect), count of open shadow roots, bodyRect. Use to see if visible UI is in a nested iframe or canvas.

ParametersJSON Schema
NameRequiredDescriptionDefault
timeoutMsNoTimeout to resolve frame
frameSelectorYesChained iframe selector

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the full disclosure burden. It truthfully lists what the tool returns (iframes, canvas rects, shadow root count, bodyRect) and indicates it runs 'inside the frame,' suggesting a read-only operation. It does not mention side effects, error behavior, or timeout handling, but for an inventory operation the output disclosure is sufficient.

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

Conciseness5/5

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

The description is two sentences, with the first sentence enumerating the exact output items and the second providing the use case. Every word earns its place, front-loading the essential information without any fluff.

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

Completeness4/5

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

Given the absence of an output schema, the description compensates by enumerating key output fields (id, name, src, rect, bodyRect) and the count of shadow roots. It is adequate for an inventory tool, but it does not specify the exact shape of rectangles or potential failure modes, leaving minor gaps.

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

Parameters3/5

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

The input schema covers both parameters with descriptions: frameSelector ('Chained iframe selector') and timeoutMs. The description adds no additional parameter-level meaning beyond reinforcing the 'inside the frame' context, which aligns with frameSelector. Since schema coverage is 100%, a baseline of 3 is appropriate.

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

Purpose5/5

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

The description uses a specific verb ('list') and identifies exact resources: child iframes, canvas elements, shadow root count, and bodyRect. It clearly distinguishes itself from sibling tools by framing the output as an inventory of frame internals, with a concrete use case (detecting nested iframes or canvas UI).

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

Usage Guidelines4/5

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

The description states when to use the tool: 'Use to see if visible UI is in a nested iframe or canvas.' This provides clear context but does not explicitly name alternatives or exclusions. It implies a diagnostic role without comparing to sibling tools like browser_frame_probe or browser_snapshot_frame, 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.

browser_frame_probeA

Run a small diagnostic inside a frame: url, title, readyState, counts (buttons, clickables), textSample. Use to see if Playwright can see DOM (if probe fails or counts=0, UI may be canvas).

ParametersJSON Schema
NameRequiredDescriptionDefault
timeoutMsNoTimeout to resolve frame
frameSelectorYesChained iframe selector, e.g. iframe#pplayer_iframe >> iframe#modulePlayerIframe

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses the probe's return fields and the interpretation of failures (counts=0 may mean canvas), which is helpful. However, it doesn't mention side effects, behavior when the frame isn't found, or that it waits for the frame to resolve (timeoutMs implies this but isn't stated).

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

Conciseness5/5

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

The description is a single, focused sentence that front-loads the primary output and then adds a diagnostic note. Every word earns its place with no redundancy or filler.

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

Completeness4/5

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

Without an output schema, the description compensates by listing the exact fields returned (url, title, readyState, counts, textSample) and providing a diagnostic interpretation. It's sufficient for a probe tool, though it could clarify how the results are structured or formatted.

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

Parameters3/5

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

Schema description coverage is 100%: both parameters have clear descriptions (frameSelector with an example, timeoutMs with default and purpose). The tool description adds no additional parameter context, so the baseline of 3 applies.

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

Purpose5/5

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

The description clearly states the tool's function: 'Run a small diagnostic inside a frame' with specific outputs (url, title, readyState, counts, textSample). It distinguishes itself from sibling tools like browser_snapshot and browser_frame_inventory by focusing on DOM visibility probing.

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

Usage Guidelines4/5

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

The description gives explicit usage context: 'Use to see if Playwright can see DOM (if probe fails or counts=0, UI may be canvas).' This tells the agent when to choose this tool, though it doesn't explicitly name alternatives.

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

browser_go_backB

Go back in history

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It only states the action, not what happens when history is empty, whether navigation blocks or waits, or what success/failure looks like.

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

Conciseness5/5

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

One short, front-loaded sentence with zero waste. It is as concise as possible while conveying the core purpose.

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

Completeness3/5

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

This is a simple parameterless tool, but contextual completeness is reduced by the absence of return values, error behavior, or navigation semantics. The description is minimally viable but leaves important behavior unspecified.

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

Parameters4/5

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

The tool has zero parameters, so the baseline is 4. The description adds no parameter details, but none are needed.

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

Purpose4/5

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

The description 'Go back in history' clearly states the action (go back) and the resource (history), distinguishing it from sibling tools like browser_go_forward and browser_navigate. It is terse but unambiguous.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It does not mention that this is the opposite of browser_go_forward, nor does it advise against using it when no history exists.

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

browser_go_forwardA

Go forward in history

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states 'Go forward in history' without specifying behavior when no forward history exists, whether it waits for page load, or any side effects. This is a minimal disclosure.

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

Conciseness5/5

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

The description is a single, concise sentence that directly conveys the tool's purpose. It is front-loaded and contains no unnecessary words or repetition, earning a high score for conciseness.

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

Completeness3/5

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

For a simple tool with no parameters and no output schema, the description is adequate but lacks edge-case context such as behavior when history is empty. It is complete for basic use but could benefit from a note on failure modes.

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

Parameters4/5

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

The tool has zero parameters, and the schema is empty. The baseline for 0 parameters is 4, and there is no need for parameter documentation. The description adds no parameter information, which is appropriate.

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

Purpose5/5

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

The description 'Go forward in history' clearly states the action with a specific verb and resource. It is distinguished from siblings like browser_go_back, which covers the opposite direction, and browser_navigate, which handles direct navigation.

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

Usage Guidelines3/5

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

The usage is implied: use this tool to move forward in the browser's history. However, there is no explicit comparison to alternatives or mention of when not to use it, though the tool's simplicity makes the context fairly intuitive.

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

browser_hit_test_relA

Return element at relative (rx, ry) in [0..1] inside the frame via elementFromPoint. Returns tag, id, class, rect, pointerEvents, cursor; if iframe, includes src/name. Confirms where clicks land.

ParametersJSON Schema
NameRequiredDescriptionDefault
rxYesRelative X in 0..1
ryYesRelative Y in 0..1
timeoutMsNoTimeout to resolve frame
frameSelectorYesChained iframe selector

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It discloses the implementation ('elementFromPoint'), the return fields (tag, id, class, rect, pointerEvents, cursor; iframe src/name), and implies a read-only, non-mutating operation. It lacks an explicit statement about no side effects, but the overall behavior is well conveyed.

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

Conciseness5/5

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

The description is three concise sentences: what it does, what it returns, and its purpose. Each sentence earns its place with no fluff or redundancy. It is front-loaded with the core action and remains highly readable.

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

Completeness4/5

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

There is no output schema, so the description must explain return values, which it does by listing the fields. With no annotations, it also covers the behavioral aspect. It does not mention error cases (e.g., element not found) or clarify that it does not perform a click, but for a simple hit-test tool, the provided information is largely sufficient.

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

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description adds minimal extra parameter meaning beyond the schema—it mentions that rx/ry are relative in [0..1] and that the operation is inside a frame, but these are already captured in the schema descriptions. The description does not provide additional context about the parameters (e.g., coordinate mapping, frame chaining nuances).

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

Purpose5/5

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

The description clearly states the verb ('Return'), the resource ('element at relative (rx, ry)... inside the frame'), and the method ('via elementFromPoint'). It also explains the purpose ('Confirms where clicks land'), distinguishing it from sibling tools like browser_click_at_rel (which clicks) and browser_frame_bbox (which returns geometry).

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

Usage Guidelines4/5

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

The description provides clear context by stating the tool confirms where clicks land, implying use for hit-testing/verification before actual clicks. It does not explicitly name alternatives or exclusions, but the intended use case is evident from the description and the sibling tool names.

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

browser_hoverA

Hover over an element by ref. Use frameSelector when target is inside an iframe.

ParametersJSON Schema
NameRequiredDescriptionDefault
refYesElement ref from snapshot
frameSelectorNoOptional. Iframe selector when target is inside an iframe

TDQS

A3.8/5.0
Behavior2/5

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

No annotations are provided, so the description must disclose behavioral traits. It only states the action and iframe handling, but doesn't disclose whether the hover has side effects, triggers events, or requires any preconditions. This is minimal coverage.

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

Conciseness5/5

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

The description is two short sentences, directly front-loads the action, and contains no filler.

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

Completeness4/5

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

For a simple two-parameter tool, the description covers the primary use and the frame case, but given no annotations, it could mention that hovering may trigger UI changes or that the element must be visible. Still, it's largely complete for its simplicity.

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

Parameters3/5

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

The input schema already describes both parameters with 100% coverage; the description's frameSelector note duplicates the schema's description. No new parameter semantics are added, so baseline 3 applies.

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

Purpose5/5

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

The description uses a specific verb 'Hover' and identifies the resource 'an element by ref', clearly distinguishing from sibling tools like browser_click or browser_type. It directly states the core action.

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

Usage Guidelines4/5

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

It provides explicit iframe usage guidance ('Use frameSelector when target is inside an iframe'), which is clear context. However, it doesn't discuss when to prefer hover over alternatives or exclusions, so it lacks full comparative guidance.

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

browser_list_clickablesA

List visible clickable elements (buttons, links) in a frame. Optionally filter by role+name, text, or css; filter by enabledOnly; or scope to a container (scopeCss). Use to discover what to click without snapshot.

ParametersJSON Schema
NameRequiredDescriptionDefault
cssNoOptional. Filter to elements matching this CSS selector.
nameNoOptional. Filter to accessible name (regex); use with role.
roleNoOptional. Filter to this ARIA role (e.g. button). Use with name for exact filter.
textNoOptional. Filter to elements whose text contains this (substring).
scopeCssNoOptional. List only clickables within this container selector.
timeoutMsNoTimeout to resolve frame and elements
enabledOnlyNoOptional. If true, list only enabled elements.
frameSelectorYesChained iframe selector, e.g. iframe#pplayer_iframe >> iframe#modulePlayerIframe
includeBoundingBoxNoInclude x,y,width,height for each

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It discloses that only visible clickables are listed, that listing is frame-scoped, and that various filters are supported. This covers key behavioral traits, though it does not mention return format or potential side effects (which are minimal for a list operation).

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

Conciseness5/5

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

Two tight sentences with no redundancy. The first sentence states the core function, the second lists filter options and the use case. Every word earns its place.

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

Completeness4/5

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

For a tool with 9 parameters and no output schema, the description provides sufficient context for selection and invocation: it names the resource, timing, and main filter dimensions. It does not describe the return structure, but parameter details are fully covered in the schema, so overall completeness is good.

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

Parameters3/5

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

Schema description coverage is 100%, so baseline is 3. The description adds value by grouping filter options (role+name, text, css, enabledOnly, scopeCss) but doesn't elaborate on parameters like timeoutMs or includeBoundingBox beyond what the schema already provides.

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

Purpose5/5

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

The description begins with a clear, specific action: 'List visible clickable elements (buttons, links) in a frame.' It also distinguishes this tool from the sibling browser_snapshot by adding 'Use to discover what to click without snapshot.'

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

Usage Guidelines4/5

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

The closing phrase 'Use to discover what to click without snapshot' gives clear context for when to use this tool. It implicitly differentiates from browser_snapshot but does not explicitly state when not to use it or name alternative tools.

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

browser_navigateC

Navigate to a URL

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesURL to open

TDQS

C2.9/5.0
Behavior2/5

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

There are no annotations, so the description carries the full burden of behavioral disclosure. It does not mention whether navigation waits for page load, what happens after navigation, potential side effects, or error behavior. The description adds no details 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.

Conciseness4/5

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

The description is very concise with no unnecessary words. It is front-loaded and efficient, though it lacks the depth seen in higher-quality descriptions.

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

Completeness2/5

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

This is a simple navigation tool with one parameter and no output schema, but the description does not explain expected outcomes such as whether the page load completes, what is returned, or how to verify success. It is incomplete for an agent to use confidently.

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

Parameters3/5

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

Schema coverage is 100% and the parameter 'url' is described as 'URL to open'. The tool description 'Navigate to a URL' adds no additional meaning 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.

Purpose4/5

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

The description 'Navigate to a URL' uses a specific verb and resource, clearly indicating the tool's primary action. It does not explicitly differentiate from sibling tools, but the action is distinct enough given the tool name.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives like browser_go_back, browser_go_forward, or browser_wait. The description simply states the action without context or exclusions.

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

browser_press_keyB

Press a key (e.g. Enter, Tab, ArrowRight). Use frameSelector to send to an iframe.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesKey to press, e.g. Enter, Tab, ArrowRight
frameSelectorNoOptional. Iframe selector to target the frame

TDQS

B3.3/5.0
Behavior2/5

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

With no annotations, the description carries the full burden, but it only restates the action ('Press a key') and adds iframe targeting. It does not disclose behavior like event sequencing, modifiers, focus requirements, or potential side effects such as navigation. This is a minimal disclosure with little added context.

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

Conciseness5/5

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

The description is two short sentences, precisely front-loaded with the action ('Press a key') and examples. Every word earns its place without unnecessary detail.

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

Completeness3/5

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

The tool is simple with two documented parameters and no output schema. The description covers the main action and the iframe nuance, but lacks any note about edge cases, wait behavior, or what happens if the key press triggers navigation, making it adequate but not rich.

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

Parameters3/5

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

The input schema already describes both parameters (key, frameSelector) with examples, so schema coverage is 100%. The description adds a note about using frameSelector to send to an iframe, which is slightly clearer than the schema's 'target the frame', but does not add significant meaning beyond the schema.

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

Purpose4/5

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

The description clearly states the tool presses a key and gives examples (Enter, Tab, ArrowRight). It distinguishes from sibling tools like browser_click and browser_type by focusing on key presses, though it does not explicitly compare. The verb 'Press' is specific and the resource is 'key'.

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

Usage Guidelines3/5

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

The description gives context that keys like Enter/Tab/ArrowRight can be pressed and mentions using frameSelector for iframes, but it does not explicitly state when to prefer this over browser_type or browser_click. It implies usage for key events, 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.

browser_screenshotA

Take a screenshot of the page or of a specific iframe.

ParametersJSON Schema
NameRequiredDescriptionDefault
frameSelectorNoOptional. Iframe selector to screenshot only that frame

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It only states the scope (page or iframe) and does not disclose the output format, whether it captures the full page or viewport, or any side effects. This is insufficient for a tool with no annotation support.

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

Conciseness5/5

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

The description is a single concise sentence that is front-loaded with the verb and resource. It contains no fluff or unnecessary details, making it appropriately sized for a simple tool.

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

Completeness3/5

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

Given the low complexity (1 optional param, no output schema, no annotations), the description covers the core action but lacks crucial context about the return value (e.g., image path vs base64) and any behavioral constraints. It is minimally viable but not fully complete.

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

Parameters3/5

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

The schema describes frameSelector as an optional iframe selector, matching the description's mention of 'specific iframe'. Since schema coverage is 100%, the baseline is 3; the description adds no extra semantics beyond the schema.

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

Purpose5/5

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

The description clearly states the tool takes a screenshot of the page or a specific iframe, using the specific verb 'take' and identifying the resource. This distinguishes it from siblings like browser_snapshot (DOM snapshot) and browser_frame_bbox (bounding box).

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

Usage Guidelines3/5

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

The description implies usage by stating what it does (screenshot) but does not explicitly guide when to use it over alternatives like browser_snapshot. No exclusions or contextual triggers are provided, so it remains at the 'implied usage' level.

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

browser_select_optionA

Select option(s) in a dropdown by ref. Use frameSelector when inside an iframe.

ParametersJSON Schema
NameRequiredDescriptionDefault
refYesSelect element ref from snapshot
valuesYesOption value(s) to select
frameSelectorNoOptional. Iframe selector when target is inside an iframe

TDQS

A3.7/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It adds no behavioral details beyond the schema—no mention of return values, error handling, or the prerequisite of having a snapshot ref. The iframe guidance is already present in the schema, so it contributes no unique transparency.

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

Conciseness5/5

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

The description is two short sentences, front-loaded with the main action and no wasted words. Every sentence is purposeful, though the second sentence is somewhat redundant with the schema, it remains concise.

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

Completeness3/5

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

Given no annotations and no output schema, the description omits return value information and preconditions such as needing a snapshot ref. The core function is clear and schema covers all parameters, but the tool's complete behavior is under-specified for an agent to fully anticipate side effects or results.

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

Parameters3/5

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

The input schema has 100% description coverage for all three parameters, so the description adds no new semantic information beyond what the schema already states. It merely reiterates 'by ref' and iframe usage, which the schema explains.

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

Purpose5/5

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

Description clearly states 'Select option(s) in a dropdown by ref' with a specific verb and resource, differentiating it from other browser action tools like click or type. The iframe hint adds specificity, making it obvious what the tool does.

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

Usage Guidelines4/5

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

Provides clear usage context with 'Use frameSelector when inside an iframe,' which indicates when to apply that parameter. However, it does not explicitly mention alternatives or when not to use this tool relative to sibling tools, 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.

browser_snapshotA

Capture accessibility snapshot of the current page. Use for getting refs to interact with. Set includeFrames true to include iframe content.

ParametersJSON Schema
NameRequiredDescriptionDefault
includeFramesNoInclude content of same-origin iframes

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description must carry the transparency burden. It discloses the iframe inclusion behavior ('Set includeFrames true to include iframe content') but does not explain what the snapshot contains, how refs are represented, or any potential side effects. Adequate but not rich.

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

Conciseness5/5

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

Two sentences, front-loaded with the action, and every word contributes meaning. No unnecessary detail or repetition.

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

Completeness4/5

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

For a simple tool with one optional parameter and no output schema, the description adequately covers purpose and usage. It could mention what the snapshot format looks like, but it provides enough for an agent to decide when to invoke it.

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

Parameters3/5

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

The schema already provides 100% coverage for the single parameter (includeFrames) with a description. The tool description merely restates this option ('Set includeFrames true...') without adding new meaning, so baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states it 'Capture[s] accessibility snapshot of the current page' and explains its purpose: 'Use for getting refs to interact with.' This distinguishes it from visual tools like browser_screenshot and interaction tools like browser_click.

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

Usage Guidelines4/5

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

The description gives clear usage context ('Use for getting refs to interact with') but does not explicitly mention alternatives or cases when not to use it. This fits the 'clear context, no exclusions' level.

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

browser_snapshot_frameA

Snapshot a single iframe by selector. Use ' >> ' for nested frames, e.g. iframe#pplayer_iframe >> iframe#modulePlayerIframe.

ParametersJSON Schema
NameRequiredDescriptionDefault
frameSelectorYesCSS selector for the iframe, or chained with ' >> ' for nested frames

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden for behavioral disclosure. It discloses the nested frame syntax with an example, which is useful behavior not obvious from the schema. However, it doesn't mention what the snapshot output is (e.g., image path, base64), what happens if the selector is invalid, or explicitly confirm that it's a read-only operation. The nested-frame guidance adds some value but leaves significant gaps.

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

Conciseness5/5

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

The description is two sentences long and immediately states the core purpose. The example is concisely embedded and adds real value without fluff. Every word earns its place.

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

Completeness3/5

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

This is a simple tool with one parameter and no output schema or annotations. The description explains the selector mechanics well, but it doesn't state what the snapshot returns (e.g., a screenshot image) or how it relates to browser_snapshot. For an agent to fully understand the tool's effect and output, more information is needed, though the simplicity keeps it adequate.

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

Parameters4/5

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

Schema coverage is 100% since the only parameter, frameSelector, is described in the schema. The description adds value by providing a concrete example ('iframe#pplayer_iframe >> iframe#modulePlayerIframe') that clarifies the chaining format beyond the schema's generic description. This extra guidance helps the agent construct valid selectors.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Snapshot a single iframe by selector.' It specifies the action (snapshot), the resource (iframe), and the method (by selector). This distinguishes it from sibling tools like browser_snapshot which captures the full page, and browser_frame_probe which likely inspects frames.

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

Usage Guidelines4/5

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

The description provides clear context that this tool is for snapshotting a single iframe, and gives a specific example of using ' >> ' for nested frames. While it doesn't explicitly state when not to use it or name alternatives, the purpose is distinct enough that an agent can infer when to select this tool over siblings.

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

browser_typeA

Type text into the focused element or into the element identified by ref. Use frameSelector for elements inside an iframe.

ParametersJSON Schema
NameRequiredDescriptionDefault
refNoOptional. Target element ref from snapshot
textYesText to type
submitNoPress Enter after typing
frameSelectorNoOptional. Iframe selector when target is inside an iframe

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries the transparency burden. It discloses that typing targets the focused element or a ref, and that frameSelector handles iframes, but it does not reveal whether existing text is cleared, whether it waits for element interactivity, or what happens on failure. This is adequate but not rich.

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

Conciseness5/5

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

The description is two sentences with no wasted words, front-loading the core action and adding the iframe tip second.

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

Completeness3/5

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

Given the moderate complexity of four parameters and no annotations or output schema, the description covers the essential usage but omits details like the submit parameter behavior and distinctions from sibling typing tools. It is minimally viable.

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

Parameters3/5

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

The schema already documents all four parameters with 100% coverage. The description reinforces the ref and frameSelector roles but adds no new semantics beyond the schema, matching the baseline.

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

Purpose4/5

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

The description clearly states the tool types text into the focused element or a ref-identified element, using a specific verb and resource. It does not explicitly distinguish from the sibling browser_type_locator, but the ref-based approach provides some differentiation.

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

Usage Guidelines3/5

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

The description provides context on when to use the tool (focused element or ref) and mentions frameSelector for iframes, but it does not give explicit guidance on when to prefer this over browser_type_locator or browser_press_key. Usage is implied rather than explicitly contrasted with alternatives.

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

browser_type_locatorA

Type text into an element found by locator. Omit frameSelector for main page. Provide one of: role+name, text, or css. Optional: nth (0-based index), scopeCss (resolve within container).

ParametersJSON Schema
NameRequiredDescriptionDefault
cssNoCSS selector, e.g. input[type=email]
nthNoOptional. 0-based index of match when multiple elements match.
nameNoAccessible name; use with role
roleNoARIA role, e.g. textbox
textNoVisible text to match
inputYesText to type into the element
submitNoPress Enter after typing
scopeCssNoOptional. Resolve the locator only within this container.
timeoutMsNoTimeout in ms
frameSelectorNoOptional. Iframe selector; omit for main page

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the burden of explaining behavior. It adds useful context about locator alternatives, nth being 0-based, and scopeCss resolving within a container. However, it does not disclose error handling, return values, or behavior when multiple elements match without nth, which would be valuable for a typing tool.

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

Conciseness5/5

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

The description is three concise sentences, front-loaded with the core action and followed by parameter guidance. Every sentence earns its place with no redundancy or filler.

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

Completeness4/5

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

Despite having 10 parameters and no annotations or output schema, the description covers the essential usage scenario: how to target an element (role+name, text, css), how to narrow scope (nth, scopeCss), and frame handling. It omits details about submit and timeoutMs, but those are well described in the schema, so the context is largely complete.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds meaning beyond schema by enforcing the 'Provide one of' constraint and clarifying that frameSelector is for iframes only, which the schema does not convey as a mutual exclusivity rule.

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

Purpose5/5

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

The description starts with a specific verb and resource: 'Type text into an element found by locator.' It clearly distinguishes this from sibling tools like browser_click_locator by focusing on typing text and specifies the locator strategies (role+name, text, css).

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

Usage Guidelines3/5

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

The description gives usage constraints like 'Provide one of: role+name, text, or css' and 'Omit frameSelector for main page,' which help select locator parameters. However, it does not explicitly state when to prefer this tool over alternatives like browser_type or browser_click_locator, leaving the comparison to the agent.

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

browser_waitB

Wait for a number of seconds

ParametersJSON Schema
NameRequiredDescriptionDefault
timeYesSeconds to wait

TDQS

B3.3/5.0
Behavior2/5

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

'Wait for a number of seconds' discloses only the basic action. With no annotations provided, the description does not clarify whether the wait is blocking, whether fractional seconds are supported, or what happens with invalid values. This is minimal behavioral disclosure.

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

Conciseness5/5

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

The description is a single short sentence that is direct and free of fluff. It is appropriately concise.

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

Completeness3/5

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

For a tool with one fully documented parameter and no output schema, the description covers the core function. However, it lacks any usage context or behavioral nuance, making it minimally complete.

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

Parameters3/5

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

The schema already documents the 'time' parameter as 'Seconds to wait', and the description adds no information beyond that. With 100% schema coverage, the baseline of 3 applies.

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

Purpose5/5

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

The description clearly states the tool's action ('Wait') and resource ('number of seconds'), distinguishing it from sibling browser tools like navigation and clicking. It is specific and non-tautological.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool, no alternatives, and no exclusions. It simply states what it does, leaving the agent to infer usage context.

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

TDQS

B3.4/5.0
Disambiguation2/5

Multiple tools perform clicking (browser_click, browser_click_at, browser_click_locator, browser_click_at_rel, browser_evaluate_click, browser_evaluate_click_by_text) and several snapshot/probe tools overlap (browser_snapshot, browser_snapshot_frame, browser_frame_probe, browser_frame_inventory). Descriptions differentiate by method and use case, but the boundaries are subtle and could easily confuse an agent.

Naming Consistency4/5

All tools share the 'browser_' prefix and mostly follow a consistent verb-first pattern (navigate, click, type, hover). A few noun-based names like browser_frame_bbox and browser_frame_inventory deviate slightly, but overall the convention is predictable and readable.

Tool Count3/5

At 24 tools, this sits at the upper boundary of a comprehensive browser automation server. The count is justified by the wide range of interactions (clicks, typing, iframes, canvas, debugging), but it feels slightly heavy—some click variants could be consolidated.

Completeness4/5

The tool surface covers essential browser operations: navigation, history, waiting, clicking, typing, selecting, screenshots, and iframe support. Advanced probing and debug tools fill niche gaps. Minor omissions like an explicit scroll or text-extraction tool are workable via snapshots or evaluate, so the set is nearly complete.

Maintenance

ActivityInactive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ettomarett/Browserose-MCP'

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