mcp-server-webdriver
This server lets AI agents control a real Firefox browser via Selenium WebDriver for automated web interaction, debugging, and inspection.
Browser & Session Management
Open/close Firefox sessions with configurable viewport, user agent, and headless mode
Check session status, resize viewport mid-session, and persist logins via Firefox profiles
Navigation
Navigate to URLs, go back/forward in history, and reload pages
Page Inspection & Content Extraction
Capture full-page or element-specific screenshots
Get page title, URL, raw HTML source, visible text, attribute values, and list elements matching CSS selectors (with text, href, visibility, ARIA info, etc.)
User Interaction
Click elements, type into inputs, select dropdown options, upload files, hover over elements, press keyboard keys, scroll, and switch into/out of iframes
Execute arbitrary JavaScript and return results as JSON
Wait for elements to become visible, clickable, present, or contain specific text
Dialogs, Cookies & Storage
Accept or dismiss JS alerts, confirms, and prompts
Read and inject cookies (e.g., auth tokens without a login flow)
Read, write, and clear localStorage and sessionStorage
DevTools Diagnostics (requires Firefox + geckodriver ≥ 0.34 via WebDriver BiDi)
Get a full diagnostic report: JS exceptions, console output, failed network requests, and slow requests in one call
Inspect computed CSS properties, CSS custom properties, and detailed element info (bounding box, visibility, ARIA, outerHTML)
View all network requests with timing, status, and resource type filtering
Get page performance metrics (TTFB, DOMContentLoaded, load time, DNS/TCP/TLS breakdown)
Clear buffered DevTools data and re-attach BiDi listeners after page crashes
Mobile Emulation
Set viewport dimensions and override User-Agent to test responsive/mobile layouts
Provides integration with the Firefox browser using geckodriver, allowing AI agents to perform browser automation tasks like opening URLs, taking screenshots, and executing JavaScript.
Allows AI agents to control a web browser via Selenium WebDriver, enabling automated browser interactions such as navigation, clicking, filling forms, and extracting page information.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-server-webdrivergo to example.com and take a screenshot"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-server-webdriver
MCP Server that lets AI agents control a real web browser via Selenium WebDriver (Firefox + geckodriver).
Built with FastMCP.
What it does
The server eliminates the copy-paste loop between the browser and the AI assistant. Instead of opening DevTools, copying errors, pasting them into a chat, and repeating, the assistant opens the browser itself, navigates, captures errors and screenshots, and diagnoses the problem directly.
You: "Why is the checkout button broken on /cart?"
AI: browser_open → browser_navigate("/cart")
→ devtools_report # JS errors? network failures?
→ browser_screenshot # what does it look like?
→ devtools_computed_css("button#checkout") # hidden? wrong z-index?
→ "The button has pointer-events: none — overridden by .disabled class
applied when cart.js fails to load (404 on /static/cart.js)."Related MCP server: Selenium MCP Server
Requirements
Dependency | Version |
Python | ≥ 3.11 |
≥ 2.10 | |
≥ 4.0 | |
Firefox | any recent |
≥ 0.34 |
Installation
Recommended — Debian package from VitexSoftware repository
sudo curl -fsSL http://repo.vitexsoftware.com/KEY.gpg -o /usr/share/keyrings/vitexsoftware-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/vitexsoftware-archive-keyring.gpg] http://repo.vitexsoftware.com trixie main backports" \
| sudo tee /etc/apt/sources.list.d/vitexsoftware.list
sudo apt update
sudo apt install mcp-server-webdriverThe backports component is required, not optional: python3-mcp (a
python3-fastmcp dependency) needs python3-jsonschema >= 4.20.0, which is
newer than the version Debian trixie ships in main — it's only available
in backports. Without it, apt install fails with an unmet-dependency
error on python3-jsonschema.
This installs gecko-driver, python3-selenium, python3-fastmcp, and
mcp-server-webdriver in a single step.
Alternative — system package manager
# Debian/Ubuntu (official repos — may be older geckodriver):
sudo apt install firefox-geckodriver
# macOS:
brew install geckodriver
# Rust / cargo (build from source):
cargo install geckodriverThen install Python dependencies:
pip install fastmcp seleniumFallback — webdriver-manager (auto-download)
pip install fastmcp selenium webdriver-manager
# geckodriver is downloaded automatically on first browser_open callUsage
mcp-server-webdriver [OPTIONS]
OPTIONS
-P <profile> Start Firefox with a named profile
--profile <path> Start Firefox with a profile directory at <path>
-h, --help Show help and exitThe server speaks MCP over stdin/stdout and is launched automatically by the MCP client — not by hand.
Use cases
Debug a broken page
Ask: "Why does /dashboard show a blank screen?"
The assistant will:
browser_open— open Firefox headlesslybrowser_navigate— go to/dashboarddevtools_report— get JS errors, console output, and failed network resources in one callbrowser_screenshot— see what the page actually looks likeExplain the root cause from the combined evidence
devtools_report is the primary diagnostic tool — equivalent to opening the Console
and Network tabs in DevTools and reading them simultaneously.
Diagnose a CSS / layout problem
Ask: "The sidebar overlaps the content area on mobile. Why?"
browser_open— open the pagebrowser_screenshot— capture the broken layoutdevtools_computed_css(".sidebar")— checkposition,width,z-index,overflowdevtools_css_variables("--")— verify design tokens loaded correctlydevtools_network_failed— check whether any stylesheet failed to load
Automate a login flow
Ask: "Log into the app at /login with user=admin, password=secret and screenshot the dashboard."
browser_open— start the browserbrowser_navigate— go to/loginbrowser_fill("#username", "admin")— type usernamebrowser_fill("#password", "secret")— type passwordbrowser_press_key("enter")— submit the formbrowser_wait("#dashboard", condition="visible")— wait for redirectbrowser_screenshot— capture the result
Inject a session cookie to skip login
Ask: "Check the admin panel using my existing session token."
browser_open— start the browserbrowser_navigate— go to the app's root so the cookie domain matchesbrowser_set_cookie("session", "<token>")— inject the auth cookiebrowser_navigate— now navigate to the protected pagebrowser_screenshot— confirm access
Enumerate page content
Ask: "List all the navigation links on the homepage."
browser_open+browser_navigate— open the pagebrowser_find_elements("nav a")— get all links with their text, href, and visibilityReturn the structured list
Interact with hover menus
Ask: "Click the third item in the Products dropdown."
browser_hover(".nav-products")— trigger the:hoverstate that reveals the dropdownbrowser_wait(".dropdown-menu", condition="visible")— wait for animationbrowser_find_elements(".dropdown-menu a")— list the itemsbrowser_click(".dropdown-menu a:nth-child(3)")— click the right one
Test a multi-step form
Ask: "Fill out the registration form and submit it."
browser_fill("#first-name", "Alice")browser_fill("#last-name", "Smith")browser_fill("#email", "alice@example.com")browser_select("#country", "Czech Republic")browser_press_key("tab")— move focus to next fieldbrowser_click("button[type=submit"]")browser_wait(".success-message", condition="visible")devtools_report— check for any JS errors or failed API calls during submission
Handle JS dialogs
Ask: "Click the Delete button and confirm the dialog."
browser_click("#delete-btn")browser_accept_dialog— click OK on theconfirm("Are you sure?")browser_wait(".deleted-notice", condition="present")
Scroll and capture a long page
Ask: "Screenshot the footer of the page."
browser_open+browser_navigatebrowser_scroll("footer")— scroll the footer element into viewbrowser_screenshot("footer")— capture just the footer element
Or scroll by offset to trigger lazy-loaded content:
browser_scroll(by=True, y=1000)— scroll down 1000 pxbrowser_wait(".lazy-section", condition="visible")— wait for lazy contentbrowser_screenshot— capture the now-loaded content
Use a real Firefox profile (stay logged in)
Configure the server with a named profile that already has your session:
{
"mcpServers": {
"webdriver": {
"command": "mcp-server-webdriver",
"args": ["-P", "work"]
}
}
}The browser starts with your existing cookies, saved passwords, and extensions. Ask: "Check my GitHub notifications." — no login step needed.
Profile selection is intentionally a server-launch-time setting (-P/--profile
flags or FIREFOX_PROFILE/FIREFOX_PROFILE_DIR env vars) rather than a
browser_open tool parameter. That keeps the choice to expose a real,
logged-in profile to an agent in the hands of whoever configures the MCP
client — not something an agent (or a prompt injected via a visited page)
can request at runtime.
Audit network performance
Ask: "Which resources on /shop are slowest to load?"
browser_open+browser_navigate("/shop")devtools_network_all(slow_ms=500, limit=20)— requests over 500 ms, capped at 20 entriesReport the slowest assets with their URLs, types, and durations
Available Tools
Session management
Tool | Description |
| Open Firefox (URL optional, default |
| Quit the browser session |
| Session state, geckodriver version, BiDi status, current viewport size, buffer counts |
| Resize the viewport mid-session (e.g. 390×844 for iPhone 14) |
Navigation
Tool | Description |
| Navigate to a URL (bare hostnames get |
| Go back in history |
| Go forward in history |
| Reload the current page |
Page inspection
Tool | Description |
| Full-page or element PNG screenshot |
| Current page |
| Current URL |
| Raw HTML source (wrapped as untrusted content — see Security) |
| Visible text (whole page or CSS selector; wrapped as untrusted content) |
| Value of an HTML attribute on an element (wrapped as untrusted content) |
| List all elements matching a CSS selector |
Interaction
Tool | Description |
| Click element (CSS selector) |
| Type text into an input field (clears first by default) |
| Select |
| Run JavaScript — returns JSON |
| Wait: |
| Scroll to coords, by offset, or element into view |
| Send |
| Hover mouse over element ( |
| Switch into |
Dialogs & cookies
Tool | Description |
| Accept a JS |
| Dismiss a JS |
| Read all cookies for the current page |
| Inject a cookie (auth tokens, session IDs) |
DevTools (require BiDi — Firefox + geckodriver ≥ 0.34)
Tool | Description |
| Main diagnostic tool — JS errors + console + failed/slow network |
| JavaScript exceptions only (entries carry an |
| Console output (log / warn / error / info / debug; entries carry an |
| Failed resources (4xx, 5xx, DNS errors) |
| All network requests (supports |
| Clear buffered DevTools data (use before navigating) |
| Attach BiDi listeners to a running session |
| Computed CSS properties of an element |
| Bounding box, visibility, attributes, aria, outerHTML |
| CSS custom properties ( |
Security
Anything a visited page contains — HTML, visible text, attribute values,
console output, JS error messages, web storage — is attacker-controllable if
the page is malicious or compromised. Tools that relay this content back to
the calling agent (browser_get_source, browser_get_text,
browser_get_attribute, devtools_console, devtools_js_errors,
devtools_report, browser_get_storage) wrap it in an explicit
-----BEGIN/END UNTRUSTED CONTENT----- envelope (or an untrusted field on
structured entries), so an agent has a structural signal that the content is
data to read, never an instruction to follow — even if it's phrased as one.
This defends against indirect prompt-injection / agent-hijacking attacks
delivered via ordinary page content.
This complements the existing Firefox-profile lockdown (see Use a real Firefox profile): both exist because a page — or an instruction injected via one — should never be able to silently expand what the agent can do or see.
The server also defaults to read-only mode: page-mutating tools
(browser_click, browser_fill, browser_upload_file, browser_select,
browser_execute_js, browser_press_key, browser_accept_dialog,
browser_dismiss_dialog, browser_set_cookie, browser_set_storage,
browser_clear_storage) refuse to run unless WEBDRIVER_READONLY=false is
set. Navigation and session/viewport management (browser_open,
browser_navigate, browser_back/forward/refresh, browser_scroll,
browser_hover, browser_wait, browser_switch_frame, browser_close,
browser_set_viewport) are unaffected, since they're needed to reach the
page a read-only session inspects.
Environment variables
Variable | Default | Description |
| (unset) | Absolute path to geckodriver binary (highest priority) |
|
| Set to |
| (unset) | Path to a custom Firefox executable |
| (unset) | Named Firefox profile — same as |
| (unset) | Profile directory path — same as |
|
| Set to |
geckodriver resolution order
# | Source | Configure via |
1 |
| Absolute path to the binary |
2 | System PATH (default) |
|
3 | webdriver-manager auto-download | Fallback; disable with |
MCP client configuration
Minimal config:
{
"mcpServers": {
"webdriver": {
"command": "mcp-server-webdriver"
}
}
}With a named Firefox profile (stays logged in, uses saved passwords):
{
"mcpServers": {
"webdriver": {
"command": "mcp-server-webdriver",
"args": ["-P", "work"]
}
}
}With a profile directory and explicit geckodriver path:
{
"mcpServers": {
"webdriver": {
"command": "mcp-server-webdriver",
"args": ["--profile", "/home/user/.mozilla/firefox/abc123.dev"],
"env": {
"GECKODRIVER_PATH": "/usr/bin/geckodriver"
}
}
}
}Running tests
# Unit tests only (no browser required):
pytest tests/ -m "not integration"
# All tests including browser integration:
pytest tests/Related MCP Servers by VitexSoftware
Server | Description |
AbraFlexi accounting/ERP integration — invoices, contacts, products, bank transactions | |
Mastodon integration — timelines, posting, account management, search | |
Semaphore UI integration — manage Ansible, Terraform and other automation workflows |
License
MIT
Available Tools
43 toolsbrowser_accept_dialogA
Accept (click OK on) a JavaScript dialog: alert(), confirm(), or prompt().
Call this when a browser action triggers a dialog that blocks further interaction.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description accurately indicates that the tool performs a mutation (accepting a dialog) which aligns with the annotation readOnlyHint=false. It explains the behavior (clicking OK) and the types of dialogs handled, though it does not detail error cases (e.g., no dialog present).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loads the action and resource, and every sentence serves a purpose: defining the action and giving usage context. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters, single action), the description covers all necessary context: what it does, when to use it, and what kind of dialogs it applies to. An output schema exists to handle return values, so further detail is not needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters and the input schema is empty. The description adds value by explaining what action the tool performs (accepting dialogs) and the specific types of JavaScript dialogs it handles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'Accept (click OK on) a JavaScript dialog' and lists the dialog types (alert, confirm, prompt). It distinctly differentiates from sibling tool browser_dismiss_dialog, which handles dismissing (cancelling) the dialog.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear usage scenario: 'Call this when a browser action triggers a dialog that blocks further interaction.' It implies when not to use by contrasting with the sibling browser_dismiss_dialog, but does not explicitly state exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_backA
Navigate back.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations set readOnlyHint: false, indicating mutation. Description confirms navigation action but does not disclose potential side effects (e.g., page reload, state loss) or behavior when at first page. With simple action, minimal additional transparency beyond annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two words, zero waste. Every word earns its place. Perfectly concise for a simple tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and existence of an output schema, the description is mostly complete for a simple navigation action. However, it omits mention of edge cases (e.g., no previous page) or return value, but these may be documented elsewhere.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters in input schema, so description does not need to add parameter information. Schema coverage is 100%, meeting baseline expectation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description 'Navigate back' uses a specific verb ('Navigate') and resource ('back'), clearly indicating the action of moving to the previous page in browser history. It distinguishes from sibling tools like browser_forward, browser_navigate, and others.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., browser_forward, browser_navigate). It does not mention that it only works if there is a previous page, nor does it state to use it for backward navigation only.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_clear_storageA
Remove one key or clear all entries from localStorage or sessionStorage.
| Name | Required | Description | Default |
|---|---|---|---|
| key | No | Specific key to remove. Empty = clear all entries. | |
| storage | No | 'local' for localStorage (default) or 'session' for sessionStorage | local |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, so the write behavior is clear. The description adds no extra behavioral context beyond the schema, such as irreversible actions or permissions. For a simple destructive operation, it's adequate but not enriched.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, focused sentence with no extraneous words. Every part adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with full schema coverage and an output schema, the description is complete. It covers the operation, parameters, and provides enough context for safe usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for both parameters. The description adds minor clarification ('Empty = clear all entries') but doesn't significantly enhance understanding 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (remove/clear) and the target (key or all entries from localStorage or sessionStorage). It effectively distinguishes from siblings like browser_get_storage and browser_set_storage.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for clearing storage but provides no explicit guidance on when to use this tool versus alternatives like browser_get_storage or browser_set_storage. No when-not or context clues.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_clickC
Click an element.
| Name | Required | Description | Default |
|---|---|---|---|
| selector | Yes | CSS selector of element to click |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description fails to disclose behavioral traits such as waiting for page load, error handling, or scrolling behavior. With only readOnlyHint=false, more context is needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one short, clear sentence. It is front-loaded and concise, though it could be slightly more structured with additional context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description lacks completeness for a tool with an output schema and one parameter. It does not explain return values, error states, or behavioral specifics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with the selector parameter already described. The tool description adds no additional meaning beyond the schema, resulting in baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Click an element,' which is a specific verb and resource. It clearly indicates the action but does not differentiate from sibling tools like browser_fill or browser_select, though clicking is distinct enough.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No usage guidelines are provided. The description does not mention when to use this tool, alternatives, or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_closeA
Close the browser session. All buffered DevTools data is discarded.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only indicate readOnlyHint=false, but the description adds that 'All buffered DevTools data is discarded', disclosing a destructive side effect beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that conveys the essential purpose and side effect without any redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters, output schema exists), the description fully covers the purpose and behavioral effect. No additional context is necessary for correct usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, and schema coverage is 100%. Per the standard baseline for 0-parameter tools, the description does not need to add parameter info; a score of 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Close the browser session', a specific verb+resource action. It is distinct from siblings like browser_navigate or browser_open, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use when ending the session, but does not explicitly state when to use vs. alternatives (e.g., browser_refresh) or provide any '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.
browser_dismiss_dialogA
Dismiss (click Cancel on) a JavaScript confirm() or prompt() dialog, or close an alert().
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation readOnlyHint=false already indicates the tool is not read-only, and the description adds context on the dialog types affected. No further behavioral details are needed for this simple action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no unnecessary words. It clearly conveys the purpose efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with an output schema (not shown), the description provides sufficient context: it names the dialog types handled and the action taken. No gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, and schema coverage is 100%. The description does not need to add parameter info. Baseline for 0 params is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the action (dismiss/Cancel) and the target (JavaScript confirm, prompt, alert dialogs). It clearly distinguishes from sibling tool 'browser_accept_dialog'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies when to use this tool (to dismiss dialogs) and the sibling name 'browser_accept_dialog' suggests an alternative, but no explicit guidance on when not to use or specific contexts is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_execute_jsA
Execute JavaScript and return the result as JSON (falls back to str for non-serialisable values).
| Name | Required | Description | Default |
|---|---|---|---|
| script | Yes | JavaScript to run in the page context |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=false and openWorldHint=true. The description adds the return format (JSON or str fallback) but does not disclose potential side effects (like modifying page state) or error handling. Since annotations already flag mutability, the description adds limited behavioral context beyond the return.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no wasted words. It efficiently conveys the action, context, and return behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and an output schema (known to exist), the description covers the basic behavior and return format. It mentions the fallback for non-serializable values, which is helpful. However, it omits potential safety considerations (e.g., timeout, execution context) that could be useful for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single 'script' parameter, with schema description 'JavaScript to run in the page context'. The tool description adds no additional meaning beyond what the schema provides, so baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Execute JavaScript') and the resource ('in the page context'), with a specific output format (JSON, with fallback). It distinguishes this tool from siblings like browser_get_text or browser_click, as it allows arbitrary script execution.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when custom JavaScript needs to be executed and results obtained, but it does not explicitly state when to prefer this over alternatives (e.g., for simple text extraction, use browser_get_text). No guidance on when not to use it or potential risks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_fillC
Type text into an input field.
| Name | Required | Description | Default |
|---|---|---|---|
| value | Yes | Text to type | |
| selector | Yes | CSS selector of input field | |
| clear_first | No | Clear field before typing |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate it is a write operation (readOnlyHint=false), and the description adds no further behavioral context, such as default clearing action, behavior on missing elements, or page state changes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence with no wasted words. It could be slightly more informative without losing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and full parameter coverage, the description is minimally adequate but lacks details on failure modes, multiple matches, or integration with the browser automation context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the schema already explains the three parameters adequately. The description adds no extra meaning beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Type text into an input field' clearly states the verb and resource, distinguishing it from sibling tools like browser_click or browser_select. However, it could be more specific by mentioning optional clearing behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like browser_select or executing JavaScript. It lacks context for when not to use it or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_find_elementsARead-only
Return a list of all elements matching a CSS selector.
Each entry contains: index, tag, text (first 200 chars), id, class, href, src, value, type, name, visible, and aria-label.
Useful for enumerating links, buttons, inputs, or any repeated component.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max elements to return | |
| selector | Yes | CSS selector |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint. Description adds value by detailing the output structure (fields in each entry). Does not mention additional behavioral traits like cancellation or side effects, but is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with purpose, no wasted words. Efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the 2-parameter tool with 100% schema coverage and an output schema (context signal), the description fully covers what the tool does, what it returns, and when to use it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for both parameters. Description does not add meaning to the parameters beyond the schema; it focuses on output instead. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it returns a list of elements matching a CSS selector, specifying the verb, resource, and criterion. Lists returned attributes, distinguishing it from siblings like browser_get_text or browser_get_attribute.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides context for use ('useful for enumerating links, buttons, inputs, or any repeated component'), but does not explicitly mention when not to use it or name alternatives 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.
browser_forwardB
Navigate forward.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint: false (mutation), but the description provides no additional behavioral context such as side effects, error conditions (e.g., no forward history), or impact on browser state. For a simple navigation, minimal disclosure is somewhat acceptable, but more transparency would help.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two words, perfectly concise and front-loaded. Every word is necessary and earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters, existence of output schema), the description is nearly complete. It could mention that it relies on browser history and fails if no forward page exists, but overall it is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, and the schema coverage is 100%. The description does not need to add parameter information. Baseline for 0 params is 4, and it meets that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Navigate forward' clearly communicates the action and distinguishes from siblings like browser_back or browser_navigate. However, it could specify that it goes forward in browser history to avoid confusion with other forward actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives such as browser_navigate or browser_back. The description does not mention that it only works if there is forward history or that browser_navigate should be used for direct URLs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_get_attributeARead-only
Return the value of an HTML attribute on an element.
| Name | Required | Description | Default |
|---|---|---|---|
| selector | Yes | CSS selector | |
| attribute | Yes | Attribute name (e.g. 'href', 'src', 'value') |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true. Description adds that it returns a value, but doesn't disclose behavior on missing elements or attributes. With annotations, this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no redundant information, highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple read operation and existence of an output schema, the description is complete enough. Could mention error cases, but not necessary for basic usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the description adds no additional parameter meaning beyond what the schema provides. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns the value of an HTML attribute, using a specific verb and resource. It differentiates from sibling tools like browser_get_text or browser_get_source.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool vs alternatives. The description implies use for attribute retrieval, but doesn't mention exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_get_cookiesARead-only
Return all cookies for the current page as a list of dicts.
Each entry: name, value, domain, path, secure, httpOnly, expiry. Useful for inspecting authentication state or session tokens.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already indicate read-only behavior (readOnlyHint: true). The description adds valuable transparency by detailing the return format (list of dicts with fields: name, value, domain, path, secure, httpOnly, expiry), which goes beyond the annotation and helps the agent understand the output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two short sentences plus a bullet-like list of fields. Every sentence is informative and front-loaded with the action. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters, no output schema needed beyond what description provides) and the presence of an output schema, the description is complete. It fully explains what the tool does and what it returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so schema description coverage is 100%. The description adds no parameter information, but baseline is 4 as per guidelines. No additional clarity needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Return', the resource 'all cookies', and the scope 'for the current page'. It distinguishes this tool from siblings as the only cookie retrieval tool among many browser actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear use case: 'Useful for inspecting authentication state or session tokens.' While it does not explicitly list when not to use or mention alternatives, the context is sufficient given the unique purpose of the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_get_sourceARead-only
Return the full HTML source of the current page.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description is consistent. It does not add extra behavioral context beyond the annotation (e.g., whether it causes a reload). Adequate given low risk.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded, no unnecessary words. Every part is essential.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a zero-parameter, read-only tool. Output schema covers return format; description says enough. No missing context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters; schema coverage is 100% trivial. Baseline 4 applies as no parameter info is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states action ('Return'), resource ('full HTML source'), and scope ('of the current page'). Distinguishes from siblings like 'browser_get_text' (visible text) and 'browser_get_attribute' (specific attribute).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use vs alternatives. However, the purpose is clear enough that an agent can infer usage context; no exclusions or when-not-to-use mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_get_storageARead-only
Read from localStorage or sessionStorage.
Returns all key→value pairs when no key is given, or {key: value} for a single key (value is null if the key does not exist).
Useful for inspecting auth tokens, cached API responses, feature flags, or any client-side state stored in web storage rather than cookies.
| Name | Required | Description | Default |
|---|---|---|---|
| key | No | Specific key to read. Empty = return all entries as a dict. | |
| storage | No | 'local' for localStorage (default) or 'session' for sessionStorage | local |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description discloses return behavior (all key-value pairs when no key, {key: value} for single key with null if missing) beyond the readOnlyHint annotation. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences: purpose, return format, use cases. Front-loaded and no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and presence of output schema, the description fully covers what the agent needs: purpose, parameters, return behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed parameter descriptions. The description adds minimal extra meaning (e.g., 'Empty = return all entries as a dict'), which is helpful but not substantially beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Read from localStorage or sessionStorage' with specific verb and resource. Distinguishes from sibling tools like browser_set_storage and browser_clear_storage by focusing on reading.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit use cases ('inspecting auth tokens, cached API responses, feature flags') and implies alternative (browser_get_cookies) for cookies. No explicit when-not-to-use, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_get_textARead-only
Get visible text content of the page or a specific element.
| Name | Required | Description | Default |
|---|---|---|---|
| selector | No | CSS selector (empty = whole <body>) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, and the description aligns with a read operation. No additional behavioral context beyond the simple purpose is provided, which is acceptable given the tool's simplicity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence with no fluff, effectively communicates purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the optional single parameter and the presence of an output schema, the description sufficiently covers the tool's function for an agent to use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The parameter selector is fully described in the input schema with a default and explanation. The tool description adds no extra meaning beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'visible text content' of page or element, distinguishing it from siblings like browser_get_source (HTML source) and browser_get_attribute (attribute value).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like browser_get_source for HTML or browser_get_title for title. The agent must infer usage from context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_get_titleARead-only
Return the of the current page.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint, and the description adds no further behavioral context beyond what annotations already convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single concise sentence that is front-loaded with the key action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity, annotations, and existence of output schema, the description fully covers the tool's purpose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, and schema coverage is 100%. Baseline 4 for 0 parameters; description adds no param info, but none needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns the title of the current page, using a specific verb and resource. It distinguishes from sibling tools like browser_get_url or browser_get_text.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives, but the implied usage is clear for a simple getter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_get_urlARead-only
Return the current URL.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description accurately states the function. The readOnlyHint annotation already declares non-destructiveness. No contradiction, but the description adds no extra behavioral context beyond a trivial verb+resource.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence with no waste. Front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless getter with a readOnlyHint annotation and expected output schema, the description fully covers the tool's purpose. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist. Schema coverage is 100% by default, so description has no burden. Baseline score of 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Return the current URL.' uses a specific verb ('return') and resource ('current URL'), clearly distinguishing it from sibling tools like browser_get_title or browser_get_source.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives (e.g., browser_get_title for page title). Usage is implied but not clarified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_hoverARead-only
Move the mouse over an element (hover).
Triggers CSS :hover states and any mouseenter/mouseover event listeners — essential for dropdown menus, tooltips, and hover-activated controls.
| Name | Required | Description | Default |
|---|---|---|---|
| selector | Yes | CSS selector of element to hover over |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond the readOnlyHint annotation by detailing that it triggers CSS :hover states and event listeners, which is valuable for the agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, consisting of two short sentences that front-load the main action without unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple tool with one parameter and an existing output schema, the description adequately covers purpose, behavior, and usage context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the description does not add additional meaning to the 'selector' parameter beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Move the mouse over an element (hover)' with a specific verb and resource. It explains the triggering of CSS hover states and mouse events, distinguishing it from sibling tools like browser_click.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context by stating it is 'essential for dropdown menus, tooltips, and hover-activated controls', indicating when to use. However, it does not explicitly mention when not to use or suggest alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_openA
Open URL in Firefox. Starts a new browser session if none is running.
With enable_bidi=True (default) the session automatically captures: • All JavaScript exceptions (file, line, column, stack trace) • All console.* output (log / warn / error / info / debug) • All network requests with status codes and durations
To test responsive / mobile layouts pass width + height (and optionally user_agent): width=390 height=844 — iPhone 14 width=375 height=667 — iPhone SE width=360 height=800 — Samsung Galaxy S21 width=768 height=1024 — iPad width=1280 height=800 — laptop
geckodriver sources (priority order):
GECKODRIVER_PATH env → 2. apt install gecko-driver → 3. webdriver-manager
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | URL to open (default: about:blank) | about:blank |
| width | No | Viewport width in pixels. 0 = browser default. E.g. 390 for iPhone 14. | |
| height | No | Viewport height in pixels. 0 = browser default. E.g. 844 for iPhone 14. | |
| headless | No | Headless mode (no visible window) | |
| user_agent | No | Override the browser User-Agent string. Useful for mobile emulation so sites that sniff the UA serve their mobile layout. E.g. 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1' | |
| enable_bidi | No | Enable WebDriver BiDi for DevTools capture (JS errors, console, network). Requires Firefox + geckodriver ≥ 0.34. Default True. | |
| firefox_binary | No | Optional path to a custom Firefox binary | |
| geckodriver_log | No | Optional file path for geckodriver log |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behavioral traits beyond annotations: session management, BiDi capture details (JavaScript exceptions, console output, network requests), and responsive mode. It adds significant context that the readOnlyHint=false annotation alone 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with three concise paragraphs: session and BiDi info, responsive testing examples, and geckodriver setup. It is front-loaded with the most critical information and contains no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (8 parameters, output schema, many siblings), the description covers all necessary aspects: session lifecycle, parameter usage with examples, setup dependencies, and expected outputs (BiDi captures). It is fully adequate for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, the description adds substantial value by providing practical examples (viewport sizes for common devices), explaining the purpose of user_agent for mobile emulation, and detailing geckodriver sourcing logic not present in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Open URL in Firefox' and specifies it starts a new browser session. It distinguishes itself from sibling tools (e.g., browser_navigate, devtools_*) by detailing its session-initialization behavior and BiDi capture capabilities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit examples for responsive layout testing with width/height values and mentions geckodriver sourcing priority. It implies not to use for existing sessions (use browser_navigate instead), but does not explicitly state when to avoid this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_press_keyA
Send a keyboard key press to an element or the currently focused element.
Useful for submitting forms (enter), moving focus (tab), closing modals (escape), or triggering keyboard-driven UI components.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Key name: enter, tab, escape, space, backspace, delete, home, end, pageup, pagedown, arrowup/down/left/right, f1-f12 | |
| selector | No | CSS selector of element to send the key to. Empty = active element. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only show readOnlyHint=false, and description adds that key press can submit forms or close modals, hinting at side effects. However, it does not disclose return value or potential navigation changes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with action, then examples. No fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose and common uses. Lacks mention of return value (output schema exists) and potential gotchas like navigation. Minor gap for a simple tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and description does not add extra meaning beyond the schema. Baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool sends a keyboard key press to an element or the focused element. It is the only sibling tool for keyboard actions, so it distinguishes well.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides concrete use cases (forms, focus, modals, UI components) that guide when to use the tool. Lacks explicit exclusions or alternatives, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_refreshA
Reload the current page.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false, implying a non-read operation. The description adds minimal behavioral context beyond 'reload', without disclosing whether it reloads from cache or server, or if it resets page state. Given the simplicity, it is adequate but not enhanced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is front-loaded with the action and resource. It contains no wasted words and is appropriately sized for a simple tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters and an output schema exists, the description is mostly sufficient. However, it lacks any mention of side effects or caching behavior, which could be relevant for an AI agent deciding whether to refresh.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, and schema description coverage is 100% by default. The description is not required to add parameter details, so a baseline of 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Reload the current page' uses a specific verb ('Reload') and clearly identifies the resource ('current page'). It effectively distinguishes from sibling tools like browser_back, browser_forward, and browser_navigate, which are different navigation actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention scenarios where a refresh is appropriate, nor does it exclude situations where other navigation tools should be used instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_screenshotARead-only
Take a PNG screenshot for visual / layout / CSS diagnosis.
Capture the full page to spot broken layout, or pass a CSS selector to isolate a specific component (header, nav, modal…). The agent can use this to identify misaligned elements, invisible text, broken flex/grid layouts, or unstyled components.
| Name | Required | Description | Default |
|---|---|---|---|
| selector | No | CSS selector of element to capture. Empty = full page screenshot. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=true, which is consistent. The description adds behavioral context: captures a PNG, can target full page or element, and is used for diagnosis. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two paragraphs, four sentences total. First sentence is a clear purpose statement. Every sentence adds value without repetition or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple screenshot tool with one parameter and no output schema, the description adequately covers purpose, usage, parameter semantics, and behavioral traits. No missing critical information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers the selector parameter with description (CSS selector, default empty = full page). Description adds meaning by explaining how to isolate a component and giving examples (header, nav, modal). Since schema coverage is 100%, baseline is 3, but description elevates it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it takes a PNG screenshot for visual/layout/CSS diagnosis, with a specific verb and resource. It distinguishes from other browser tools by mentioning screenshot functionality, which is unique among siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use (full page for layout diagnosis or specific element via CSS selector) and provides concrete examples like misaligned elements, invisible text, broken layouts. It does not explicitly mention when not to use, but the guidance is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_scrollA
Scroll the page or scroll an element into view.
• Pass a CSS selector to scroll that element into view (smoothly). • Pass x/y to jump the page to absolute scroll coordinates. • Pass by=true with x/y to scroll relative to the current position (e.g. y=500 scrolls down 500 px). • No arguments scrolls to the top of the page.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | Horizontal scroll position in px (page scroll, ignored when selector given) | |
| y | No | Vertical scroll position in px (page scroll, ignored when selector given) | |
| by | No | If true, scroll BY (x, y) relative to current position instead of TO (x, y) | |
| selector | No | CSS selector — scroll this element into view. Empty = scroll the page. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description only covers scrolling mechanics and parameter behavior. It does not disclose side effects like scrolling smoothness, whether lazy loading triggers, or if the function waits for scroll completion. Annotations indicate readOnlyHint=false, but description provides no extra behavioral context beyond that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is brief (four lines) with a clear main sentence and three bullet points. Every sentence is necessary and front-loaded with the primary purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a scroll tool, the description covers all parameter modes and their effects. Output schema exists, so return values don't need mention. Missing are edge cases (e.g., invalid selector or coordinates) but overall sufficient for typical use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All four parameters have full schema descriptions. The tool description adds valuable interplay details beyond the schema: how selector, x/y, and by combine (e.g., 'by=true with x/y to scroll relative'). This clarifies semantics beyond individual parameter docs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it scrolls the page or an element into view. The verb 'scroll' and resource 'page/element' are specific. No sibling tool targets scrolling, so it's well-distinguished.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Bullet points explain four usage modes: CSS selector for element, absolute coordinates, relative scroll with by=true, and no-argument scroll-to-top. Explicit conditions and exclusions are absent but context is clear without needing alternatives since no sibling overlaps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_selectA
Select an in a dropdown.
| Name | Required | Description | Default |
|---|---|---|---|
| value | Yes | Option: visible text → value attribute → index | |
| selector | Yes | CSS selector of <select> element |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint: false, signaling a write operation. The description adds no additional behavioral context (e.g., triggering events, waiting for changes) beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no extraneous content, making it highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple selection tool, the description is complete. The output schema is present, so return value explanation is not needed. No gaps are apparent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Both parameters are fully described in the schema (100% coverage). The description adds no extra meaning; it simply aligns with the schema's definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (Select an <option>) and the resource (in a <select> dropdown), making it distinct from sibling tools like browser_click or browser_fill.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for dropdowns but lacks explicit guidance on when to use this tool versus alternatives, such as when to use browser_click instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_set_cookieA
Set a cookie on the current page.
Useful for injecting auth tokens or session cookies without going through a login flow. The browser must already be on a page in the target domain.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Cookie name | |
| path | No | Cookie path | / |
| value | Yes | Cookie value | |
| domain | No | Cookie domain (default: current page domain) | |
| secure | No | Secure flag |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The tool is a write operation (consistent with readOnlyHint=false) and the description adds a key behavioral constraint: the browser must already be on the target domain. No additional details about overwrite behavior or errors, but adequate given annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences: purpose, use case, precondition. No fluff, every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a full input schema, output schema, and annotations, the description covers the essential context (auth injection, domain requirement). Missing potential details like cookie overwrite behavior, but overall complete for this tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% description coverage for all 5 parameters, so the description doesn't add extra meaning beyond what the schema provides. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Set a cookie on the current page' with a specific verb and resource, and distinguishes from sibling 'browser_get_cookies' by emphasizing the write operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides practical guidance: useful for injecting auth tokens and requires the browser to be on the target domain. Lacks explicit when-not-to-use or alternative tools, but context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_set_storageA
Write a key→value pair to localStorage or sessionStorage.
Useful for injecting auth tokens, feature flags, or test fixtures directly into web storage without going through a login or setup flow.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Storage key | |
| value | Yes | Value to store | |
| storage | No | 'local' for localStorage (default) or 'session' for sessionStorage | local |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false, so the description's mention of writing is expected. It adds context about typical usage but does not elaborate on side effects like overwriting or persistence limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (two sentences), front-loaded with the core action, and wastes no words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool (3 params, 2 required, output schema exists), the description covers purpose, use cases, and storage options adequately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description does not add substantial extra meaning beyond the parameter names and defaults. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Write a key→value pair') and the target resource ('localStorage or sessionStorage'). It distinguishes from siblings like browser_get_storage and browser_clear_storage.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides concrete use cases ('injecting auth tokens, feature flags, or test fixtures') without going through a login flow. It does not explicitly state when not to use, but the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_set_viewportA
Resize the browser viewport to test responsive / mobile layouts.
Call this at any point during a session to switch between breakpoints.
Common presets: 390×844 — iPhone 14 375×667 — iPhone SE 360×800 — Samsung Galaxy S21 768×1024 — iPad 1280×800 — laptop 1920×1080 — desktop full-HD
| Name | Required | Description | Default |
|---|---|---|---|
| width | Yes | Viewport width in pixels | |
| height | Yes | Viewport height in pixels |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false, and description states 'Resize,' confirming it's a mutation. Description adds context about responsive testing and presets, surpassing what annotations alone provide. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise: two sentences for purpose and usage, plus a cleanly formatted list of presets. Every sentence is meaningful and well-front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool (2 required params, output schema exists), the description covers purpose, when to call, and provides presets. No gaps given the available structured information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers both parameters (100% coverage), but description adds value with common presets and a use-case framework, making it easier for the agent to choose values. Baseline is 3, so this is above.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Resize the browser viewport to test responsive / mobile layouts,' using a specific verb and resource. This distinguishes it from sibling tools like browser_navigate or browser_click.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Call this at any point during a session to switch between breakpoints,' providing clear usage context. However, it doesn't specify when not to use or mention alternatives, though the presets list helps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_statusARead-onlyIdempotent
Session state, geckodriver info, BiDi status and buffer sizes.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint and idempotentHint, making the safety profile clear. The description adds specific details about the categories of data returned, which is useful beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that front-loads key information. Every word is meaningful with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With zero parameters and an output schema available, the description sufficiently covers the tool's purpose and returned categories. No additional detail is necessary.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, schema description coverage is 100%. The baseline for 0 parameters is 4, and no additional parameter semantics are needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns session state, geckodriver info, BiDi status, and buffer sizes. It distinguishes from sibling tools like browser_navigate or devtools_console which perform actions or inspect specific features.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving current browser session status, but does not explicitly state when to use this vs alternatives like devtools_* or when not to use. Given siblings, the context is clear but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_switch_frameB
Switch into an or back to the main document.
| Name | Required | Description | Default |
|---|---|---|---|
| selector | No | CSS selector of <iframe>, or '' for main document |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description does not disclose behavioral traits beyond the basic function. It doesn't mention that after switching, subsequent actions apply to the selected frame, or any prerequisites. Annotations only provide readOnlyHint=false, so the description carries the burden but offers little.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no redundant information, front-loaded with the action and target. Efficient and clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (single optional parameter, output schema exists), the description is mostly adequate. However, it lacks usage context (when to switch frames) and doesn't explain the effect of switching on other browser interactions, which would be helpful for completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds 'or '' for main document' which is already in the schema description, but it clarifies the meaning of the empty string. No additional semantics beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb (switch) and resource (into an <iframe> or back to main document), distinguishing it from sibling tools which focus on navigation, clicking, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool (e.g., before interacting with iframe content) or when not to use it; no alternatives mentioned. The description lacks context for usage decisions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_upload_fileA
Upload a local file through a element.
Works even when the file input is visually hidden (the common pattern of hiding the native input and styling a custom button over it). The file must exist on the machine running the MCP server.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute path to the local file to upload | |
| selector | Yes | CSS selector of the <input type='file'> element |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false, consistent with upload. The description adds useful behavioral context: works with hidden inputs and requires file existence on the server. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core purpose, no unnecessary words. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, the description covers the key behavioral aspects. An output schema exists, so return values are already documented. No missing context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers both parameters with descriptions. The description adds the requirement that the file must exist on the MCP server, which is not in the schema. This extra context justifies a score above the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'upload' and the resource 'local file through a file input element'. It is specific and distinct from sibling tools, none of which perform file upload.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use (for file inputs) and notes it works even when hidden. However, it does not explicitly provide when-not-to-use or alternative methods, but given the sibling set, no alternatives exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_waitARead-only
Wait until an element satisfies a condition: visible, clickable, present in DOM, or contains text.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | Max seconds to wait | |
| selector | Yes | CSS selector to wait for | |
| condition | No | What to wait for: 'visible' (default), 'clickable', 'present', or 'text:<string>' | visible |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, consistent with a waiting operation. Description adds behavioral context like conditions and timeout, but does not disclose failure behavior (e.g., timeout exception).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with purpose and key details. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With output schema present, return info not needed. Covers core functionality, but lacks mention of behavior on timeout or when condition is already met.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with well-described parameters. Description adds slight extra clarity on condition values (e.g., 'present in DOM' vs 'present') but mostly redundant.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool waits for an element to satisfy a condition, listing specific conditions (visible, clickable, present, text). Differentiates from sibling tools that perform actions or navigation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage when needing to wait before interacting, but lacks explicit guidance on when to use vs. other tools or when not to use. No mention of alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
devtools_clearA
Clear all buffered console, JS error, and network entries.
Call this before navigating to a new page to get a clean baseline, so subsequent devtools_* calls only reflect the new page's activity.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that it clears buffers (destructive action), which aligns with readOnlyHint=false. It adds context about its effect on subsequent calls but doesn't detail potential side effects on other tools. Nonetheless, it is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, each adding value. The first states what it does, the second gives usage advice. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and an output schema, the description provides all necessary information: function, when to use, and impact on other tools. It is fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters, so schema coverage is 100%. Per guidelines, 0 parameters yields a baseline of 4. No additional parameter info is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it clears all buffered console, JS error, and network entries. This distinguishes it from other devtools_* tools that only read data, making the purpose very specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises to call this before navigating to a new page to get a clean baseline, so subsequent devtools_* calls reflect new page activity. This provides clear when-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
devtools_computed_cssARead-only
Return computed (final applied) CSS properties of an element.
Use this to understand why an element looks wrong: • Is it display:none or visibility:hidden? • What color / font is actually applied? • Is a CSS variable resolving correctly? • Are grid/flex dimensions what you expect?
Returns a dict of {property: computed_value}.
| Name | Required | Description | Default |
|---|---|---|---|
| selector | Yes | CSS selector of the element to inspect | |
| properties | No | Comma-separated CSS property names to read, e.g. 'display,visibility,color,font-family,width,height,margin,padding'. Empty = a useful default set. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description is consistent with the readOnlyHint annotation. It explains that the tool returns a dict of property-value pairs and implies no side effects. This added context beyond the annotation is sufficient for safe invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a summary sentence, a bullet list of example use cases, and the return format. Every sentence provides useful information with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 parameters, no enums, output schema present), the description covers all necessary context: purpose, parameters, return type, and typical use cases. It is complete for an AI agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% coverage, and the description adds value by explaining that the 'properties' parameter expects comma-separated names and that empty defaults to a useful set. This helps the agent understand parameter semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns computed CSS properties. It includes specific use cases like checking display:none, color, font, CSS variable resolution, and grid/flex dimensions, which distinguishes it from sibling tools like devtools_css_variables and devtools_element_info.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear guidance on when to use the tool ('to understand why an element looks wrong') with concrete examples. It does not explicitly mention when not to use it or compare to alternatives, but the context is sufficiently clear for an AI agent to decide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
devtools_consoleARead-only
Return buffered browser console messages.
Each entry: ts, level, text, url (source file), line. Covers console.log / warn / error / info / debug.
| Name | Required | Description | Default |
|---|---|---|---|
| level | No | Filter by level: 'log', 'info', 'warn', 'error', 'debug'. Empty = all. | |
| since | No | ISO 8601 timestamp filter. Empty = all. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description is consistent. It adds detail about the entry structure (ts, level, text, url, line) and the buffered nature, but does not discuss side effects or limitations like buffer size or clearing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two short sentences plus a line listing entry fields, all front-loaded with the core purpose. Zero wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists, the description does not need to explain return values. It explains the entry fields and scope. It could mention that it's a non-destructive read of the buffer, but overall it's sufficiently complete for a simple read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description essentially repeats the schema's parameter descriptions (filter by level, ISO timestamp). It adds no new meaning beyond what the schema already provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns buffered browser console messages, listing the entry fields and covered log levels. It distinguishes itself from siblings like devtools_js_errors or devtools_network_all by focusing on console logs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving console messages and specifies which types are covered (log, warn, error, info, debug). However, it does not provide explicit when-to-use or when-not-to-use guidance compared to alternative devtools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
devtools_css_variablesARead-only
Return CSS custom properties (variables) defined on :root.
Helps diagnose theming issues: missing tokens, wrong colour values, variables that weren't loaded because a CSS file failed to fetch.
| Name | Required | Description | Default |
|---|---|---|---|
| prefix | No | Only return variables whose name starts with this prefix, e.g. '--color' or '--'. Empty = all custom properties on :root. | -- |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and description adds context about diagnosing theming issues. No contradiction; description enriches understanding beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first states purpose, second gives usage guidance. Concise, front-loaded, no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given output schema exists (return values documented there), and description covers purpose and usage context for a simple read-only tool, it is fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with detailed schema documentation for the single parameter 'prefix'. Description does not add extra semantic value beyond what schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Return CSS custom properties (variables) defined on :root.' with a specific verb and resource, and it is distinct from sibling tools which are browser actions and other devtools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Helps diagnose theming issues: missing tokens, wrong colour values, variables that weren't loaded because a CSS file failed to fetch.' This provides clear context for when to use it, but does not mention when not to use or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
devtools_element_infoARead-only
Return detailed info about a DOM element for debugging:
• outerHTML — the element's markup (first 4000 chars) • bounding_box — position and size on screen (x, y, width, height) • visible — whether the element is actually visible • in_viewport — whether it's within the visible scroll area • attributes — all HTML attributes • aria — ARIA role, name, label, disabled, hidden • child_count — number of child elements • text_content — visible text (first 500 chars)
Use this to diagnose elements that should be visible but aren't, or to understand the structure around a broken component.
| Name | Required | Description | Default |
|---|---|---|---|
| selector | Yes | CSS selector of the element to inspect |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description lists the exact fields returned (outerHTML, bounding_box, visible, etc.) and notes truncation limits (first 4000 chars for outerHTML). This reveals behavioral details beyond the readOnlyHint annotation, clarifying the output format and constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, using bullet points to list fields and a clear final sentence for usage. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The combination of purpose, usage guidance, and field list fully covers what the tool does, when to use it, and what to expect as output. Given the tool's simplicity and existing output schema, the description is thorough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully describes the single parameter 'selector' as a 'CSS selector of the element to inspect' (100% coverage). The description does not add further semantics about the selector, staying at the baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Return detailed info about a DOM element for debugging', which clearly identifies the verb (return) and resource (DOM element details). It distinguishes from sibling devtools tools that focus on CSS, console, or network data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises using this tool to 'diagnose elements that should be visible but aren't, or to understand the structure around a broken component'. This provides specific usage context, though it does not mention when to avoid using it or compare to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
devtools_enable_bidiA
Attach (or re-attach) WebDriver BiDi listeners to the running session.
Use if the session was opened with enable_bidi=False, or if listeners were lost after a page crash.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds context beyond annotations (readOnlyHint: false) by explaining it attaches/re-attaches listeners and mentions recovery after page crash. It does not detail all consequences, but sufficiently describes the action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with the core action followed by usage cases. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters, readOnlyHint false, and an output schema (though not shown), the description covers purpose and usage scenarios. It could mention what happens if already attached, but the 're-attach' language implies idempotency.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist; schema coverage is 100%. The baseline for 0 parameters is 4, and the description adds no param info since none needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Attach (or re-attach) WebDriver BiDi listeners', providing a specific verb and resource. It distinguishes from sibling devtools tools by focusing on enabling BiDi listeners, which is unique among the listed siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: 'if the session was opened with enable_bidi=False, or if listeners were lost after a page crash.' It provides clear context but does not explicitly mention when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
devtools_js_errorsARead-only
Return all JavaScript exceptions captured since browser_open.
Each entry contains: ts — ISO 8601 timestamp type — error type (e.g. 'TypeError', 'ReferenceError') text — error message url — source file URL line — line number in source file column — column number stack — full stack trace
This is the primary tool for finding which JS file and line causes a bug.
| Name | Required | Description | Default |
|---|---|---|---|
| since | No | ISO 8601 timestamp filter. Empty = all. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, so safety is clear. The description adds value by explaining the capture scope (since browser_open) and detailing all fields in the output. No side effects are mentioned, but the description is adequate given annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: 8 lines with a clear summary, bulleted field list, and a closing sentence. Every part earns its place, and it is well-structured for quick parsing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple input (one optional parameter) and the existence of an output schema, the description covers purpose, usage scope, and output fields comprehensively. It leaves no significant gaps for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single 'since' parameter. The description adds context by stating 'since browser_open', which helps understand the default scope and the parameter's role. This adds meaningful context beyond the schema's description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns JavaScript exceptions captured since browser_open. It specifies the resource and verb, and distinguishes itself from sibling tools by calling itself 'the primary tool for finding which JS file and line causes a bug.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for debugging JS errors but does not explicitly state when not to use it or mention alternative tools like devtools_console. It provides context but lacks exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
devtools_network_allARead-only
Return all captured network requests with filtering options.
Useful for auditing which CSS/JS files are loaded, checking API response times, or finding resources that are unexpectedly missing from the page. Use limit= to avoid overwhelming the context window on busy pages.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max entries to return (most recent first). 0 = all. | |
| since | No | ISO 8601 timestamp filter. Empty = all. | |
| slow_ms | No | Include only requests slower than this many ms. 0 = all. | |
| min_status | No | Minimum HTTP status to include (e.g. 400). 0 = all. | |
| resource_type | No | Type filter: stylesheet/script/image/font/fetch/xhr/'' |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations mark the tool as readOnlyHint=true, consistent with a read operation. Description adds context about returning captured requests but does not elaborate on what 'captured' entails or potential limitations. Adequate but not enriched beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences with front-loaded purpose and use cases. No redundant information. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (not shown but indicated) and annotations providing safety, the description covers usage context, filtering options, and purpose. Complete for a data retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with defaults and descriptions for all 5 parameters. Description only mentions limit=, adding minimal value. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states 'Return all captured network requests with filtering options.' Clearly identifies the verb (return) and resource (network requests). Distinguishes from sibling 'devtools_network_failed' which returns only failed requests.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides specific use cases like auditing CSS/JS files, checking API response times, and finding missing resources. Also advises using limit= to avoid context overload. Lacks explicit when-not-to-use or direct comparison to siblings, but guidance is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
devtools_network_failedARead-only
Return network requests that FAILED — 4xx / 5xx status or DNS / connection errors.
This is how the agent detects broken CSS files, missing JS bundles, unavailable fonts, or failed API calls that cause layout or functionality issues.
Each entry: ts, method, url, type, status (0 = connection failed), duration_ms, failed (bool), error (error description).
| Name | Required | Description | Default |
|---|---|---|---|
| since | No | ISO 8601 timestamp filter. Empty = all. | |
| resource_type | No | Filter by type: 'stylesheet', 'script', 'image', 'font', 'fetch', 'xhr', or '' for all. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true. The description adds valuable behavioral details: the tool only returns failed requests, explains error conditions (status 0 means connection failed), and lists output fields. No contradictions or hidden side effects are omitted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences: purpose, use case, output fields. It is front-loaded with the core action, uses no filler, and every sentence adds value. Ideal length for a simple listing tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and the presence of an output schema, the description covers the output fields and purpose sufficiently. It lacks mention of potential pagination or limits, but for a filtered list tool this is minor. Overall adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (both parameters documented in schema). The description does not add any additional meaning beyond what the schema already provides, so baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool returns 'network requests that FAILED — 4xx / 5xx status or DNS / connection errors.' This is a specific verb and resource, and the use case (detecting broken assets) further clarifies its purpose. The name itself distinguishes it from 'devtools_network_all'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use: 'This is how the agent detects broken CSS files, missing JS bundles...' It implies usage for failure diagnostics but does not explicitly compare with siblings like 'devtools_network_all' or state when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
devtools_performanceARead-only
Return page performance timing from the browser Navigation Timing API.
navigation — key milestones for the current page load: ttfb_ms — Time to First Byte (server latency) dom_loaded_ms — DOMContentLoaded (page parsed, defer scripts done) load_ms — full load event (all resources fetched) dns_ms — DNS lookup duration connect_ms — TCP/TLS connection duration request_ms — time from request sent to last response byte transfer_size — response body size in bytes
resources (when include_resources=True) — per-asset breakdown: name, type, duration_ms, transfer_size, start_time
Use this to identify slow pages, expensive assets, or server latency. Complements devtools_network_all which captures requests via BiDi listeners.
| Name | Required | Description | Default |
|---|---|---|---|
| include_resources | No | Include per-resource timing entries (stylesheets, scripts, images…). Can be large on busy pages. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations show readOnlyHint=true, and description adds context about reading timing data, and notes that include_resources parameter 'Can be large on busy pages', disclosing potential performance impact.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with bullet points, front-loaded purpose, no redundant sentences. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Description explains return structure in detail, complements output schema. For a tool with one parameter and clear annotations, this is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with description for the boolean parameter. The description adds caution about size when true, providing value beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description specifies exact resource: 'page performance timing from the browser Navigation Timing API'. Lists fields and distinguishes from sibling 'devtools_network_all' which captures requests via BiDi listeners.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States 'Use this to identify slow pages, expensive assets, or server latency' and mentions complementing devtools_network_all, providing clear context but no explicit when-not.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
devtools_reportARead-only
MAIN DIAGNOSTIC TOOL — returns a complete DevTools report in one call:
• js_errors — all JavaScript exceptions with file, line, column, stack • console_errors — console.error() and console.warn() output • failed_resources — CSS / JS / images / fonts that returned 4xx/5xx or failed to load • slow_resources — requests that took longer than 2 s
Use this after navigating to a page or after triggering a UI action. Equivalent to opening DevTools and checking the Console + Network tabs.
| Name | Required | Description | Default |
|---|---|---|---|
| since | No | ISO 8601 timestamp — only entries after this. Empty = all. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds value by detailing the report contents (js_errors, console_errors, etc.) and its non-destructive nature. It aligns with annotations and provides behavioral context beyond what annotations convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: a bolded main purpose, a bullet list of report categories, and one-line usage instruction. Every sentence is necessary and well-structured, with zero waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that the output schema exists (noted in context signals) and the parameter is simple, the description sufficiently covers what the tool returns and when to use it. It is complete for a diagnostic aggregation tool with good annotations and schema support.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage for the single parameter 'since' with a clear description and default. The tool description does not add any additional semantic meaning to the parameter, so baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states it's the 'MAIN DIAGNOSTIC TOOL' and lists the four categories (js_errors, console_errors, failed_resources, slow_resources), making it clear what the tool does. It distinguishes itself from sibling tools like devtools_js_errors and devtools_network_all by being a comprehensive single-call report.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear usage context: 'Use this after navigating to a page or after triggering a UI action.' It also gives an alternative action ('Equivalent to opening DevTools...'), but does not explicitly list when not to use it or compare to other specific siblings beyond the equivalence. Still, it offers solid guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool has a distinct purpose, clearly separated by function (browser actions vs. devtools). No overlapping tools; descriptions are precise.
All tools follow a consistent 'prefix_verb_noun' pattern in snake_case (e.g., browser_navigate, devtools_network_failed). The naming is predictable and readable.
With 37 tools, the server is over-scoped compared to typical MCP servers (3-15 recommended). While the domain is complex, many tools could be consolidated or pruned.
The tool set covers the full lifecycle of browser automation and debugging: navigation, interaction, state inspection, and comprehensive devtools (console, network, CSS, errors). No obvious gaps.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Stealth web automation for AI agents. Login, signup, navigate, screenshot.
Stealth web automation for AI agents. Login, signup, navigate, screenshot.
Provides cloud browser automation capabilities using Stagehand and Browserbase, enabling LLMs to i…
AI-powered web automation. Navigate websites using AI agents for one page or a thousand
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEmpowers AI agents to perform web browsing, automation, and scraping tasks with minimal supervision using natural language instructions and Selenium.9Apache 2.0
- AlicenseBqualityCmaintenanceEnables AI assistants to automate web browser interactions through Selenium WebDriver. Supports multi-browser automation, element interaction, navigation, and web testing capabilities.561026MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to automate browser interactions using Selenium WebDriver, supporting multiple browsers and tools for navigation, clicking, typing, screenshots, and more.907MIT
- FlicenseNot gradedqualityCmaintenanceEnables AI assistants to control a browser for web automation tasks like navigation, typing, clicking, and taking screenshots.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/VitexSoftware/mcp-server-webdriver'
If you have feedback or need assistance with the MCP directory API, please join our Discord server