Skip to main content
Glama

agent-eyes

CI node license

Visual eyes for AI coding agents. An MCP server that lets your agent see and measure web pages instead of guessing at them: screenshots at real breakpoints, zero-image layout and accessibility audits, pixel diffs against committed baselines, logins to real sites without ever seeing your password, and a check that a fix actually reached the deployed site.

It drives a real Chrome — invisibly. No window opens while your agent works; the browser only becomes visible when a human genuinely has to act, like solving a CAPTCHA. One browser session stays alive across tool calls, so a login in step 1 still holds in step 9.


Install

One command. It detects your Chrome, writes a tuned .agent-eyes/settings.json, and adds the server to your agent's MCP config (keeping a backup of it):

npx -y github:oljodev/mcp-agent-eyes setup --agent claude-code --write

Swap --agent for cursor, codex, zed, or vscode. Drop --write to print the config instead of touching any file; drop --agent to see all five and where each config file lives. Restart your agent afterwards so it picks up the server.

agent-eyes installs straight from GitHub — there's no npm package to add and nothing lands in your global node_modules. The first run builds from source and can take a minute; after that npx caches it and startup is instant.

To update later, clear the cached copy and rerun the command: rm -rf ~/.npm/_npx (or pin a tag with github:oljodev/mcp-agent-eyes#v0.28.0).

Requirements: Node.js ≥ 20, and Chrome / Chromium / Edge (the installer tells you if it can't find one). Nothing is installed globally and no browser is downloaded — agent-eyes builds on playwright-core and drives the Chrome you already have.

Claude Code, in one line:

claude mcp add agent-eyes -- npx -y github:oljodev/mcp-agent-eyes

Or edit the config by hand. The server command is npx -y github:oljodev/mcp-agent-eyes, or node /abs/path/to/mcp-agent-eyes/dist/index.js if you're running a clone.

Agent

Config file

Key

Claude Code

~/.claude.json (global) or .mcp.json (project)

mcpServers

Cursor

~/.cursor/mcp.json or .cursor/mcp.json

mcpServers

OpenAI Codex CLI

~/.codex/config.toml

[mcp_servers.agent-eyes]

Zed

~/.config/zed/settings.json

context_servers

VS Code (Copilot agent)

.vscode/mcp.json

servers

Claude Code / Cursor:

{ "mcpServers": { "agent-eyes": { "command": "npx", "args": ["-y", "github:oljodev/mcp-agent-eyes"] } } }

VS Code:

{ "servers": { "agent-eyes": { "command": "npx", "args": ["-y", "github:oljodev/mcp-agent-eyes"] } } }

Zed:

{ "context_servers": { "agent-eyes": { "source": "custom", "command": "npx", "args": ["-y", "github:oljodev/mcp-agent-eyes"], "env": {} } } }

Codex:

[mcp_servers.agent-eyes]
command = "npx"
args = ["-y", "github:oljodev/mcp-agent-eyes"]

Related MCP server: Browser-Debugger

First things to try

Just ask your agent in plain language — it picks the tools.

"Screenshot localhost:3000 at mobile and tell me what's overflowing."

No window opens. The full-resolution capture lands in .agent-eyes/captures/, a small thumbnail goes to the agent, and it answers with the elements whose right edge crosses 393 px.

"Check this page at every breakpoint and show me where the layout breaks."

matrix_responsive_audit shoots all four breakpoints in one call; detect_layout_matrix returns the diagnosis as text, with no images at all — overflow, collisions, tap targets under 44 px, unreadable font sizes.

"I fixed the hero on mobile — did it actually deploy?"

verify_fix reloads the live URL and returns a PASS/FAIL table, so "it works on my machine" gets checked against what's actually serving.

"Log into the staging site and screenshot the dashboard."

A prompt opens on localhost, you type the password into a masked field, and the agent gets back success — never the credentials.


Why not just a screenshot MCP server?

Most browser MCP servers hand the agent a picture and stop. The picture is the expensive part of the loop: it burns tokens, and the agent still has to guess at numbers. agent-eyes is built around everything that happens after the screenshot.

typical screenshot MCP

agent-eyes

Measurement

agent eyeballs the image

measure_element returns real px, spacing, and WCAG contrast — zero images

Regressions

"looks different?"

compare_to_baseline / visual_diff_regions — pixel diffs against committed baselines

Did it ship?

re-screenshot and squint

verify_fix reloads the deployed URL and returns a PASS/FAIL assertion table

Token cost

full-res image on the wire

full-res on disk, a small WebP thumbnail on the wire, many audits return no image at all

Real logins

automation fingerprint → blocked

real Chrome, navigator.webdriver === false, persistent profile

Credentials

typed into a tool argument

typed by you into a localhost prompt; the AI never sees them

When a human is needed

dead end

await_human_interaction opens a window, you click, the run resumes

Windows in your face

every call

none — a window appears only for a human handoff


The tools

Four breakpoints are shared by every tool that takes one: mobile (393×852), tablet (768×1024), desktop (1440×900), ultrawide (1920×1080). Agents reason about them by name instead of inventing pixel sizes.

Capture capture_page_screenshot (one breakpoint, with token-cost controls) · matrix_responsive_audit (all four in one call) · capture_element (cropped single element) · generate_audit_gallery (HTML contact sheet of a run)

Layout & measurement detect_layout_matrix (zero-image DOM diagnostics across breakpoints, plus annotated renders) · find_breakpoints (where layout actually changes) · measure_element (tokenless inspector: dimensions, spacing, color, contrast) · measure_layout_shift (CLS) · visual_diff_regions (region-level pixel diff) · compare_to_baseline (save and diff visual baselines)

Accessibility scan_accessibility — WCAG foundations: alt text, heading order, accessible names

Design review_design (design-system audit and "smells") · extract_design_tokens ("steal this style" → CSS variables) · extract_site_design (whole-site summary)

Interaction interact_and_audit (click/type/hover/scroll, then screenshot + audit) · run_interaction_sequence (batch steps, one capture at the end) · label_interactives (number every clickable thing on screen and return a legend of exact selectors) · wait_for_response (await a network response) · mock_route (stub responses for deterministic captures)

Authauthenticate_login · submit_2fa_code · enroll_credentials · manage_vault · await_human_interaction

Session & tabsmanage_session (cookies / localStorage / headers / storageState) · manage_tabs

Verifyverify_fix

Opt-inevaluate_script (run JS in the page; exposed only when AGENT_EYES_ALLOW_EVAL=1)

label_interactives paints a numbered badge over every interactive element in the viewport and returns the marked screenshot plus a legend mapping each number to a stable, unique selector and its accessible label. The agent picks the element off the picture by number, then acts on its exact selector — no selector guessing, no brittle nth-child. The overlay is removed after capture.

Both interaction tools also accept pointer gestures in viewport pixel coordinates read straight off a screenshot, so they reach anything visible regardless of DOM: shadow-DOM components, <canvas>/WebGL, maps, charts, drag-and-drop. pointer_click {x, y, button?} · pointer_hover {x, y} · pointer_drag {startX, startY, endX, endY, steps?}. Coordinates are bounds-checked against the current viewport.

run_interaction_sequence supports an evaluate_script step — far cheaper than an image when the agent just needs a count, some text, or a computed style:

run_interaction_sequence { "url": "…", "steps": [
  { "action": "evaluate_script", "script": "return document.title",                        "label": "page-title" },
  { "action": "evaluate_script", "script": "return document.querySelectorAll('a').length", "label": "link-count" }
] }

The script runs as an async function body (use await; you must return a JSON-serializable value) and each result is surfaced under its label. This step is always available — distinct from the standalone opt-in evaluate_script tool, which still requires AGENT_EYES_ALLOW_EVAL=1.


Recipes

verify_fix — did the change actually deploy?

The flow that catches "the tool said fixed, but production still has the bug." It reloads the URL, so it reads the freshly deployed DOM rather than a stale tab, then evaluates small measurable assertions and returns a per-check verdict. A failure marks the whole response as an error, so verify-loops and CI notice.

verify_fix {
  "url": "https://app.example.com",
  "viewport": "mobile",
  "checks": [
    { "selector": "h1.hero",     "assert": "noViewportOverflow" },        // right edge ≤ viewport width
    { "selector": "h1.hero",     "assert": "fontSizeAtMost", "px": 32 },  // the responsive font really shipped
    { "selector": "button.cta",  "assert": "minTapTarget",   "px": 44 },  // ≥ 44×44
    { "selector": ".old-banner", "assert": "notExists" }
  ]
}

Assertions: noViewportOverflow, minTapTarget (px, default 44), fontSizeAtMost / fontSizeAtLeast (px), exists / notExists. Pass saveAs to snapshot the verdict under .agent-eyes/verify/.

Multiple tabs at once

Keep several real tabs open and switch by a label you assign — a preview in one, a staging site in another, neither losing its state.

manage_tabs { "action": "open",   "label": "app",  "url": "https://app.example.com" }
manage_tabs { "action": "open",   "label": "test", "url": "https://staging.example.com" }
manage_tabs { "action": "list" }                     // → both tabs, which is active
manage_tabs { "action": "switch", "label": "app" }   // every other tool now acts on "app"
manage_tabs { "action": "close",  "label": "test" }

Every other tool operates on the active tab. Calls are still serialized; multi-tab just means the other tab's state survives. The cap is tabs.maxOpen (default 8).


Auth & security model

agent-eyes reaches authenticated pages without the AI ever seeing your credentials.

  • AI-blind login. authenticate_login opens a localhost page where you type the username and password into a real masked field. The server fills them into the site and returns only a status (success / otp_required / error / …). The values never enter a tool argument, a tool result, or a log — and auth tools never return a screenshot, since a 2FA page can render the code in plaintext.

  • 2FA. submit_2fa_code works the same way; you type the current code, the AI never learns it.

  • Encrypted vault. enroll_credentials stores a profile's credentials (and optional TOTP seed) in an AES-256-GCM vault with an scrypt KDF, under a master passphrase held only in memory. There is no plaintext-vault mode. vault.json and sessions/ are auto-gitignored; manage_vault handles status, reset, and passphrase changes.

  • SSO. authenticate_login with sso: "google" reuses an existing provider session — log in once, reuse everywhere.

  • Human handoff. When a page needs a real human — Cloudflare Turnstile, a CAPTCHA, an interstitial — await_human_interaction gives you a window (relaunching the invisible Chrome visibly, same profile and logins, tabs reopened on their URLs) and blocks until you click Done or the page reaches an expected URL. agent-eyes never solves the challenge and never bypasses anti-bot protection — it hands off to you, and your own click is what validates. That's the whole reason it runs a real, clean browser.

Full details, including what agent-eyes touches on your machine: SECURITY.md.


Configuration

Setup writes .agent-eyes/settings.json. It holds no secrets, so it's safe to commit and share with your team — it's intentionally not gitignored.

Key

Type

Default

Description

browser.mode

"managed" | "headless" | "headed" | "cdp"

"managed"

How the browser is obtained — see below.

browser.chromePath

string

"auto"

"auto" detects a real Chrome; or give an absolute path.

browser.profileDir

string | null

null

Persistent Chrome profile for managed mode. null~/.agent-eyes/chrome-profile. Logins live here.

browser.cdpUrl

string | null

null

DevTools endpoint for mode: "cdp" (e.g. http://localhost:9222).

browser.keepAlive

boolean

true

Leave the managed Chrome running between sessions for an instant warm reconnect.

browser.headless

boolean

true

Managed mode only: run Chrome with no visible window (--headless=new), keeping the real-Chrome fingerprint and your logged-in profile. A handoff relaunches the same profile with a window and reopens your tabs, so only unsaved in-page state is lost. Set false to see the window from the first capture.

browser.visibility

"on-demand" | "always"

"on-demand"

on-demand: never steal focus — only await_human_interaction puts a window on screen. always: keep a visible window foregrounded (implies headless: false).

browser.extraFlags

string[]

[]

Extra Chrome flags, e.g. ["--no-sandbox"] in containers.

tabs.maxOpen

number

8

Hard cap on concurrent named tabs.

captures.thumbnailMaxWidth

number

1024

Reserved for tuning the on-the-wire thumbnail width.

Every setting has an environment-variable override, and env wins over the file: AGENT_EYES_BROWSER, AGENT_EYES_CHROME_PATH, AGENT_EYES_PROFILE_DIR, AGENT_EYES_CDP_URL, AGENT_EYES_CHROME_KEEPALIVE, AGENT_EYES_HEADLESS, AGENT_EYES_VISIBILITY, AGENT_EYES_CHROME_FLAGS. Point AGENT_EYES_CONFIG at a custom path to override discovery entirely.

Browser modes

  • managed (default) — agent-eyes launches and owns a real Chrome itself, raw-spawned rather than through Playwright's automation launch, so navigator.webdriver === false and Turnstile or Google sign-in treat it as a human browser. No manual commands, logins persist in profileDir, and it runs with no window. The sole exception is await_human_interaction, which relaunches it visibly so you can act; it stays visible for the rest of that session.

  • headless — Playwright's headless Chromium. Fast and windowless, good for CI and pure auditing, but carries automation markers. Needs npx playwright-core install chromium once.

  • headed — a visible Playwright Chromium window. Still fingerprinted as automation; prefer managed for protected sites.

  • cdp — attach to a Chrome you launched with --remote-debugging-port. An escape hatch; managed is the easy path.

agent-eyes always works in its own dedicated tab and never touches your other tabs or steals focus.


Where things are saved

Every screenshot-producing tool writes its full-resolution render to .agent-eyes/captures/run-<n>-<page>/ and reports the path, while only a small WebP thumbnail goes on the wire. An auto-generated .agent-eyes/.gitignore keeps captures/, gallery.html, sessions/, and vault.json out of git — baselines stay committable, so visual checkpoints can be shared with your team, and so does settings.json.

Every response ends with a page-health block (console errors, failed requests, 4xx/5xx, blank-page detection) and a [Metadata: agent-eyes vX.Y.Z] tag. Logs go to stderr only; stdout is reserved for the MCP protocol.


Troubleshooting

Symptom

Fix

Managed browser mode could not find Google Chrome

Install Chrome/Chromium/Edge, or set browser.chromePath to the executable.

Cloudflare Turnstile shows a "widget error"

You're not in managed mode — set browser.mode: "managed" for a real, clean Chrome.

Managed Chrome won't start in a container

Add "--no-sandbox" to browser.extraFlags, if you trust the environment.

Chromium is not installed for Playwright

npx playwright-core install chromium. Only headless/headed need a downloaded browser; managed mode uses your system Chrome.

Nothing is listening at http://localhost:…

Start your dev server first.

The agent says it has no tools

Restart your agent after editing its MCP config.

npm error 404 … mcp-agent-eyes

Your config names a bare package name. agent-eyes is installed from GitHub — the spec must be github:oljodev/mcp-agent-eyes.

Server fails to start the first time, works after

The first npx run builds from source and can outlast your agent's MCP startup timeout. Run the install command once in a terminal, then restart your agent.


Development

git clone https://github.com/oljodev/mcp-agent-eyes.git
cd mcp-agent-eyes
npm install
npm run build      # tsc → dist/
npm test           # config, Chrome detection, login classifier, vault crypto, verify asserts

The unit suite never launches a browser, so it runs anywhere. Point your agent at node /abs/path/to/dist/index.js to drive your working copy. Code layout, conventions, and PR expectations live in CONTRIBUTING.md.

Support

  • Bugs and ideas: open an issue — include your agent, your OS, and the [Metadata: agent-eyes vX.Y.Z] line from a tool response.

  • Security: report privately — see SECURITY.md. agent-eyes handles credentials and runs a real browser, so please don't file those in public issues.

  • What changed: CHANGELOG.md.

License

MIT © Olav Jodal

Available Tools

27 tools
authenticate_loginLog in to a site without seeing the credentialsA

Log the user into a site with THEIR account, without the AI ever seeing the credentials. The human types username and password into a localhost secure page; the server fills them in, submits, and returns ONLY a status: success, otp_required (then call submit_2fa_code), error, push_wait, or unknown. Selectors are auto-detected when omitted, and the ones used are reported so a retry can correct them. NEVER returns a screenshot, since a 2FA or error page can render secrets — capture separately after success, then manage_session action=save. Blocks until the human answers the prompt or 180s elapse. The first sign-in to each new site asks for consent unless assumeConsent is set.

ParametersJSON Schema
NameRequiredDescriptionDefault
ssoNoProvider hint, e.g. "google": click "Continue with Google" and reuse the provider session already in the browser, so no password is typed for this site. Logs into the provider once if needed.
flowNoForm shape. "auto" (default) detects single-step vs identifier-first (email, then password — Google/Microsoft/Okta) and drives both. Override only to correct a misdetection.auto
sourceNo"prompt" (default) asks the human on a localhost page; "vault" pulls them from the encrypted vault for an enrolled profile (unattended). The AI never sees the values either way.prompt
profileYesShort name for the account, e.g. "github". Not a secret — it labels the secure prompt and selects a stored credential.
loginUrlNoNavigate here first. Omit to act on the open page. Not reloaded if a saved session already authenticated you there.
viewportNoSwitch to this breakpoint first. Default: keep the current one.
assumeConsentNoSkip the per-site consent prompt, for unattended runs. Default false: the first sign-in to each new site asks the human to approve it.
submitSelectorNoSelector for the submit button. Auto-detected when omitted.
passwordSelectorNoSelector for the password input. Auto-detected when omitted.
usernameSelectorNoSelector for the username/email input. Auto-detected when omitted; the result reports which one was used.

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations, the description fully carries the behavioral burden and does so thoroughly: it discloses that credentials are never visible to the AI, that selectors auto-detect and report used selectors, that screenshots are never returned, that it blocks up to 180s, and that consent is requested unless assumeConsent is set. No contradictions exist.

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

Conciseness4/5

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

The description is dense but well-organized, with the core purpose front-loaded. It is longer than minimal, but every sentence contributes critical operational or safety information, so the length is justified.

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

Completeness5/5

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

Given 10 parameters, no output schema, and no annotations, the description provides remarkably complete guidance: return statuses, timeout behavior, security constraints, selector reporting, consent flow, and follow-up actions. An agent has enough context to call the tool correctly and interpret its result.

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

Parameters4/5

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

The input schema already covers all 10 parameters at 100% coverage, so the baseline is 3. The description adds meaningful runtime context beyond the schema: auto-detection of selectors, flow auto vs override behavior, source prompt vs vault, the meaning of otp_required, and consent handling.

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

Purpose5/5

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

Clearly states it logs a user into a site with their account while keeping credentials hidden from the AI. It names the specific return statuses and references related actions (submit_2fa_code, manage_session), distinguishing it from sibling tools.

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

Usage Guidelines5/5

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

Explicitly says to call submit_2fa_code on otp_required, to capture a screenshot separately after success, and to use manage_session action=save. It also states when consent is skipped via assumeConsent, giving clear when/when-not guidance.

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

await_human_interactionHand the browser to the human to solve a challenge, then resumeA

Hand the live browser to the human for something the AI cannot or must not automate — a Cloudflare "Verify you are human" check, a CAPTCHA, an interstitial. It never solves the challenge and never bypasses anti-bot protection: it puts a window on screen, shows a localhost prompt with your reason and a Done button, and BLOCKS until the human clicks Done, the page reaches expectUrlContains, the human cancels, or timeoutMs elapses. Returns status (completed | cancelled | timeout) and the current url. The ONLY tool that shows a window: managed mode browses invisibly and is relaunched visibly here, so unsaved in-page state is lost. Headless mode returns a clear error instead of hanging.

ParametersJSON Schema
NameRequiredDescriptionDefault
reasonYesPlain-language instruction shown to the human, e.g. "Solve the Cloudflare check, then click Done."
timeoutMsNoHow long to wait for the human, ms (default 180000, max 600000). On expiry returns status=timeout, never hangs.
screenshotNoInclude a screenshot of the resulting page. Default off.
expectUrlContainsNoAlso auto-complete when the page reaches a URL containing this, so a challenge that redirects on success needs no click.

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations, the description carries full responsibility and meets it: it discloses blocking behavior, return statuses (completed/cancelled/timeout), the visible window, state loss in managed mode, and the headless error path. It leaves no ambiguity about side effects or failure modes.

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

Conciseness5/5

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

Every sentence earns its place: purpose first, then behavior, then edge cases. The description is dense but not padded, and it front-loads the most critical fact (human-in-the-loop). No redundancy with the schema.

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

Completeness5/5

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

The description fully covers the tool's purpose, invocation context, parameter behavior, return values, and failure modes. It even addresses the important 'headless mode returns an error' caveat. For a 4-parameter tool with no output schema, nothing an agent needs to call it correctly is missing.

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

Parameters4/5

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

Schema coverage is 100% and each parameter has a clear description. The tool description adds value by explaining how parameters interact (e.g., expectUrlContains auto-completes on URL match, timeoutMs ensures no hang) and the overall blocking semantics. It does not repeat schema details but enriches the mental model of how the tool works, warranting above-baseline credit.

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

Purpose5/5

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

The description uses a specific verb and resource: 'Hand the live browser to the human for something the AI cannot or must not automate', then names concrete examples (Cloudflare check, CAPTCHA, interstitial). It also distinguishes from siblings by being 'The ONLY tool that shows a window', making its unique role clear.

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

Usage Guidelines5/5

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

It explicitly states when to use (for challenges the AI cannot handle) and what it never does ('never solves the challenge and never bypasses anti-bot protection'). It also gives clear behavioral context: managed mode loses unsaved state, headless mode errors instead of hanging, and it blocks until conditions are met. This provides strong guidance without naming specific siblings, but the 'only tool' statement effectively separates it.

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

capture_elementCapture a single element (cropped screenshot)A

Screenshot ONE element, cropped to its bounding box — far cheaper than a full page when you only need a button, card, or nav. Navigates, applies the optional viewport, scrolls the selector's first match into view, and crops. The full-resolution crop is saved to disk; a webp thumbnail goes on the wire.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesAbsolute URL to open, e.g. http://localhost:5173.
reloadNoReload even if the URL is already open (default reuses it, so it can be stale after an edit).
selectorYesCSS selector for the target; first match wins. Playwright prefixes work too (text="Log in", role=button[name="Submit"]). Use "body" to scroll the page itself.
viewportNoSwitch to this breakpoint first. Default: keep the current one.

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 clearly states the workflow: navigates, applies optional viewport, scrolls the first match into view, and crops. It also discloses the output handling (full-resolution crop saved to disk, webp thumbnail on the wire). It does not mention error conditions or permissions, but for a non-destructive screenshot tool this is a solid disclosure. No contradictions with any structured metadata.

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

Conciseness5/5

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

The description is three sentences with zero fluff. The primary purpose and use case are front-loaded in the first sentence, followed by a concise process summary and output details. Every sentence earns its place, making it efficient and scannable for an agent.

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

Completeness4/5

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

For a tool with 4 parameters (2 required), no output schema, and no annotations, the description covers the core action, the use case, the behavioral steps, and the output format. It lacks explicit error-handling details or authentication prerequisites, but those are not critical for this simple screenshot tool. It is complete enough for an agent to invoke it correctly without further investigation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 every parameter already has a detailed description (e.g., reload behavior, selector semantics, viewport enum). The tool description adds minimal parameter-specific meaning beyond what the schema provides—it mentions scrolling the selector into view, which is also in the schema. Given the schema does the heavy lifting, 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 opens with a specific verb-resource pair: 'Screenshot ONE element, cropped to its bounding box.' It immediately distinguishes itself from capture_page_screenshot by emphasizing the single-element scope and the cropping, and even signals cost efficiency ('far cheaper than a full page'). This makes the tool's purpose unambiguous and differentiates it from siblings without needing to inspect schemas.

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

Usage Guidelines4/5

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

The description explicitly states when to use it: 'when you only need a button, card, or nav' and contrasts it with a full page capture. However, it does not mention when not to use it (e.g., for full-page layout analysis) or name any alternative tools beyond the implicit page screenshot. It gives clear context but stops short of explicit exclusions, so it earns a 4.

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

capture_page_screenshotCapture page screenshotA

Screenshot a URL at one breakpoint. Opens or navigates the persistent session — cookies, logins and page state survive across calls, and re-requesting the already-open URL does not reload it. The full-resolution render is always saved under .agent-eyes/captures/ and its path reported; format, quality, maxWidth and sizeMode control what the wire image costs.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesAbsolute URL to open, e.g. http://localhost:5173.
formatNowebp (default) and jpeg are lossy and cheap; png is lossless and 3-5x more tokens.webp
reloadNoReload even if the URL is already open (default reuses it, so it can be stale after an edit).
qualityNoLossy quality 1-100 (default 75). Lower = fewer tokens. Ignored for png.
fullPageNoCapture the whole scrollable page instead of the visible fold. Clipped at 7900px, and the truncation is reported.
maxWidthNoDownscale the returned image to this width before encoding — the strongest token lever. The copy saved to disk stays full resolution.
sizeModeNoWhat goes over the wire: "full-res" (default), or "thumb" for a 480px webp. Disk always gets the full-resolution image.full-res
viewportYesBreakpoint: mobile 393x852, tablet 768x1024, desktop 1440x900, ultrawide 1920x1080.

TDQS

A4.4/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden and does so thoroughly. It discloses session persistence, the fact that re-requesting an open URL avoids reload, that a full-resolution copy is always saved to disk with its path reported, and which parameters affect wire-image cost. This is rich, non-obvious behavioral context that the schema does not convey.

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

Conciseness5/5

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

Three sentences, each with a distinct job: state the purpose, explain session behavior, and clarify disk vs. wire output. It is dense but not bloated, with the most important scoping information front-loaded.

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

Completeness4/5

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

For an 8-parameter tool with no output schema and no annotations, the description covers the critical operational context: session persistence, reload avoidance, disk-save behavior, and cost levers. It doesn't fully specify the response shape, but it does state that the path is reported and the image is what goes over the wire, which is sufficient to invoke the tool correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds a useful high-level framing—format, quality, maxWidth, and sizeMode together control wire cost—but it does not add per-parameter semantics 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 first sentence states a specific verb (Screenshot), a resource (a URL), and a clear scope (one breakpoint). It implicitly differentiates the tool from siblings like matrix_responsive_audit and find_breakpoints, which target multiple viewports, and from capture_element, which targets an element rather than a page.

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

Usage Guidelines4/5

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

The description provides clear context: it captures a single breakpoint, relies on a persistent session that carries cookies/logins/state, and gives cost-control guidance. It does not explicitly name sibling alternatives or state when not to use this tool, so it stops short of a 5.

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

compare_to_baselineVisual baseline: save or diffA

Visual regression checkpointing. set_baseline renders the URL at the given breakpoint and saves a lossless PNG baseline; diff_against_baseline re-renders and pixel-diffs against it, returning a variance score, dimension drift, and a red-on-grayscale delta overlay that is also saved to disk. fullPage covers the whole scroll height as a separate baseline. Scroll is reset to the top first, so earlier interactions cannot misalign the comparison.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesAbsolute URL to open, e.g. http://localhost:5173.
actionYesset_baseline saves the current render under the name; diff_against_baseline compares against it and returns drift metrics plus a delta overlay.
reloadNoReload even if the URL is already open (default reuses it, so it can be stale after an edit).
fullPageNoCapture the whole scrollable page instead of the visible fold. Clipped at 7900px, and the truncation is reported.
viewportYesBreakpoint: mobile 393x852, tablet 768x1024, desktop 1440x900, ultrawide 1920x1080.
baselineNameYesBaseline name, e.g. 'homepage'. Stored per-viewport under .agent-eyes/baselines/.
maxVariancePctNoCI gate for diff_against_baseline: FAIL when variance exceeds this percentage (0.5 = 0.5% pixel drift). Omit to report without a verdict.

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses that it saves files (baseline PNG and delta overlay), resets scroll to top, clips fullPage at 7900px with truncation reporting, and returns variance score, dimension drift, and delta overlay. It also mentions the reload default causing stale URLs. This is comprehensive, though it does not state permission requirements or reversibility explicitly.

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 four sentences and front-loads the core purpose, then adds details on behavior and edge cases. It is efficient and well-organized, though it could be tightened slightly without losing information.

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

Completeness5/5

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

For a 7-parameter tool with no output schema, the description is remarkably complete. It explains both actions, the return metrics (variance, dimension drift, delta overlay), the fullPage clipping limit, scroll reset, and the reload staleness issue. No critical information an agent needs to call it correctly is missing.

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

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description repeats parameter meanings (e.g., action, fullPage, maxVariancePct) without adding new semantics beyond the schema. It does not compensate for any gaps because there are none; it merely restates what the schema already provides.

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

Purpose5/5

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

The description uses a specific verb-resource structure: 'set_baseline renders... and saves a lossless PNG baseline; diff_against_baseline re-renders and pixel-diffs against it, returning...'. It clearly distinguishes the two actions and differentiates from siblings like capture_page_screenshot or visual_diff_regions by naming the exact operations and outputs.

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

Usage Guidelines3/5

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

The description explains the two actions and their behaviors (e.g., scroll reset, fullPage clipping) but does not explicitly state when to use this tool over alternatives like visual_diff_regions or capture_page_screenshot. No exclusions or conditional routing are provided, so the agent must infer usage from the action enum alone.

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

detect_layout_matrixLayout diagnostics across all breakpoints (text-only)A

Zero-image layout diagnostics across all four breakpoints in one call. An in-page script measures the DOM and flags horizontal overflow, container spill or clipping, silently truncated text, destructive collisions, and sub-44px tap targets on mobile. Findings carry unique, addressable selectors. With annotate (default on), each breakpoint with findings also gets a red-outline render saved to disk and reported by path, costing no image tokens.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesAbsolute URL to open, e.g. http://localhost:5173.
reloadNoReload even if the URL is already open (default reuses it, so it can be stale after an edit).
annotateNoDefault true: viewports with issues also get an annotated screenshot saved to disk. Never returned, so it costs no image tokens.
maxIssuesNoCI gate: mark the response a FAILURE when issues exceed this (0 = must be clean). Omit to report without a verdict.
ignoreSelectorNoSelector(s) to exclude from the audit, string or array. Matches and their descendants are suppressed and counted — silences known noise like a cookie banner.

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the full disclosure burden, and it does well: it reveals that an in-page DOM script runs, that findings have unique selectors, and that annotate (on by default) writes red-outline renders to disk and reports their paths. It also clarifies the image-token cost implication. It does not mention failure modes or verdict behavior, but the schema covers maxIssues.

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

Conciseness5/5

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

Three tightly written sentences lead with the core value proposition and then add detection scope, output properties, and the annotate side effect. There is no filler or redundant restating of schema fields.

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

Completeness4/5

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

The description is complete enough to invoke the tool correctly: it explains what is measured, what issues are flagged, what output shape to expect (selectors and optional saved renders), and the image-token cost. It does not spell out the exact response format, but that is partially covered by the rich parameter schema and the absence of an output schema is compensated by the explicit 'findings' language.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all five parameters. The description adds some contextual value around annotate by explaining the red-outline disk output, but it does not meaningfully enrich url, reload, maxIssues, or ignoreSelector beyond what the schema already provides.

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

Purpose5/5

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

The description opens with a specific verb-resource pair ('layout diagnostics across all four breakpoints') and enumerates concrete defect types: horizontal overflow, spill/clipping, truncated text, collisions, and sub-44px tap targets. It distinguishes itself from screenshot-based siblings by emphasizing 'zero-image' and 'text-only' while promising unique addressable selectors.

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

Usage Guidelines3/5

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

The description clearly implies a use case: run a text-only, multi-breakpoint layout audit in one call. However, it never explicitly states when to prefer this over sibling tools such as matrix_responsive_audit, capture_page_screenshot, or find_breakpoints, nor does it mention when not to use it.

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

enroll_credentialsStore credentials in the encrypted vault (for unattended login)A

Save a profile's credentials to the encrypted vault (.agent-eyes/vault.json, AES-256-GCM) so later logins run with no human present: authenticate_login source=vault and submit_2fa_code source=totp pull from it. The human types every secret — the master passphrase, username, password, and with withTotp the authenticator seed — into the localhost prompt; the AI never sees any value. Optionally stores loginUrl and form selectors too. Returns a non-secret summary.

ParametersJSON Schema
NameRequiredDescriptionDefault
profileYesShort name for the account, e.g. "github". Not a secret — it labels the secure prompt and selects a stored credential.
loginUrlNoNavigate here first. Omit to act on the open page. Not reloaded if a saved session already authenticated you there.
withTotpNoAlso collect the account's TOTP seed, so later 2FA can run unattended with submit_2fa_code source="totp".
otpSelectorNoSelector for the one-time-code input. Auto-detected when omitted; pass it explicitly if the page state came back unknown.
submitSelectorNoSelector for the submit button. Auto-detected when omitted.
passwordSelectorNoSelector for the password input. Auto-detected when omitted.
usernameSelectorNoSelector for the username/email input. Auto-detected when omitted; the result reports which one was used.

TDQS

A4.5/5.0
Behavior4/5

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

Because no annotations are provided, the description carries the full burden and uses it well. It discloses the human-in-the-loop prompt ('The human types every secret ... into the localhost prompt'), the security boundary ('the AI never sees any value'), and the return shape ('non-secret summary'). This goes well beyond a minimal statement, though it doesn't mention failure modes or overwrite behavior.

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

Conciseness4/5

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

The description is three sentences long but front-loads the core action and purpose before adding details about the human prompt and optional storage. Each sentence adds distinct context (what/why, security model, extensibility). It is slightly dense but not wasteful.

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

Completeness4/5

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

Given no output schema and no annotations, the description adequately covers the essential workflow: what the tool does, how secrets are handled, what is returned, and how later tools consume it. It omits edge cases like what happens if the user cancels the prompt or if a credential already exists, but the main call path is clear.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds value by clarifying that the actual secret values (passphrase, username, password, TOTP seed) are not passed as parameters—the agent only supplies the profile name and optional selectors/URL. This prevents the agent from trying to include secrets as arguments, which is meaning not present in the schema.

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

Purpose5/5

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

The description uses the specific verb 'Save' with a clear resource: 'a profile's credentials to the encrypted vault'. It also names the dependent siblings (authenticate_login source=vault and submit_2fa_code source=totp) that consume the stored data, distinguishing this tool as the enrollment step for unattended login.

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

Usage Guidelines5/5

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

It explicitly states when to use this tool (to enable later logins 'with no human present') and ties it to the consumer tools, implying that enrollment should happen before authenticate_login or submit_2fa_code can work. This gives the agent a clear decision rule relative to siblings.

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

extract_design_tokensSteal this style — extract design tokens from any URLB

Turn "make it look like " into a buildable spec: the palette with inferred roles (page background, surfaces, text, accent, accent gradient), the type scale, body size, weights and fonts, the spacing base and scale, radii and shadows — as an inferred-roles summary plus a pasteable CSS :root block. Optionally saved to .agent-eyes/styles/.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesAbsolute URL to open, e.g. http://localhost:5173.
reloadNoReload even if the URL is already open (default reuses it, so it can be stale after an edit).
saveAsNoAlso save the tokens to .agent-eyes/styles/<name>.json.
viewportNoSwitch to this breakpoint first. Default: keep the current one.

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 must convey behavior; it discloses that the tool visits a URL and may persist tokens to .agent-eyes/styles/, which is useful. However, it does not mention network access, auth requirements, or that the default is to reuse an already-open tab (stale risk) — that lives only in the schema. It doesn't contradict anything, but carries only partial behavioral burden.

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 front-loads the purpose and packs the output list into one flowing sentence without redundancy. It's slightly long but every clause adds information; no filler.

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

Completeness3/5

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

The output format is described (summary + CSS :root block) and the optional save location is named, so the agent knows what to expect. Yet with no output schema and no annotations, and a closely related sibling tool, the description would benefit from explicit notes on limitations or prerequisites (e.g., live site needed, fallback behavior).

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

Parameters3/5

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

All four parameters are described in the schema (100% coverage), so the baseline is 3; the description adds value only for saveAs by naming the output path. It doesn't clarify reload or viewport semantics beyond the schema, which is acceptable given full schema coverage.

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

Purpose4/5

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

The description clearly identifies the action (extract design tokens from a URL) and enumerates specific outputs (palette, type scale, spacing, radii, shadows), using concrete language. It doesn't explicitly differentiate from the similarly named sibling extract_site_design, so it falls short of the top score.

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

Usage Guidelines3/5

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

The description implies the primary use case ('make it look like <site>') and mentions optional saving, but never states when to prefer this tool over siblings like extract_site_design or review_design. No exclusions or alternatives are given, so an agent gets context but no routing guidance.

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

extract_site_designSteal this style — crawl a whole site into one design briefA

Crawl a handful of same-origin pages (nav links first) and return ONE consolidated design brief: the system merged across pages — fonts by role, color roles, type ramp, spacing, radii, shadows, ranked by cross-page frequency so the real system wins — plus each page's section anatomy and a pasteable CSS :root + Tailwind theme. Design and structure only, never copy, images, or logos.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesAbsolute URL to open, e.g. http://localhost:5173.
saveAsNoAlso save the tokens to .agent-eyes/styles/<name>.json.
maxPagesNoSame-origin pages to crawl (default 6, max 12). Nav links first, then footer, then the rest.

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses crawling behavior ('nav links first'), the merging and ranking logic, and clarifies it never copies images or logos. It does not mention potential side effects like file saving or timeouts, but the core behavior is well covered.

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

Conciseness4/5

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

The description is dense but well-structured, front-loading the purpose and then detailing the output components. It avoids fluff, though the long list of output elements makes it slightly lengthy; still, every sentence adds value.

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

Completeness4/5

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

For a tool without an output schema, the description explains the output in sufficient detail: fonts, color roles, type ramp, spacing, radii, shadows, section anatomy, and CSS/Tailwind theme. It also explains the merging logic (ranked by cross-page frequency). Missing details like exact return format are acceptable given the described pasteable output.

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

Parameters3/5

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

Schema description coverage is 100%, so all parameters have adequate descriptions. The tool description adds marginal context ('nav links first' aligns with maxPages) but does not substantially elaborate on parameter usage or syntax beyond the schema.

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

Purpose5/5

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

The description states a specific verb ('crawl') and resource ('same-origin pages'), and clearly defines the output as a consolidated design brief with merged tokens, section anatomy, and CSS theme. It distinguishes itself from siblings like extract_design_tokens by focusing on cross-page merging and explicitly excluding images and logos.

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 whole-site design extraction but does not explicitly contrast with alternatives or state when not to use it. It lacks explicit exclusions or conditions that would guide selection among the many sibling tools.

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

find_breakpointsFind responsive breakpoints (width sweep)A

Zero-image responsive stress test: steps the viewport width from minWidth to maxWidth, probing horizontal overflow at each stop, and reports the exact width ranges where the layout breaks — the ones the four named viewports skip over. Restores the prior viewport afterwards.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesAbsolute URL to open, e.g. http://localhost:5173.
stepNoWidth increment between probes (default 50). Smaller is finer but slower; total steps are capped.
reloadNoReload even if the URL is already open (default reuses it, so it can be stale after an edit).
maxWidthNoLargest width to probe, CSS px (default 1920).
minWidthNoSmallest width to probe, CSS px (default 320).

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, and it does well: it discloses that the tool mutates the viewport, probes overflow, and 'restores the prior viewport afterwards.' It also clarifies it is image-free, which avoids expectations of screenshots. It does not mention wait/load behavior or exact reporting format, but core side effects are covered.

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

Conciseness5/5

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

Two sentences, tightly written, with the core behavior front-loaded and no filler. The phrase about the four named viewports earns its place by explaining why this tool exists despite other responsive audits.

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

Completeness4/5

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

For a tool with no output schema, the description sufficiently states what is returned ('exact width ranges where the layout breaks') and covers side effects. It could be more explicit about output format or load-wait behavior, but the definition is complete enough for correct invocation.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents every parameter. The description adds algorithmic context by mapping minWidth/maxWidth and step to the width sweep, but it does not add per-parameter meaning beyond the schema. Baseline 3 is appropriate.

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

Purpose5/5

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

The description names a specific verb and resource: it stress-tests responsive layout by sweeping viewport width and reporting breakpoint ranges. It is clearly distinguished from the sibling viewport audits by its zero-image, incremental width-sweep approach and by contrasting with the 'four named viewports'.

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

Usage Guidelines4/5

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

The description conveys clear context: use this when you need to find width ranges where horizontal overflow occurs, especially ones 'the four named viewports skip over.' It does not explicitly name alternatives or give when-not-to-use rules, so it stops short of a 5.

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

interact_and_auditInteract with the page, then screenshot + auditA

Perform ONE interaction on the currently open page, then return a webp screenshot AND a fresh text layout audit of the resulting state, so breakage from an expanded menu, an active tab, or an opened modal shows up immediately. Gestures, blocking waits, and pointer gestures on viewport pixel coordinates are all available — see action for what each one needs. An ambiguous selector acts on the first match and says so. Pass viewport to switch breakpoints before the selector resolves, ignoreSelector to mute known layout noise. Open a page with capture_page_screenshot first.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoX in viewport pixels, off a screenshot.
yNoY in viewport pixels, off a screenshot.
keyNoKey or chord for "press", e.g. "Enter", "Tab", "Control+a".
endXNoDrag release X, viewport pixels.
endYNoDrag release Y, viewport pixels.
textNoText payload: the value to fill for "type" (the field is cleared first), or the substring to match for "wait_for_text"/"expect_text".
stateNoState for "wait_for" to block on. Default visible.
stepsNoIntermediate mouse-moves for "pointer_drag" (default 10). More steps registers with pickier drag-and-drop libraries.
valueNoOption for "select", matched on <option> value first, then its label.
actionYesWhat to do. Extra args in parens: type(text), select(value), press(key), wait_for(state, default visible), wait_for_text(text), wait_for_url(urlContains), wait_for_response(urlContains — fails the call on status >= 400, or != expectStatus), pointer_click(x,y), pointer_hover(x,y), pointer_drag(startX,startY,endX,endY). Waits block until true or time out. pointer_* take viewport pixel coordinates read off a screenshot, so they hit canvas, shadow DOM, and drag-and-drop targets that have no selector.
buttonNoButton for "pointer_click". Default left.
startXNoDrag press-down X, viewport pixels.
startYNoDrag press-down Y, viewport pixels.
selectorNoCSS (or Playwright text=/role=) selector. Omit for page-level steps such as wait_for_network, wait_for_url, or a page-wide expect_text.
sizeModeNoWhat goes over the wire: "full-res" (default), or "thumb" for a 480px webp. Disk always gets the full-resolution image.full-res
viewportNoSwitch to this breakpoint first. Default: keep the current one.
timeoutMsNoTimeout for a wait_for_*/expect_* step (default 5000ms).
urlContainsNoURL substring to match — the page URL for "wait_for_url", the request URL for "wait_for_response".
expectStatusNoRequire this exact status for "wait_for_response". Omit to accept 2xx/3xx and fail on >= 400.
ignoreSelectorNoSelector(s) to exclude from the audit, string or array. Matches and their descendants are suppressed and counted — silences known noise like a cookie banner.

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 ambiguous selector behavior ('acts on the first match and says so'), mentions blocking waits, and notes the prerequisite page opening. However, it does not disclose side effects of interactions (page state changes), failure behavior, or audit content specifics, leaving notable gaps.

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

Conciseness4/5

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

The description is five sentences, front-loaded with the main purpose, and every sentence adds substantive guidance (prerequisite, selector behavior, parameter hints). It is slightly dense but appropriate for a tool with 20 parameters; no redundant wording beyond acceptable summarization.

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 20 parameters and no output schema, the description is moderately complete. It explains the output generally (screenshot + text audit) and the prerequisite, but does not describe the audit content, error handling, or interaction side effects. An agent would still need schema details and possibly runtime feedback to fully understand expected behavior.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds value beyond the schema by clarifying ordering ('Pass viewport to switch breakpoints before the selector resolves') and giving purpose to ignoreSelector ('mute known layout noise'). These contextual hints help an agent choose and sequence parameters correctly.

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

Purpose5/5

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

The description states a specific verb and resource: 'Perform ONE interaction on the currently open page, then return a webp screenshot AND a fresh text layout audit'. It also differentiates from siblings by emphasizing 'ONE' interaction, distinguishing it from run_interaction_sequence, and includes the audit output which is unique to this tool.

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

Usage Guidelines4/5

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

The description provides clear context: used after opening a page ('Open a page with capture_page_screenshot first') and for single-interaction verification. It implies the alternative (sequence tool) by stressing 'ONE', but does not explicitly name when-not conditions or alternative tool names. This is clear context without exclusions.

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

label_interactivesLabel interactive elements (set-of-mark)A

Set-of-mark prompting: paints a numbered badge over every interactive element in the viewport — links, buttons, inputs, selects, ARIA widgets, anything with a pointer cursor — and returns the marked screenshot plus a legend mapping each number to a stable, unique selector and its accessible label. Pick your target off the picture by number, then act on its exact selector with interact_and_audit. The overlay is removed after capture.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesAbsolute URL to open, e.g. http://localhost:5173.
reloadNoReload even if the URL is already open (default reuses it, so it can be stale after an edit).
viewportNoSwitch to this breakpoint first. Default: keep the current one.

TDQS

A4.3/5.0
Behavior4/5

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

Since no annotations are provided, the description carries the full burden. It describes the overlay behavior, the elements targeted (including pointer cursor), and the output schema (screenshot plus legend). It also notes the overlay is removed after capture. It doesn't mention potential failures like non-interactive pages or permission issues, but gives solid context for a non-destructive tool.

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

Conciseness4/5

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

The description is three sentences, each earning its place: explains the mechanism, provides usage guidance, and notes the cleanup behavior. Slightly long but well-structured, with the core purpose front-loaded. No fluff.

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

Completeness4/5

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

For a tool that takes only a URL and optional parameters, the description covers the input-output contract well: what gets marked, output format, and how to use the results. It doesn't describe error cases or edge cases (e.g., no interactives found), but given the simplicity and clear schema, it's complete enough for correct invocation.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all three parameters. The description doesn't add parameter-specific semantics beyond 'url', but it does implicitly clarify the viewport parameter by mentioning breakpoint switching. Since coverage is high, baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool's function: paints numbered badges on all interactive elements, returns a marked screenshot with a legend. It distinguishes itself from siblings by specifying the set-of-mark technique and the specific output (legend with selectors and labels), which is unique among the listed tools.

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

Usage Guidelines5/5

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

Explicitly provides usage guidance: 'Pick your target off the picture by number, then act on its exact selector with interact_and_audit.' This tells the agent when to use this tool and how to chain it with a sibling. Also notes the overlay is removed after capture, implying it's a one-shot labeling step.

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

manage_sessionManage auth/session state (cookies, storage, headers)A

Reach authenticated pages. set adds cookies, localStorage seeds and extra headers to the persistent session, applied to the live context and replayed onto any future one so they survive a crash. save snapshots cookies + localStorage to .agent-eyes/sessions/.json (gitignored — it holds plaintext tokens); load restores a snapshot by recreating the context, after which you navigate to use it; clear drops everything.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoSnapshot name under .agent-eyes/sessions/. Required for save and load.
actionYesset = add cookies/localStorage/headers; clear = drop all state and rebuild a clean context; save = snapshot cookies + localStorage to disk; load = restore a snapshot, then navigate to use it.
cookiesNoCookies in Playwright addCookies shape; each needs url, or domain+path.
headersNoExtra headers for every request, merged into any already set.
localStorageNolocalStorage to seed per origin, applied on the next navigation.

TDQS

A4.6/5.0
Behavior4/5

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

Even without annotations, the description discloses key behaviors: session persistence across crashes, snapshot creation includes plaintext tokens (sensitivity), load recreates context requiring subsequent navigation, and clear rebuilds a clean context. It does not mention side effects like whether headers persist across navigations or if cookies are domain-restricted, but given the tool's inherent complexity, this is a strong 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 tightly packed into three sentences with no fluff. It front-loads the purpose ('Reach authenticated pages') and then lists each action with its effect, making it easy to scan. Every clause adds operational value, including the warning about plaintext tokens.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 complexity (5 params, nested objects, 4 distinct actions), the description covers the core workflow and key constraints (persistence, navigation requirement, gitignore warning). It lacks explicit detail on error handling or edge cases (e.g., what happens if save targets an existing name), but the schema and description together are sufficient for an agent to invoke the tool correctly in most scenarios.

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

Parameters4/5

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

Schema coverage is 100%, so the schema already documents each parameter. The description adds value by clarifying the role of 'name' (required for save/load) and the meaning of 'action' enum in context, but it doesn't elaborate on all nested properties (e.g., cookie attributes) beyond what the schema says. Still, the description enhances the action semantics beyond a simple enum.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships 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 manages auth/session state (cookies, storage, headers) and enumerates each action (set, save, load, clear) with precise effects on the persistent session. It distinguishes itself from sibling tools like authenticate_login (which likely handles credential-based login) and manage_vault (which likely stores secrets), making its purpose unmistakable.

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

Usage Guidelines5/5

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

The description provides explicit usage guidance for each action: set adds cookies/localStorage/headers, save snapshots to disk, load restores a snapshot and then navigate to use it, clear drops everything. It also includes a critical warning about the snapshot file being gitignored due to plaintext tokens, helping the agent decide when to use this tool (e.g., for reaching authenticated pages) and what precautions to take.

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

manage_tabsOpen and switch between multiple named browser tabsA

Keep several real tabs open at once and switch between them by a label you assign — a preview in one, a staging site in another, neither losing its state. open opens a named tab and makes it active, switch activates an existing one, close closes one (never the last), list returns each tab's label, url, viewport and active flag. Every OTHER tool acts on the ACTIVE tab. The default tab is "main".

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoopen only: navigate the new tab to this URL after opening it.
labelNoShort name you assign, e.g. "staging". Required for open/switch/close; unique when opening. The default tab is "main".
actionYes"open" opens a named tab and makes it active, "switch" activates an existing one, "close" closes one (never the last), "list" returns every tab with its label, url, viewport, and active flag.

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the behavioral transparency burden. It discloses important invariants: open makes the tab active, close never closes the last tab, the default tab is 'main', and other tools act on the active tab. It does not specify edge-case behavior such as closing the currently active tab, but the essentials are covered.

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

Conciseness5/5

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

The description is dense but well-organized: it front-loads the use case, enumerates the actions in a compact list, and then adds the global active-tab rule and default label. Every clause carries operational meaning, with no filler.

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

Completeness4/5

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

Given no output schema and no annotations, the description does a good job: it explains what list returns and covers active-tab semantics, default label, and the never-close-last constraint. It does not state what open/switch/close return on success, but their effects are inferable from the stated behavior.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline of 3 applies. The description mostly restates what the schema already says about the action parameter and label, adding no genuinely new parameter-level meaning beyond the schema's own descriptions.

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

Purpose5/5

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

The description clearly states the tool's function: keeping multiple labeled browser tabs open and switching between them. It enumerates the four operations (open, switch, close, list) and explicitly distinguishes the tool from siblings with 'Every OTHER tool acts on the ACTIVE tab.'

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

Usage Guidelines4/5

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

The description gives a strong usage context: use this when you need multiple concurrent real tabs with preserved state, and it clarifies that other tools operate on the active tab. It does not explicitly name alternatives or state when not to use the tool, but the guidance is clear enough for an agent to choose correctly.

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

manage_vaultManage the encrypted credential vault (status / reset / rekey)A

Keep the credential vault recoverable. status reports whether a vault exists, whether it is unlocked, and its profile names — never secrets. reset permanently DELETES the vault after the human types RESET into the secure prompt, the escape hatch for a forgotten passphrase; re-enroll afterwards. change_passphrase re-encrypts every profile under a new one.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYes"status" lists profile names and lock state (no secrets). "reset" deletes the vault after the human types RESET — the forgotten-passphrase escape hatch. "change_passphrase" re-encrypts every profile.

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly warns that reset permanently DELETES the vault, requires the human to type RESET into a secure prompt, and that status never reveals secrets. The re-encryption behavior of change_passphrase is also stated.

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

Conciseness4/5

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

Three sentences cover all three actions, destructive warnings, and the post-reset step without padding. The opening 'Keep the credential vault recoverable' is slightly general, but the rest is dense and front-loaded with the most important behavioral caveats.

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

Completeness5/5

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

For a single-enum, no-output-schema, no-annotations tool, the description covers each action's effect, the key destructive consequence, the human confirmation requirement, and the recommended next step. An agent has enough information to invoke the tool correctly and safely.

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

Parameters4/5

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

The schema already covers the action enum at 100% with per-value descriptions, so the baseline is 3. The tool description adds meaningful semantics beyond the schema: permanent deletion, the escape-hatch purpose, and the re-enroll follow-up, which help an agent reason about consequences.

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

Purpose5/5

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

The description names three precise verbs (status, reset, change_passphrase) each tied to a concrete outcome: reporting vault state without secrets, permanently deleting the vault, and re-encrypting all profiles. This clearly separates vault maintenance from the sibling enrollment/auth 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 reset action is explicitly scoped as the escape hatch for a forgotten passphrase, with re-enrollment called out as the follow-up. It does not explicitly state when to prefer enroll_credentials over this tool, but the context of vault maintenance vs. enrollment is clear enough.

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

matrix_responsive_auditResponsive audit across all breakpointsA

Capture one URL at all four breakpoints in a single call, webp-compressed to keep a four-image turn affordable (sizeMode "thumb" shrinks it further). All four full-resolution renders are saved to one run directory and their paths reported; the previously active viewport is restored afterwards.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesAbsolute URL to open, e.g. http://localhost:5173.
reloadNoReload even if the URL is already open (default reuses it, so it can be stale after an edit).
fullPageNoCapture the whole scrollable page instead of the visible fold. Clipped at 7900px, and the truncation is reported.
sizeModeNoWhat goes over the wire: "full-res" (default), or "thumb" for a 480px webp. Disk always gets the full-resolution image.full-res

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It discloses that all four full-resolution renders are saved to one run directory, paths are reported, the previously active viewport is restored afterwards, and webp compression is applied. It also notes that sizeMode 'thumb' shrinks the over-the-wire image. This is strong behavioral transparency for a capture tool, though it doesn't detail failure modes or exact path format.

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

Conciseness5/5

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

The description is two sentences, front-loads the core action, and every clause earns its place. It packs compression, sizeMode behavior, disk saving, path reporting, and viewport restoration into a compact, readable form. No filler or redundancy.

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

Completeness4/5

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

For a tool with 4 parameters, 100% schema coverage, and no output schema, the description covers the key behavioral aspects an agent needs: what gets captured, how images are delivered, where they are saved, and side effects on viewport. It doesn't describe the exact output format of the reported paths, but the absence of an output schema makes that a minor gap. Overall, it is complete enough for correct invocation.

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

Parameters4/5

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

Schema description coverage is 100%, so the schema already documents all four parameters. The description adds value by explaining the relationship between sizeMode and the four-image turn affordability, and by clarifying that disk always gets full-resolution even when thumb is sent. This goes beyond the schema's per-parameter descriptions, so a 4 is warranted.

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

Purpose5/5

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

The description states a specific verb ('Capture'), a specific resource ('one URL at all four breakpoints'), and the key outcome ('in a single call'). It also distinguishes itself from sibling tools like capture_page_screenshot and find_breakpoints by emphasizing the multi-breakpoint matrix behavior. The title reinforces the purpose, and the description adds concrete detail about compression and saved renders.

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

Usage Guidelines4/5

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

The description implies when to use this tool: when you need a responsive audit across all breakpoints in one call, and it mentions the sizeMode option to keep the turn affordable. It doesn't explicitly name alternatives or exclusions, but the context signals and sibling list make the use case clear. A 4 is appropriate because it gives clear context without explicit when-not-to-use guidance.

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

measure_elementMeasure an element (tokenless inspector)A

Zero-image element inspector: one element's live rendering spec from getComputedStyle and getBoundingClientRect — dimensions, position, typography, computed padding and margin, and ancestor-composited foreground/background colors with a WCAG AA (4.5:1) / AAA (7:1) contrast verdict including the large-text relaxation. Verifies design-system and a11y specs without image tokens.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesAbsolute URL to open, e.g. http://localhost:5173.
reloadNoReload even if the URL is already open (default reuses it, so it can be stale after an edit).
selectorYesCSS selector for the target; first match wins. Playwright prefixes work too (text="Log in", role=button[name="Submit"]). Use "body" to scroll the page itself.
viewportNoSwitch to this breakpoint first. Default: keep the current one.
requireContrastNoCI gate: FAIL when text/background contrast misses this WCAG level (AA 4.5:1, AAA 7:1, large-text relaxation applies). Unverifiable gradients fail closed.

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure abbrevia. It transparently explains the mechanism (getComputedStyle and getBoundingClientRect), the computed values returned, ancestor-composited color handling, and WCAG contrast thresholds. It stops short of noting side effects like page reload or viewport switching, though those are covered by the schema.

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

Conciseness4/5

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

The description is a dense single sentence that front-loads the core identity and enumerates specifics without filler. It is slightly long and packed, but every phrase contributes functional information.

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

Completeness4/5

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

Given no output schema and no annotations, the description does well to explain what the tool returns and how the contrast verdict is derived. It covers the main dimensions, computed styles, color compositing, and verification purpose, leaving little ambiguity about call intent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 overall output context but does not materially enrich the parameter semantics beyond what the schema already documents; contrast details like large-text relaxation are already present in the schema.

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

Purpose5/5

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

The description states a specific verb-resource pair ('measure an element') and clearly differentiates itself from image-based tools with 'Zero-image element inspector' and 'without image tokens.' It enumerates concrete outputs such as dimensions, computed styles, and contrast verdict, so an agent can immediately identify its purpose.

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

Usage Guidelines3/5

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

The description implies when to use it—verifying design-system and a11y specs—and contrasts with 'image tokens,' but it never names an alternative tool or gives explicit when-not-to-use guidance. The context is clear but exclusion logic is left to inference.

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

measure_layout_shiftMeasure Cumulative Layout Shift (CLS)A

Cold-load CLS diagnostic: arms a layout-shift observer BEFORE the page parses, reloads, watches ~2s, then reports the aggregate score (good ≤ 0.10, poor > 0.25) and the exact elements that jumped, ranked by attributed shift — jank no static screenshot shows. Zero image tokens. Rebuilds a pristine page, discarding any in-page state.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesAbsolute URL to open, e.g. http://localhost:5173.
maxClsNoCI gate: FAIL when CLS exceeds this (0.1 is the Core Web Vitals bar). Omit to report without a verdict.
viewportNoSwitch to this breakpoint first. Default: keep the current one.

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden and does so thoroughly. It discloses the observer timing (before page parses), the reload behavior, the ~2s watch window, the output (aggregate score and ranked elements), the cost profile (zero image tokens), and the side effect of discarding in-page state. This is comprehensive and transparent.

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

Conciseness5/5

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

The description is a single dense paragraph with no wasted words. It front-loads the core purpose, then details mechanism, output, differentiator, and side effects in logical order. Every clause earns its place, balancing completeness with brevity.

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

Completeness5/5

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

Given the tool's moderate complexity, no output schema, and no annotations, the description is unusually complete. It explains the return format (aggregate score and element list), the thresholds for interpretation, the measurement method, and the side effects. An agent has enough to call it correctly and interpret results without further assumptions.

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

Parameters4/5

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

Schema coverage is 100%, so the schema already documents all parameters. The description adds value by providing CLS thresholds (good ≤0.10, poor >0.25) that directly inform the maxCls parameter and by explaining the measurement window (~2s) relevant to interpreting results. This goes beyond the schema's basic 'CI gate' wording.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships 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 ('arms', 'reloads', 'watches', 'reports') tied to a clear resource (layout shift) and scope (cold-load CLS diagnostic). It distinguishes itself from screenshot tools by noting 'jank no static screenshot shows', making its unique purpose evident.

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

Usage Guidelines3/5

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

The description implies usage for diagnosing layout shift on cold load and contrasts with static screenshots, but it does not explicitly name alternatives or state when not to use it. There is no clear routing to sibling tools like measure_element or matrix_responsive_audit. The guidance is implied rather than explicit.

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

mock_routeStub network routes for deterministic capturesA

Stub matching requests with canned responses, so flaky or third-party endpoints cannot change what you capture. add registers a URL glob → {status, contentType, body, headers}; clear removes stubs by pattern or all; list shows the active ones. Stubs are context-level: they survive navigations and a crash until cleared. Only sub-resources can be mocked, never the top-level navigation.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoResponse body for the stub (e.g. a JSON string). Omit for empty.
actionYesadd = stub a URL pattern with a canned response; clear = remove stubs (by pattern, or all when pattern omitted); list = show active stubs.
statusNoHTTP status for the stubbed response (default 200).
headersNoExtra response headers for the stub.
patternNoURL glob to intercept (e.g. **/api/**). Required for add, an optional filter for clear. Only sub-resources can be mocked — the top-level navigation still hits the real server.
contentTypeNoContent-Type for the stubbed response (default application/json).application/json

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations, the description carries full disclosure burden and meets it: stubs are context-level, survive navigations and crashes until cleared, and only apply to sub-resources. It also clarifies action semantics (add/clear/list) and persistence, which are not visible in the schema.

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

Conciseness5/5

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

Four sentences, each earning its place: purpose, action breakdown, persistence model, and scope limitation. It is front-loaded with the most important information and contains no filler or schema repetition.

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

Completeness5/5

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

For a six-parameter, multi-action tool, the description covers action behavior, request scoping, persistence, and the top-level navigation restriction. Since every parameter is already documented in the schema, an agent has everything needed to invoke the tool correctly.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is met. The description adds value by mapping add to a URL glob → {status, contentType, body, headers} shape and explaining how clear/list use pattern, going slightly beyond individual parameter descriptions.

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

Purpose5/5

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

The description opens with a specific verb and object ('Stub matching requests with canned responses') and immediately states the operational purpose: deterministic captures despite flaky or third-party endpoints. It enumerates the three actions (add/clear/list), making the tool's scope unmistakable and distinct from the capture/audit/screenshot 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 a clear trigger condition—use stubs when flaky or third-party endpoints could change captures—and an explicit when-not: top-level navigation can never be mocked. It does not name an alternative sibling tool, but none of the listed siblings offers mocking, so the context is sufficient without maximal 'vs alternatives' guidance.

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

review_designDesign review — measure the design system + flag smellsA

Zero-image DESIGN audit — the taste counterpart to scan_accessibility. Measures the page's actual design system (palette, type scale, weights and families, spacing rhythm, radii, shadows) and flags design smells: too many font sizes or colors, off-grid spacing, cramped or over-long or sub-16px body text, inconsistent radii, near-miss alignment — each with an addressable selector.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesAbsolute URL to open, e.g. http://localhost:5173.
reloadNoReload even if the URL is already open (default reuses it, so it can be stale after an edit).
viewportNoSwitch to this breakpoint first. Default: keep the current one.
maxSmellsNoCI gate: mark the response a FAILURE when design smells exceed this (0 = spotless). Omit to report without a verdict.

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It discloses that this is a zero-image audit (no screenshots), that it measures the design system, and that it flags smells with selectors. However, it doesn't disclose whether the tool mutates state, whether it requires authentication, whether it navigates or reuses the current page, or what the response format looks like. The 'zero-image' note is useful but the behavioral profile is incomplete.

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

Conciseness5/5

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

The description is a single dense paragraph that front-loads the core purpose ('Zero-image DESIGN audit'), then lists measured elements and flagged smells efficiently. Every clause adds information; no filler or repetition.

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

Completeness4/5

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

For a read-only audit tool with 100% schema coverage and no output schema, the description covers what it measures, what it flags, and how it differs from a sibling. It doesn't describe the response format or verdict behavior, but the schema's maxSmells parameter hints at the CI-gate behavior. The main gap is lack of behavioral context (auth, page reuse), but the core selection and invocation information is present.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all four parameters. The description adds context about what the tool measures but doesn't add meaning to the parameters themselves beyond what the schema provides. Baseline 3 is appropriate.

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

Purpose5/5

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

The description states a specific verb ('measures'), a clear resource (the page's actual design system), and enumerates exactly what is measured (palette, type scale, spacing rhythm, radii, shadows) and what it flags (design smells with addressable selectors). It also explicitly distinguishes itself from scan_accessibility as the 'taste counterpart,' which differentiates it from a key sibling.

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

Usage Guidelines4/5

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

The description implies when to use it: when you need a design-system audit rather than an accessibility audit, and it names the alternative (scan_accessibility). It doesn't explicitly state when not to use it or list other alternatives, but the 'taste counterpart' framing gives clear context for selection.

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

run_interaction_sequenceRun a multi-step interaction sequenceA

Batch pipeline for multi-step flows such as forms and nested menus: navigates, optionally matches a viewport, then runs the steps in one fast loop and returns ONE screenshot plus ONE layout audit after the final step — far cheaper than chaining interact_and_audit. Steps mix gestures, waits, expect_* assertions and evaluate_script, so a single call can drive AND verify a flow. A failing gesture or wait aborts at its index with earlier steps applied; failed expect_* checks let the flow finish but mark the whole response a FAILURE.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesAbsolute URL to open, e.g. http://localhost:5173.
stepsYesOrdered steps run back-to-back (max 25), with a reflow pause between each. ONE screenshot + audit is returned after the last step, so a flow costs far less than one interact_and_audit per step. A failing gesture or wait aborts at its index, earlier steps stay applied; failed expect_* checks come back as a verdict.
reloadNoReload even if the URL is already open (default reuses it, so it can be stale after an edit).
sizeModeNoWhat goes over the wire: "full-res" (default), or "thumb" for a 480px webp. Disk always gets the full-resolution image.full-res
viewportNoSwitch to this breakpoint first. Default: keep the current one.
ignoreSelectorNoSelector(s) to exclude from the audit, string or array. Matches and their descendants are suppressed and counted — silences known noise like a cookie banner.

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses key behaviors: returns ONE screenshot plus ONE layout audit after the final step, failure semantics (gesture/wait aborts at index, expect_* fails but flow finishes and marks whole response a FAILURE), and performance note ('far cheaper'). It also clarifies evaluate_script reads page state without a screenshot. It omits some details like reflow pauses and permission requirements, but covers the most critical behaviors.

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

Conciseness5/5

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

The description is dense but every sentence contributes: purpose and cost in the first clause, capability overview in the second, and failure semantics in the third. It's front-loaded with the most important distinction (cheaper than chaining) and uses concise, scannable language. No filler or redundancy.

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

Completeness4/5

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

For a complex tool with nested steps, no output schema, and no annotations, the description covers the essential contexts: what it returns, failure modes, performance trade-off, and the range of actions. It doesn't detail the layout audit structure or explicitly mention the reflow pause (that's in schema), but the core agent-facing information is present. Slightly more detail on expected output shape would elevate it, but it's sufficient.

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

Parameters4/5

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

Schema coverage is 100%, so parameters are well-documented. The description adds meaning by explaining the overall flow: steps run back-to-back with a reflow pause, failure modes per step type, and the aggregate output. It also clarifies the action enum's relationship to interact_and_audit and the pointer_* actions' purpose for canvas/shadow DOM. This goes beyond the schema's individual parameter descriptions.

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

Purpose5/5

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

The description clearly states the tool is a batch pipeline for multi-step flows like forms and nested menus, with specific verbs (navigates, matches viewport, runs steps) and a distinct resource (multi-step interaction sequence). It explicitly differentiates from chaining interact_and_audit by highlighting cost efficiency, so an agent can immediately understand its role.

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

Usage Guidelines4/5

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

It names the alternative (interact_and_audit) and explicitly says it's 'far cheaper than chaining' that tool, giving clear context for when this tool is preferable. It also describes capabilities (mixing gestures, waits, expect_* and evaluate_script) but doesn't explicitly state when NOT to use it (e.g., for a single-step action), so it falls just 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.

scan_accessibilityAccessibility scan (text-only)A

Zero-image WCAG foundation audit of the live DOM. Flags missing alt (or empty alt not declared decorative), heading hierarchy breaks (h2 → h4, or a document whose first heading starts deeper than h2), and inputs, selects, textareas and buttons with no computable accessible name — placeholders do not count. Grouped text report with unique, addressable selectors.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesAbsolute URL to open, e.g. http://localhost:5173.
reloadNoReload even if the URL is already open (default reuses it, so it can be stale after an edit).
viewportNoSwitch to this breakpoint first. Default: keep the current one.
maxIssuesNoCI gate: mark the response a FAILURE when issues exceed this (0 = must be clean). Omit to report without a verdict.

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 clearly discloses what is audited, what does not count, and the output form ('grouped text report with unique, addressable selectors'). It does not explicitly state read-only behavior or authentication needs, but 'audit' and 'scan' imply non-mutating behavior.

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

Conciseness5/5

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

Three sentences with no wasted words. The first sentence establishes the tool identity, the second enumerates concrete checks, and the third describes the output. Information is front-loaded and each sentence earns its place.

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

Completeness4/5

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

Combined with the 100%-covered schema and the description's explicit output format, an agent has enough to invoke the tool correctly. It does not cover prerequisites like authentication or page-load state, but the schema's reload and viewport parameters cover the main operational concerns.

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

Parameters3/5

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

Schema description coverage is 100%, so all four parameters are already fully documented. The description adds context about audit targets but no additional parameter-level meaning, which keeps this at the baseline.

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

Purpose5/5

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

States a specific action ('audit'), a specific target ('live DOM'), and a distinguishing scope ('Zero-image', 'WCAG foundation'). Enumerates exact checks so an agent can tell it apart from visual review or screenshot tools without opening the schema.

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

Usage Guidelines4/5

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

No explicit 'use this instead of X' guidance, but 'Zero-image' and 'WCAG foundation' make the intended context clear versus visual/design siblings. The CI-gate behavior described in the maxIssues parameter adds practical context for when to use it in a verification pipeline.

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

submit_2fa_codeEnter a 2FA code without seeing itA

Complete a two-factor challenge raised by authenticate_login, without the AI ever seeing the code. The human types the current one-time code into a localhost secure page; the server fills the auto-detected code field, submits, and returns ONLY a status: success (then manage_session action=save), error, or unknown. Acts on the page authenticate_login left behind and never navigates. Blocks until answered or 180s elapse.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceNo"prompt" (default) asks the human; "totp" generates it from the seed in the vault (unattended). The AI never sees the code.prompt
profileNoShort name for the account, e.g. "github". Not a secret — it labels the secure prompt and selects a stored credential.
codeSelectorNoSelector for the one-time-code input. Auto-detected when omitted; pass it explicitly if the page state came back unknown.
submitSelectorNoSelector for the submit button. Auto-detected when omitted.

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden, and it is exceptionally transparent. It discloses that the AI never sees the code, the human enters it on a localhost page, the server fills the field, the tool never navigates, and it blocks until answered or 180s elapse. It also clarifies the only return values: success, error, or unknown.

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

Conciseness5/5

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

The description is compact and front-loaded: the core purpose and safety guarantee come first, followed by the mechanism, return contract, and timing constraint. Every sentence adds necessary information without redundancy or filler.

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

Completeness5/5

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

Even though there is no output schema, the description explicitly defines the return statuses and the follow-up action ('success (then manage_session action=save)'). It also covers the precondition, timeout, no-navigation guarantee, and selector auto-detection, providing everything an agent needs to invoke the tool correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3 and the schema already documents source, profile, codeSelector, and submitSelector. The description adds only a small amount of parameter-related context, such as auto-detection of selectors and that codeSelector can be passed when page state is unknown, but it does not materially exceed the schema.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Complete a two-factor challenge raised by authenticate_login, without the AI ever seeing the code.' It clearly distinguishes itself from the sibling auth flow by emphasizing the human-entered code is never exposed to the AI, and it adds concrete scope ('Acts on the page authenticate_login left behind and never navigates').

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

Usage Guidelines4/5

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

The description clearly situates this tool in the auth sequence: it completes a challenge raised by authenticate_login and acts on the page that tool left behind. It also states the blocking behavior and 180-second timeout. It does not explicitly name alternatives or exclusion cases, but the sequential context makes usage unambiguous.

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

verify_fixVerify a change actually landed on the live pageA

Confirm a fix REACHED the deployed site rather than a stale local tab. Reloads the URL by default, evaluates small measurable assertions per element, and returns a per-check PASS/FAIL table of measured vs expected plus an overall verdict — a failed verdict marks the response an error, so verify-loops and CI catch it. This is what catches "the tool said fixed but production still has the bug".

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesAbsolute URL to open, e.g. http://localhost:5173.
checksYesAssertions to evaluate against the live page. Each reports measured vs expected, plus an overall PASS/FAIL verdict.
reloadNoReload even if the URL is already open (default reuses it, so it can be stale after an edit).
saveAsNoName to snapshot the verdict under .agent-eyes/verify/.
viewportNoSwitch to this breakpoint first. Default: keep the current one.

TDQS

A3.8/5.0
Behavior2/5

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

Without annotations, the description must carry transparency, and it does disclose useful error semantics (failed verdict marks response an error) and per-check evaluation. However, it states 'Reloads the URL by default' while the schema sets reload default false and says the default reuses the URL; this contradictory behavioral claim can mislead agents into relying on an automatic fresh reload.

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

Conciseness5/5

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

Three sentences are front-loaded with the core purpose, then mechanism/outcome, then motivating use case. No filler; every sentence earns its place.

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

Completeness4/5

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

It covers what the tool does, how it evaluates, and what it returns/error behavior, while the schema fully documents the parameters. The false reload-default statement and absence of any sibling-routing guidance prevent a perfect score, but overall an agent can invoke it correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all five parameters. The description adds general assertion semantics (measured vs expected) but no parameter-level detail beyond that, matching the baseline.

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

Purpose5/5

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

The description names a specific observable objective—confirm a fix reached the deployed site rather than a stale local tab—and covers mechanism and output. It clearly separates this verification tool from similar capture/measure 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 a clear use case: checking that a fix actually landed and catching stale-local-tab false positives. It does not explicitly name alternatives or when not to use it, so it stops short of a 5.

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

visual_diff_regionsSemantic visual diff (element-resolved regression)A

Visual regression that points at code, not pixels: diffs the current render against a saved baseline, clusters the changed pixels into regions, and hit-tests each against the live DOM — so you get "button.cta-primary — 1,240 changed px" instead of "3.2% of pixels changed". A delta overlay is saved to disk. Requires a baseline from compare_to_baseline with matching fullPage.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagYesBaseline to diff against — the name used with set_baseline.
urlYesAbsolute URL to open, e.g. http://localhost:5173.
reloadNoReload even if the URL is already open (default reuses it, so it can be stale after an edit).
fullPageNoCapture the whole scrollable page instead of the visible fold. Clipped at 7900px, and the truncation is reported.
viewportNoSwitch to this breakpoint first. Default: keep the current one.
maxVariancePctNoCI gate for diff_against_baseline: FAIL when variance exceeds this percentage (0.5 = 0.5% pixel drift). Omit to report without a verdict.

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 full behavioral burden. It discloses that it saves a delta overlay to disk, requires a matching fullPage baseline, and can act as a CI gate via maxVariancePct. It does not cover failure modes or error handling, but it covers the main side effects and constraints adequately.

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

Conciseness5/5

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

Two sentences with no wasted words. The first sentence front-loads the core purpose and mechanism, while the second adds a critical prerequisite and parameter nuance. 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 complex tool with 6 parameters, the description covers the essential usage context: baseline requirement, fullPage matching, CI gate behavior, and the delta overlay side effect. It does not mention output format or failure scenarios, but given the absence of an output schema and the tool's apparent role in a regression workflow, the coverage is strong.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline for this dimension is 3. The description adds value by explaining the purpose of maxVariancePct as a CI gate, noting that fullPage clipping is reported, and clarifying reload's default behavior. These extra details go beyond the schema descriptions.

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

Purpose5/5

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

The description states a specific verb (diffs), a precise resource (current render against a saved baseline), and the unique value proposition (element-resolved regression vs. pixel-level). It clearly distinguishes itself from siblings like compare_to_baseline by highlighting the element-resolution mechanism and output format.

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

Usage Guidelines4/5

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

The description explicitly requires a baseline from compare_to_baseline with matching fullPage, giving a clear prerequisite and pointing to a sibling tool. It implies when to use this tool (when element-level diff is needed) but does not explicitly state when not to use it or list alternative tools beyond the prerequisite.

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

wait_for_responseWait for a network response (optionally around a trigger)A

Wait for a network response whose URL matches a pattern, and report its status, method, content-type and size, plus an optional body snippet. An optional trigger interaction fires AFTER the waiter is armed, so a fast response cannot be missed (click Save, await POST /api/save). On timeout it lists the responses it did see, to help fix the pattern. Acts on the open page.

ParametersJSON Schema
NameRequiredDescriptionDefault
triggerNoInteraction to run after the waiter is armed (avoiding a race), e.g. click Save. Same fields as interact_and_audit.
timeoutMsNo
urlPatternYesSubstring or * glob matched against response URLs (e.g. **/api/users). First match wins.
includeBodyNoInclude a capped snippet of the response body (text types only). Default false.

TDQS

A4.2/5.0
Behavior4/5

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

No annotations are present, so the description carries the burden. It discloses the race-avoidance timing, the response fields reported, the optional body snippet, and the timeout behavior of listing observed responses. It does not specify return structure or side effects, but for a waiter tool this is substantial.

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

Conciseness5/5

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

Four sentences, front-loaded with the core behavior, each adding distinct value: match/report, trigger timing, timeout diagnostics, and page scope. No fluff.

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

Completeness4/5

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

The tool has no annotations and no output schema, but the description covers what it waits for, what it reports, the trigger race, and timeout diagnostics. The nested trigger schema covers parameter detail. Minor gap: no explicit success/failure return semantics, but enough to invoke correctly.

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

Parameters3/5

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

Schema description coverage is 75%, already high. The description adds no detail beyond 'URL matches a pattern' and 'optional body snippet', with the trigger timing also restated in the schema's trigger description. Baseline 3 applies.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Wait for a network response whose URL matches a pattern,' and enumerates the reported fields (status, method, content-type, size, body snippet). This clearly distinguishes it from interaction, screenshot, and mocking siblings.

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

Usage Guidelines4/5

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

It explicitly states the trigger fires after the waiter is armed to avoid missing fast responses, giving a concrete usage scenario ('click Save, await POST /api/save'). It does not name exclusions or alternatives, but the context is clear enough for when to use.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 27 tool updatesv0.29.0
    • First observedauthenticate_login
    • First observedawait_human_interaction
    • First observedcapture_element
    • First observedcapture_page_screenshot
    • First observedcompare_to_baseline
    • First observeddetect_layout_matrix
    • First observedenroll_credentials
    • First observedextract_design_tokens
    • First observedextract_site_design
    • First observedfind_breakpoints
    • First observedgenerate_audit_gallery
    • First observedinteract_and_audit
    • First observedlabel_interactives
    • First observedmanage_session
    • First observedmanage_tabs
    • First observedmanage_vault
    • First observedmatrix_responsive_audit
    • First observedmeasure_element
    • First observedmeasure_layout_shift
    • First observedmock_route
    • First observedreview_design
    • First observedrun_interaction_sequence
    • First observedscan_accessibility
    • First observedsubmit_2fa_code
    • First observedverify_fix
    • First observedvisual_diff_regions
    • First observedwait_for_response

TDQS

A3.8/5.0

Scored across 27 tools

Disambiguation3/5

Many tools overlap in purpose (capture_page_screenshot vs matrix_responsive_audit vs capture_element, compare_to_baseline vs visual_diff_regions, scan_accessibility vs review_design). Detailed descriptions help differentiate them, but an agent could still hesitate between similar-sounding audit and capture tools.

Naming Consistency5/5

Tool names consistently follow a clear verb_noun snake_case pattern (authenticate_login, capture_element, manage_session, scan_accessibility). Even multi-word names like compare_to_baseline and run_interaction_sequence maintain the same grammatical style and predictable structure.

Tool Count2/5

27 tools is a large surface for a single server, exceeding the 25+ threshold. While many serve distinct QA purposes, the set feels heavy compared to typical well-scoped servers, and several tools could be consolidated (e.g., baseline/diff tools, multiple audit tools).

Completeness4/5

The tool surface covers the full browser QA lifecycle: authentication, session persistence, screenshots, interaction, responsive layout, accessibility, design extraction, visual regression, network mocking, and verification. Minor gaps exist (e.g., no explicit DOM text extraction or page source tool), but agents can work around them with existing gestures and evaluate_script steps.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI assistants to control and inspect a live Chrome browser for automated web debugging, performance analysis, and Lighthouse audits. It allows agents to capture screenshots, monitor network requests, and measure Core Web Vitals using plain-English prompts.
    1,516,489 npm
    Apache 2.0
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to automate and debug real Chromium browsers with capabilities like screenshots, video recording, performance analysis, visual regression testing, and OCR text extraction.
    13
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to see, analyze, and visually verify web page changes through pixel-perfect diffing, theme extraction, layout analysis, and interactive element detection.
    19 npm
    MIT