real-browser-mcp
This MCP server connects AI agents to your already-open Chrome browser, giving them access to your real sessions, cookies, and SSO — no new browser needed.
👁️ See the page
browser_snapshot– accessibility tree with element refs, compact mode shows only interactive elementsbrowser_screenshot– capture visible area as PNG/JPEGbrowser_text– extract raw text from page or scoped elementbrowser_find– find elements via natural language (e.g. "login button")
🖱️ Interact
browser_click– click by ref or CSS selector, with left/right/middle/double‑clickbrowser_click_text– click by visible text (works through portals/overlays)browser_type– type into inputs/contenteditable, optional clear‑before‑typingbrowser_press_key– press keyboard keys/combos (Enter, Escape, Ctrl+A, etc.)browser_scroll– scroll by pixels, direction, position, or to a specific elementbrowser_hover– trigger tooltips/dropdownsbrowser_select– pick<select>options by value/label/indexbrowser_wait– wait for elements to appear, disappear, or a fixed delay
🧭 Navigate
browser_navigate– go to URL with navigation‑completion controlbrowser_tabs– list, create, close, focus tabs
🐛 Debug
browser_console– read logs/warnings/errors, optionally clear after readingbrowser_network– read XHR/fetch requests with statuses, filter by URL patternbrowser_evaluate– execute arbitrary JavaScript in page contextbrowser_handle_dialog– accept/dismiss alert/confirm/prompt dialogs
Enables the identification and querying of web elements using CSS selectors for automated interaction and data extraction.
Integrates with Google Chrome via a dedicated extension to allow AI agents to view, navigate, and interact with the user's active browser session in real-time.
Provides a tool to evaluate and execute custom JavaScript code directly within the browser context via the Chrome DevTools Protocol.
Everyone is building "agentic browsers." Most of them hand the agent a new browser: headless Chromium, a cloud VM, a clean profile with no cookies.
That is the wrong tool for the coding loop.
You ship a fix. The agent says "done, please verify." You already have Chrome open on staging, past SSO, on the exact page that breaks. The agent wrote the code. It could verify it there. It just cannot see that browser.
real-browser-mcp is the bridge: a local MCP server plus a Chrome extension over localhost WebSocket. Your agent talks MCP. Your real Chrome executes. Sessions stay on your machine.
This is not Playwright with a fresh profile. Not a hosted agent browser. Not CDP remote-debugging bolted onto your default Chrome profile (Chrome 136+ blocks that path for good security reasons).
Quick Start
Two parts:
MCP server - runs on your machine, talks to your AI agent (Cursor, Claude Code, VS Code, …)
Chrome extension - runs inside your real Chrome and executes the tools
1. Add the MCP server
Cursor (one click):
Or add manually in Cursor Settings > MCP > "Add new MCP server":
{
"mcpServers": {
"real-browser": {
"command": "npx",
"args": ["-y", "real-browser-mcp"]
}
}
}Claude Desktop: Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows). Add the same JSON block.
Windsurf: Settings > MCP. Same config.
Any MCP-compatible client works.
2. Install the Chrome extension
Or load from source:
git clone https://github.com/ofershap/real-browser-mcp.gitOpen
chrome://extensionsand enable Developer mode (toggle in the top right)Click Load unpacked and select the
extension/folder from the cloned repo
Click the Real Browser MCP icon in your toolbar.
Green dot = connected. Gray = waiting for server.
Done. Your agent can see your browser.
Related MCP server: Chrome MCP Server
Agent Plugins
This repo ships as an Agent Plugins 1.0.0 package: root plugin.json, mcp.json, and skills/real-browser-control/ teach agents when to pick real Chrome over headless / cloud agentic browsers.
Claude Code .claude-plugin/ and agent-config/ remain for rules and marketplace flows. Agent Plugins is the cross-client layout (MCP + skill in one tree).
Cursor (local plugin): clone the repo, then copy or symlink it to ~/.cursor/plugins/local/real-browser-mcp and reload the window. You still need the Chrome extension connected. One-click MCP install below adds only the server unless you also install the local plugin folder.
Spec and tooling: agent-plugins.org.
Why this exists (the agentic browser gap)
Stack | What the agent gets | Where it fails for coding agents |
Playwright MCP / Puppeteer | New browser, clean state | No SSO cookies, no "the tab I already opened" |
Cloud agentic browsers | Remote browser / VM | Separate login, not your IDE-local Chrome |
Chrome DevTools MCP (CDP / autoConnect) | DevTools-oriented attach | Chrome 136+ refuses |
Real Browser MCP | Your Chrome via MV3 extension + localhost MCP | Not for CI parallel clean runs (use Playwright there) |
If you want repeatable automation in CI, use Playwright. If you want the agent inside the browser you already authenticated, use this.
How Others Compare
Real Browser MCP | Playwright MCP | Chrome DevTools MCP | Cloud agentic browser | |
Browser | Your real Chrome | Launches new Chromium (usually) | Attach via CDP | Hosted / remote |
Cookies / SSO already there | Yes | No (inject or replay) | Fragile on default profile after Chrome 136 | Separate session |
Connection model | Extension ↔ localhost WebSocket | Playwright driver | Remote debugging / autoConnect | Vendor cloud |
Best fit | Live verify in IDE | CI + repeatable runs | Performance / DevTools debugging | Unattended remote browse |
Leaves your machine? | No control plane | Local (unless you add cloud) | Local | Yes |
🧠 Teach Your Agent
The agent can use all 18 tools out of the box, but it works better when it knows when and how to chain them. A config file teaches the right workflow - snapshot first, then act, then verify.
Run one command:
npx real-browser-mcp --setup cursorThis installs:
~/.cursor/rules/real-browser-mcp.mdc- teaches the snapshot-first workflow, how to handle dropdowns, when to use screenshots vs snapshots~/.cursor/commands/check-browser.md- adds/check-browserto your Cursor chat
After that, type /check-browser in any chat. Or just say "check the result in my browser" and the agent knows what to do.
npx real-browser-mcp --setup claudeAdds an AGENTS.md to your project root. Claude Code auto-discovers it.
See agent-config/ for manual installation or to customize the rules.
What It Can Do
18 tools. Grouped by purpose.
See
Tool | What it does |
| Accessibility tree with element refs. Compact mode (default) returns only interactive elements |
| Capture what's on screen |
| Extract raw text from page or element |
| Query elements by CSS selector |
Interact
Tool | What it does |
| Click by ref or CSS selector |
| Click by visible text. Works through React portals and overlays |
| Type into inputs and contenteditable fields |
| Key combos (Enter, Escape, Ctrl+A) |
| Scroll pages and virtual containers |
| Trigger tooltips and dropdowns |
| Pick from native |
| Wait for elements to appear or disappear |
Navigate
Tool | What it does |
| Go to a URL in the active tab |
| List, create, close, or focus tabs |
Debug
Tool | What it does |
| Console output (log, warn, error) |
| XHR/fetch requests with status codes |
| Run JavaScript via Chrome DevTools Protocol |
| Handle alert/confirm/prompt dialogs |
Configuration
Env var | Default | What it does |
|
| WebSocket port for extension connection |
Connection drops are handled automatically with exponential backoff (1s to 30s), ping/pong health checks every 10s, and per-tool timeouts (5s for clicks, 60s for navigation).
Run two server instances on different ports:
{
"mcpServers": {
"browser-work": {
"command": "npx", "args": ["-y", "real-browser-mcp"]
},
"browser-personal": {
"command": "npx", "args": ["-y", "real-browser-mcp"],
"env": { "WS_PORT": "9333" }
}
}
}Update the port in each extension popup to match.
Everything stays on your machine. The extension connects to the MCP server via WebSocket on localhost. No cloud, no proxy, nothing leaves your browser.
real-browser-mcp/
├── mcp-server/ MCP server (npm package, TypeScript)
│ └── src/tools/ One file per tool, registry pattern
├── extension/ Chrome extension (Manifest V3, plain JS)
│ ├── background.js Service worker, WebSocket client, tool handlers
│ ├── content.js Console capture
│ └── popup/ Connection status UI
├── agent-config/ Pre-built configs for Cursor + Claude Code
│ ├── cursor/ Rules and commands
│ ├── skills/ Browser automation skill
│ └── setup.mjs One-command installer
└── tests/ Bridge + registry testsStack: TypeScript (strict) · MCP SDK · WebSocket · Chrome Extension Manifest V3 · Vitest
git clone https://github.com/ofershap/real-browser-mcp.git
cd real-browser-mcp
npm install
npm run build
npm testCommand | What it does |
| Compile TypeScript |
| Watch mode |
| Run tests |
| Type check without emitting |
| Install Cursor rule + command |
FAQ
Is this an agentic browser?
No. An agentic browser usually means the agent owns a new browser (local headless or cloud). real-browser-mcp connects an MCP agent to your existing Chrome. Same profile, same tabs, same logins.
Is the Chrome extension required?
Yes. The MCP server alone cannot see or control Chrome. Install the Chrome extension, open the popup, and wait for a green connected state before calling tools.
Does it work with my existing logins and corporate SSO?
Yes. The extension runs in your normal Chrome profile with cookies, sessions, and local storage. That is the point: verify against the session you already set up, including SSO you completed manually.
How is this different from Playwright MCP or browser-use?
Those stacks are built around a browser the automation tool launches (great for CI and clean repeats). Real Browser MCP is built around the browser you already have open. Use Playwright when you need deterministic runs. Use this when you need live session state.
How is this different from Chrome DevTools MCP?
Chrome DevTools MCP is excellent for DevTools-style debugging and can attach via CDP / autoConnect. After Chrome 136, remote debugging on the default user profile is blocked, which is exactly the profile that holds your real logins. Real Browser MCP uses an extension bridge over localhost WebSocket instead of opening a debug port on that profile.
Why not a cloud agentic browser?
Cloud browsers are remote machines. You re-auth, you leave the local IDE loop, and session data sits on someone else's infra. This project keeps control on localhost: MCP server ↔ extension. Page content still enters your AI client when tools return it; there is just no vendor browser SaaS in the middle.
Agent Plugins vs MCP-only install?
MCP-only (Cursor deeplink or mcp.json) registers the server and tools. The Agent Plugins package adds plugin.json and the real-browser-control skill so agents know when to prefer real Chrome over headless. Same npm server either way.
Is it safe to let an agent control my real browser?
The server and extension talk over WebSocket on localhost only; nothing is sent to a cloud control plane. The agent can still click, type, and read whatever is visible in the connected tab, including logged-in apps. Use a dedicated profile or tab when testing untrusted sites, and do not point automation at tabs with sensitive data unless you accept that risk.
No. The MCP server and extension talk over WebSocket on localhost. Nothing leaves your machine. There is no analytics, no telemetry, and no cloud component. Privacy policy.
Any MCP-compatible client. Cursor, Claude Desktop, Claude Code, Windsurf, Cline, and anything else that speaks the MCP protocol.
Yes. Run two MCP server instances on different ports. See Configuration for the setup.
Contributing
Bug reports, feature requests, and PRs welcome. Open an issue first for larger changes.
Author
README built with README Builder
License
MIT © Ofer Shapira
Available Tools
18 toolsbrowser_clickC
Click an element on the page using a ref from snapshot or a CSS selector
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | Element reference from snapshot (e.g. "e12") | |
| selector | No | CSS selector for the element | |
| button | No | left | |
| doubleClick | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It states the action ('click') but doesn't describe what happens after clicking (e.g., page navigation, event triggers, error handling). It mentions using a 'ref from snapshot' but doesn't explain how snapshots relate or if this requires prior browser_snapshot calls. For a mutation tool with zero annotation coverage, this is a significant gap in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core action ('Click an element on the page') and specifies methods. Every word earns its place with no redundancy or fluff, making it highly concise and well-structured for quick understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of a browser interaction tool with 4 parameters, no annotations, and no output schema, the description is incomplete. It doesn't cover behavioral aspects like error cases, dependencies on other tools (e.g., browser_snapshot), or what the tool returns. For a mutation tool in a browser context, more detail is needed to ensure safe and correct usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50% (2 of 4 parameters have descriptions: ref and selector). The description adds value by explaining the purpose of ref ('from snapshot') and selector ('CSS selector'), which clarifies beyond the schema's basic descriptions. However, it doesn't cover button or doubleClick parameters, leaving half the parameters without semantic context in either schema or description, resulting in a 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 clearly states the action ('click') and target ('element on the page'), specifying two methods ('ref from snapshot' or 'CSS selector'). It distinguishes from siblings like browser_hover (hovering) and browser_press_key (keyboard input), though not explicitly. However, it doesn't fully differentiate from browser_click_text (which may be for text-specific clicking), leaving some ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. It doesn't mention when to choose ref vs. selector, or when to use browser_click_text instead. The description implies usage for clicking elements but offers no context on prerequisites, such as needing a browser session or snapshot, or exclusions for non-interactive elements.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_click_textA
Click an element by its visible text content. Works on React dropdowns, portals, and overlays that may not appear in snapshots. CSP-safe (no eval). Prefers deepest matching element.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Text to match against element content (first line) | |
| index | No | Which match to click if multiple (0-based, default 0) | |
| exact | No | Require exact match instead of substring (default false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does well by disclosing key behavioral traits: it's CSP-safe (security aspect), prefers deepest matching element (interaction logic), and works on dynamic content. It doesn't cover error handling, performance, or visual feedback, but provides substantial operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely efficient—three sentences that each add distinct value: core functionality, technical context (React/CSP), and behavioral nuance (deepest element). No wasted words, and the most critical information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 3 parameters, 100% schema coverage, and no output schema, the description provides excellent context about when and how it works, especially for dynamic content. It doesn't explain return values or error cases, but given the schema completeness and clear behavioral disclosure, it's nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all three parameters. The description adds no additional parameter semantics beyond what's in the schema, but doesn't need to since the schema is comprehensive. This meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Click an element') and target ('by its visible text content'), distinguishing it from siblings like browser_click (which likely uses selectors) and browser_find (which finds but doesn't click). It explicitly mentions working on React components and portals, which adds specificity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool ('Works on React dropdowns, portals, and overlays that may not appear in snapshots'), implying it's better for dynamic content than snapshot-based alternatives. However, it doesn't explicitly state when NOT to use it or name specific alternatives among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_consoleC
Read console messages (log, warn, error) from the browser
| Name | Required | Description | Default |
|---|---|---|---|
| clear | No | Clear messages after reading |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool reads messages but doesn't describe what happens if no messages exist, whether it returns historical or real-time data, or any limitations (e.g., rate, format). The mention of 'clear' in the schema hints at side effects, but the description doesn't address this.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with no wasted words. It front-loads the core purpose ('Read console messages') and specifies details ('log, warn, error') concisely.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description is incomplete. It doesn't explain what the tool returns (e.g., message list format, timestamps), behavioral aspects like side effects from 'clear', or integration with browser state. For a tool with potential side effects and undefined output, this is inadequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents the single parameter 'clear'. The description adds no parameter-specific information beyond what the schema provides, meeting the baseline for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Read') and resource ('console messages') with specific types mentioned ('log, warn, error'). It distinguishes from siblings like browser_click or browser_navigate by focusing on console output, though it doesn't explicitly differentiate from all browser tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing an active browser session), exclusions, or related tools like browser_evaluate for executing code that might produce console output.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_evaluateA
Execute JavaScript in the page and return the result. Use for DOM queries, reading page state, or any operation not covered by other tools.
| Name | Required | Description | Default |
|---|---|---|---|
| expression | Yes | JavaScript expression or code to evaluate in the page context |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the core behavior (executing JavaScript and returning results) and hints at use cases, but lacks details on permissions, error handling, execution context (e.g., sandboxing), or side effects like potential page modifications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose in the first sentence, followed by usage guidance, with no wasted words. Both sentences earn their place by clarifying intent and application.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 (executing arbitrary JavaScript in a browser context) and lack of annotations or output schema, the description is adequate but incomplete. It covers purpose and usage but omits critical behavioral details like safety, return formats, or error conditions, which are essential for such a powerful tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents the 'expression' parameter fully. The description adds no additional meaning beyond what the schema provides, such as examples or constraints, resulting in 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 clearly states the specific action ('Execute JavaScript in the page') and the resource ('page'), distinguishing it from siblings like browser_click or browser_navigate by focusing on code evaluation rather than UI interaction 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?
It provides clear context for when to use this tool ('for DOM queries, reading page state, or any operation not covered by other tools'), which helps differentiate it from alternatives. However, it does not explicitly state when not to use it or name specific sibling tools as alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_findA
Find elements on the page using natural language (e.g. "login button", "search input"). Returns refs you can use with click/type.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Natural language description of what to find | |
| limit | No | Max matches to return |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses that it returns 'refs' for use with other tools, which is useful behavioral context. However, it doesn't mention potential limitations like what happens if no elements match, timeout behavior, or performance implications of the limit parameter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with zero waste. First sentence states purpose and usage, second sentence explains the output's utility. Every word earns its place, and information is front-loaded appropriately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description does well by explaining the tool's purpose, usage context, and how outputs connect to sibling tools. However, for a tool that interacts with a dynamic browser environment, it could benefit from mentioning error cases or performance considerations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents both parameters. The description adds minimal value by mentioning 'natural language description' for the query parameter, but doesn't provide additional semantics beyond what's in the schema. Baseline 3 is appropriate when schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Find') and resource ('elements on the page'), specifying it uses natural language queries. It distinguishes from siblings like browser_click (which clicks) and browser_text (which extracts text) by focusing on element location for subsequent 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?
It explicitly states when to use this tool ('Find elements on the page using natural language') and provides a clear alternative usage pattern by mentioning that returns are 'refs you can use with click/type', directing to sibling tools like browser_click and browser_type for follow-up actions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_handle_dialogA
Handle JavaScript dialogs (alert, confirm, prompt). Dialogs block page interaction until handled.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Accept or dismiss the dialog | |
| promptText | No | Text to enter for prompt() dialogs |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that dialogs block page interaction, which is a key behavioral trait. However, it lacks details on permissions, error handling, or response format, leaving gaps for a mutation tool (handling dialogs implies interaction).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized with two concise sentences that are front-loaded: the first states the purpose, and the second adds critical behavioral context. Every sentence earns its place without 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 the tool's complexity (handling interactive dialogs), no annotations, and no output schema, the description is somewhat complete but lacks details on return values, error cases, or prerequisites. It covers the blocking behavior but misses other contextual aspects needed for full understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters (action and promptText) with descriptions and enum values. The description does not add meaning beyond what the schema provides, such as explaining when promptText is required or how actions map to dialog types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Handle JavaScript dialogs') and the resources involved ('alert, confirm, prompt'), distinguishing it from sibling tools like browser_click or browser_type. It explicitly mentions the types of dialogs handled, which is more specific than just the tool name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool ('Dialogs block page interaction until handled'), indicating it's necessary when a dialog appears. However, it does not explicitly state when not to use it or name alternatives among sibling tools, such as for non-dialog interactions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_hoverC
Hover over an element to trigger tooltips, dropdown menus, or hover states
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | Element reference from snapshot | |
| selector | No | CSS selector for the element |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It describes the hover action and its effects (triggering UI states), but lacks critical behavioral details such as whether this requires the element to be visible, if it waits for hover effects to complete, error handling, or performance implications. This is a significant gap for a browser interaction tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core action ('hover over an element') and immediately explains the purpose ('to trigger tooltips, dropdown menus, or hover states'). There is no wasted verbiage, and every word contributes to understanding the tool's function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of browser interactions and lack of annotations or output schema, the description is incomplete. It fails to address key contextual aspects like what happens after hovering (e.g., does it return success/failure, wait for effects), error cases (e.g., if element not found), or integration with sibling tools. This leaves gaps for effective agent 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?
Schema description coverage is 100%, with both parameters ('ref' and 'selector') clearly documented in the schema. The description does not add any parameter-specific information beyond what the schema provides, such as usage examples or constraints. Baseline 3 is appropriate as the schema handles the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'hover over' and the resource 'an element', specifying the action and target. It distinguishes from siblings like 'browser_click' by focusing on hover interactions rather than clicks, though it doesn't explicitly name alternatives. The purpose is specific but could be more differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions triggering tooltips, dropdown menus, or hover states, which implies usage for UI interactions, but provides no explicit guidance on when to use this tool versus alternatives like 'browser_click' or 'browser_press_key'. There are no exclusions or prerequisites stated, leaving the agent to infer context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_networkB
Read network requests made by the page. Filter by URL pattern.
| Name | Required | Description | Default |
|---|---|---|---|
| filter | No | URL regex pattern to filter requests | |
| clear | No | Clear requests after reading |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It mentions reading and filtering network requests, but fails to disclose key behavioral traits: whether this requires specific permissions, how requests are stored/retrieved, potential rate limits, or what 'clear requests after reading' entails (e.g., if it affects other tools). The description is minimal and lacks operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise and front-loaded: two short sentences that directly state the purpose and key functionality. Every word earns its place with no redundancy or fluff, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description is incomplete for a tool with potential complexity. It doesn't explain what 'network requests' includes (e.g., types, timing), how results are returned, or error conditions. For a tool that might involve monitoring dynamic page behavior, this leaves significant gaps for an agent to operate effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters (filter as URL regex pattern, clear as boolean to clear after reading). The description adds marginal value by mentioning filtering, but doesn't provide additional semantics beyond what's in the schema (e.g., regex examples or implications of clearing). Baseline 3 is appropriate as the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Read network requests made by the page' specifies the verb (read) and resource (network requests). It distinguishes from siblings like browser_navigate or browser_click by focusing on network monitoring rather than page interaction. However, it doesn't explicitly differentiate from all siblings (e.g., browser_console might also involve network aspects).
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 some implied usage context with 'Filter by URL pattern,' suggesting it's for analyzing network traffic. However, it lacks explicit guidance on when to use this tool versus alternatives (e.g., browser_console for logs or browser_snapshot for page state). No when-not-to-use scenarios or prerequisites are mentioned, leaving gaps for an agent to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_press_keyB
Press a keyboard key or combination (Enter, Escape, Tab, ArrowDown, etc). Supports modifiers like Ctrl+A, Cmd+C.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Key name (e.g. "Enter", "Escape", "Tab", "ArrowDown", "a") | |
| modifiers | No | Modifier keys to hold | |
| ref | No | Element ref to focus before pressing | |
| selector | No | CSS selector to focus before pressing |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions support for key combinations and modifiers, but fails to describe critical behaviors such as whether this action triggers page navigation, form submissions, or other side effects; whether it requires a focused element; or what happens on error. For a browser interaction tool with zero annotation coverage, this leaves significant gaps in understanding its operational 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?
The description is extremely concise—two sentences that directly state the tool's function and its key features (supported keys and modifiers). Every word earns its place with no redundancy or fluff, making it easy to parse and understand quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of a browser interaction tool with 4 parameters, no annotations, and no output schema, the description is incomplete. It lacks information on behavioral outcomes (e.g., what the tool returns, error conditions), prerequisites (e.g., needing an active browser session), and how it integrates with sibling tools. For a tool that could have significant side effects, this leaves too much unspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents all four parameters (key, modifiers, ref, selector). The description adds minimal value beyond the schema by listing example keys (e.g., 'Enter', 'Escape') and mentioning modifiers like 'Ctrl+A', but doesn't provide additional syntax, format details, or usage context for the parameters. This meets the baseline of 3 when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Press a keyboard key or combination') and the resource (keyboard input in a browser context), making the purpose immediately understandable. It distinguishes itself from siblings like browser_click or browser_type by focusing specifically on key presses rather than mouse clicks or text typing, though it doesn't explicitly name these alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for keyboard interactions in a browser, but provides no explicit guidance on when to use this tool versus alternatives like browser_type (for text input) or browser_click (for mouse actions). It mentions supported keys and modifiers, which gives some contextual hint, but lacks clear when/when-not directives or named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_screenshotC
Capture a screenshot of the visible page area
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | png | |
| quality | No | JPEG quality (ignored for PNG) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions capturing the 'visible page area' which adds some context about scope, but fails to address critical aspects like whether this requires specific permissions, if it's a blocking operation, what happens on failure, or what the output format is (e.g., base64 string, file path).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's function without unnecessary words. It's appropriately sized and front-loaded, making it easy to understand at a glance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of a screenshot tool with 2 parameters, no annotations, and no output schema, the description is insufficient. It lacks information about return values, error conditions, dependencies (e.g., requires an open browser page), and behavioral details. The description alone doesn't provide enough context for reliable 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?
Schema description coverage is 50% (only 'quality' has a description), and the description adds no parameter information beyond what's in the schema. It doesn't explain what 'format' controls or provide context for 'quality' values. Since schema coverage is moderate, the baseline is 3, but the description doesn't compensate for the gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ('capture') and resource ('screenshot of the visible page area'), making the purpose immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'browser_snapshot' which might have overlapping functionality, preventing a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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_snapshot' or other browser tools. The description only states what it does, not when it's appropriate or what prerequisites might be needed (e.g., requiring an active browser page).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_scrollB
Scroll the page or an element. Supports pixel offsets, scrolling to elements, and named positions (top/bottom). Works with virtual scroll containers used by social media sites.
| Name | Required | Description | Default |
|---|---|---|---|
| direction | No | down | |
| amount | No | Pixels to scroll | |
| selector | No | CSS selector of scroll container (for virtual scroll) | |
| toElement | No | Ref or CSS selector to scroll into view | |
| position | No | Scroll to top or bottom of page |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It mentions 'works with virtual scroll containers used by social media sites', adding some behavioral context about compatibility. However, it lacks details on permissions needed, error handling, rate limits, or what happens if parameters conflict (e.g., using 'toElement' with 'position'). For a tool with 5 parameters and no annotations, this is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose and efficiently lists key features without redundancy. Every sentence adds value: the first covers the main action and parameter types, the second adds compatibility 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?
Given 5 parameters, 80% schema coverage, no annotations, and no output schema, the description is moderately complete. It covers the tool's purpose and some behavioral context but lacks details on return values, error cases, or parameter interdependencies, which are important for a scrolling tool with multiple options.
Complex tools with many parameters or behaviors need more documentation. Simple 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 80%, providing a baseline of 3. The description adds minimal value beyond the schema: it mentions 'pixel offsets' (implied by 'amount'), 'scrolling to elements' (implied by 'toElement'), and 'named positions' (implied by 'position'), but doesn't clarify interactions between parameters or provide additional syntax details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('scroll') and target ('the page or an element'), distinguishing it from non-scrolling siblings like browser_click or browser_type. However, it doesn't explicitly differentiate from other scrolling-related tools (none exist in the sibling list), so it's not a perfect 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions 'supports pixel offsets, scrolling to elements, and named positions' and 'works with virtual scroll containers', which implies usage contexts but doesn't provide explicit guidance on when to use this tool versus alternatives (e.g., browser_navigate for page changes) or when not to use it. No sibling-specific comparisons are made.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_selectC
Select an option from a dropdown/select element
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | Element reference from snapshot | |
| selector | No | CSS selector for the select element | |
| value | No | Option value to select | |
| label | No | Option label text to select | |
| index | No | Option index to select (0-based) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions the action ('Select') but lacks details on prerequisites (e.g., requires a loaded page), side effects (e.g., might trigger page changes), error handling, or response format. This is inadequate for a tool with potential UI interactions.
Agents need to know what a tool does to the 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, clear sentence with zero waste—it directly states the tool's purpose without unnecessary words. It's appropriately sized and front-loaded, making it easy to understand at a glance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of browser automation (with no annotations and no output schema), the description is insufficient. It doesn't cover behavioral aspects like error cases, dependencies on other tools (e.g., browser_snapshot for 'ref'), or what happens after selection. This leaves significant gaps for an AI agent to use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all 5 parameters. The description adds no additional meaning beyond what's in the schema (e.g., it doesn't explain how parameters like 'ref' or 'selector' interact, or which parameter takes precedence). Baseline 3 is appropriate as the schema handles parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Select') and resource ('an option from a dropdown/select element'), making the purpose immediately understandable. However, it doesn't explicitly differentiate from sibling tools like browser_click or browser_click_text, which might also interact with UI elements, though the specific focus on dropdowns/selects is implied.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. For example, it doesn't clarify if this should be used instead of browser_click for dropdowns, or how it relates to browser_type for text input. The description only states what it does, not when it's appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_snapshotA
Get an accessibility tree snapshot of the page. Returns element refs you can use with click, type, and other tools. Use compact mode (default) for smaller output - only interactive elements.
| Name | Required | Description | Default |
|---|---|---|---|
| selector | No | CSS selector to scope the snapshot | |
| compact | No | When true (default), returns only interactive elements with minimal nesting. Set false for full tree. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that the tool returns 'element refs you can use with click, type, and other tools,' which is useful behavioral context. However, it lacks details on potential side effects (e.g., if it modifies the page), performance implications, or error handling, leaving gaps for a mutation-sensitive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose in the first sentence, followed by usage guidance in the second. Both sentences earn their place by providing essential information without redundancy, making it 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 tool's moderate complexity (2 parameters, no output schema, no annotations), the description is mostly complete. It explains what the tool does, how to use the output, and a key parameter behavior. However, it could benefit from mentioning return format details or error cases, slightly reducing completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents both parameters (selector and compact). The description adds minimal value beyond the schema by mentioning 'compact mode (default) for smaller output - only interactive elements,' which slightly elaborates on the compact parameter's effect. This meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Get an accessibility tree snapshot of the page') and resource ('page'), distinguishing it from siblings like browser_screenshot (visual) or browser_text (text extraction). It explicitly mentions the output format ('element refs') and their purpose ('use with click, type, and other tools'), making the tool's function unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool ('to get an accessibility tree snapshot') and mentions 'compact mode (default) for smaller output - only interactive elements,' which guides usage. However, it does not explicitly state when not to use it or name alternatives (e.g., browser_screenshot for visual snapshots), keeping it from a perfect score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_tabsC
Manage browser tabs: list, create, close, or focus
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Tab action | |
| tabId | No | Tab ID for close/focus | |
| url | No | URL for create action |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It mentions actions but lacks behavioral details: it doesn't specify permissions needed, side effects (e.g., closing tabs is destructive), rate limits, or what 'focus' entails (e.g., brings tab to foreground). For a multi-action tool with no annotation coverage, this leaves significant gaps in understanding how it behaves.
Agents need to know what a tool does to the 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 and front-loaded, stating the core purpose in a single, efficient sentence. Every word earns its place, with no redundant or vague phrasing. It effectively communicates the tool's scope without unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 (multiple actions with different behaviors) and lack of annotations or output schema, the description is incomplete. It doesn't explain return values, error conditions, or behavioral nuances (e.g., what 'list' returns, how 'focus' works). For a tool with no structured support, more context is needed to guide effective 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?
Schema description coverage is 100%, so the schema already documents all parameters (action, tabId, url) with descriptions and enum values. The description adds no additional parameter semantics beyond implying that actions map to parameters (e.g., 'create' uses url, 'close/focus' use tabId). This meets the baseline of 3 when schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs (list, create, close, focus) and resource (browser tabs), making it immediately understandable. It distinguishes from siblings by focusing on tab management rather than navigation, interaction, or content extraction. However, it doesn't explicitly differentiate from all siblings (e.g., browser_navigate also deals with tabs).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, appropriate contexts, or comparisons with sibling tools like browser_navigate (which might handle tab navigation differently). The agent must infer usage solely from the action list without explicit direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_textC
Extract raw text content from the page or a specific element
| Name | Required | Description | Default |
|---|---|---|---|
| selector | No | CSS selector to scope text extraction | |
| maxLength | No | Max text length to return |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden for behavioral disclosure. It mentions extraction but lacks details on permissions needed, rate limits, error handling (e.g., if selector fails), or output format (e.g., plain text vs. structured). For a tool interacting with a browser, this leaves critical gaps in understanding its operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core action ('extract raw text content') and includes optional scoping. There's no wasted verbiage, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of browser interactions and lack of annotations or output schema, the description is incomplete. It doesn't cover behavioral aspects like error conditions, performance implications, or return values, which are crucial for an agent to use this tool effectively in a dynamic environment.
Complex tools with many parameters or behaviors need more documentation. Simple 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 clear parameter descriptions in the schema (e.g., 'CSS selector to scope text extraction'). The description adds minimal value beyond this, as it only implies the 'selector' parameter without explaining syntax or use cases. Baseline 3 is appropriate since the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('extract') and resource ('raw text content') with optional scoping ('from the page or a specific element'), making the purpose understandable. However, it doesn't explicitly differentiate from siblings like browser_snapshot (which might capture visual content) or browser_evaluate (which might execute scripts), leaving room for ambiguity in a crowded toolset.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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. With many sibling tools (e.g., browser_snapshot for screenshots, browser_evaluate for script execution), there's no indication of scenarios where text extraction is preferred or excluded, such as for accessibility vs. visual rendering tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_typeC
Type text into an input element
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | Element reference from snapshot | |
| selector | No | CSS selector for the input | |
| text | Yes | Text to type | |
| clear | No | Clear the field before typing |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It mentions the core action but lacks behavioral details: it doesn't specify whether typing simulates human-like keystrokes or instant insertion, whether it waits for the element to be interactable, what happens if the element isn't an input, error conditions, or performance implications. For a mutation tool with zero annotation coverage, this is inadequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero waste—it directly states the tool's function without unnecessary words. It's appropriately sized and front-loaded, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description is incomplete. It doesn't address behavioral traits (e.g., interaction timing, error handling), usage context relative to siblings, or return values. Given the complexity of browser automation and rich sibling set, more guidance is needed for effective agent 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?
Schema description coverage is 100%, so the schema fully documents all 4 parameters (ref, selector, text, clear). The description adds no parameter-specific information beyond implying 'text' is typed into an 'input element', which is already clear from the schema. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Type text') and target ('into an input element'), providing a specific verb+resource combination. However, it doesn't differentiate from sibling tools like browser_press_key (which might simulate keyboard input) or browser_select (which might handle dropdowns), leaving some ambiguity about when this specific text-typing tool is preferred.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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. With multiple browser interaction siblings (e.g., browser_press_key for keyboard events, browser_click for clicking, browser_select for dropdowns), there's no indication of when text typing is appropriate versus other input methods or what prerequisites exist (e.g., needing a focused input element).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_waitB
Wait for a condition: element to appear, element to disappear, or a fixed delay. Useful for SPAs and dynamic content.
| Name | Required | Description | Default |
|---|---|---|---|
| selector | No | CSS selector to wait for | |
| state | No | Wait until element is visible, hidden, or attached to DOM | visible |
| timeout | No | Max wait time in ms | |
| delay | No | Fixed delay in ms (ignores selector) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. While it mentions the tool is 'useful for SPAs and dynamic content,' it doesn't describe important behavioral aspects like what happens when the timeout is reached (does it fail? return null?), whether it blocks execution, or potential side effects. The description is insufficient for a mutation/interaction tool in a browser context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is perfectly concise with two sentences. The first sentence clearly states the purpose, and the second provides useful context. Every word earns its place with zero waste or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that this is a browser interaction tool with no annotations and no output schema, the description is incomplete. It doesn't explain what the tool returns (success/failure indicator? element handle?), error conditions, or important behavioral constraints. For a tool that interacts with dynamic web content, more context about outcomes and failure modes is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents all 4 parameters. The description mentions 'element to appear, element to disappear, or a fixed delay' which loosely maps to the 'state' and 'delay' parameters, but adds no additional semantic meaning beyond what's in the schema. This meets the baseline of 3 when schema coverage is high.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Wait for a condition: element to appear, element to disappear, or a fixed delay.' It specifies the verb ('wait') and the resources/conditions (element states, delay), but doesn't explicitly differentiate it from sibling tools like browser_find or browser_text that might also involve waiting or element detection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool: 'Useful for SPAs and dynamic content.' This gives practical guidance about scenarios where waiting is necessary. However, it doesn't specify when NOT to use it or mention alternatives among the sibling tools (e.g., when browser_find might be more appropriate).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
18 tool updates
v1.2.0- First observed
browser_click - First observed
browser_click_text - First observed
browser_console - First observed
browser_evaluate - First observed
browser_find - First observed
browser_handle_dialog - First observed
browser_hover - First observed
browser_navigate - First observed
browser_network - First observed
browser_press_key - First observed
browser_screenshot - First observed
browser_scroll - First observed
browser_select - First observed
browser_snapshot - First observed
browser_tabs - First observed
browser_text - First observed
browser_type - First observed
browser_wait
TDQS
Each tool has a clearly distinct purpose with no ambiguity; for example, browser_click targets elements via refs or selectors, browser_click_text uses visible text, browser_find uses natural language, and browser_evaluate handles JavaScript execution, ensuring agents can easily differentiate them. Overlap is minimal, such as browser_click and browser_click_text serving similar functions but with distinct methods, and descriptions clarify boundaries to prevent misselection.
All tool names follow a consistent 'browser_' prefix with snake_case and descriptive verb_noun patterns, such as browser_navigate, browser_screenshot, and browser_wait, making them predictable and readable. There are no deviations in naming conventions, which aids in agent comprehension and reduces confusion.
With 18 tools, the set is well-scoped for browser automation, covering essential actions like navigation, interaction, and monitoring without being excessive. Each tool earns its place by addressing specific needs in the domain, such as browser_network for requests and browser_handle_dialog for dialogs, avoiding redundancy or gaps.
The tool surface provides complete coverage for browser automation, including navigation, interaction (click, type, hover), state monitoring (console, network), and utilities (screenshot, wait). There are no obvious gaps; tools like browser_tabs manage tabs and browser_scroll handle virtual containers, ensuring agents can handle dynamic content and complex workflows without dead ends.
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
Live browser debugging for AI assistants — DOM, console, network via MCP.
Browser MCP for logged-in tasks. Uses your Chrome — credentials stay local. Zero-token replay.
- QuallaaOAuthcom.quallaa
Talk to your public-facing AI from any MCP client — Claude, ChatGPT, Cursor, Cline, Windsurf.
A paid remote MCP for AI agent browser approval MCP, built to return verdicts, receipts, usage logs,
Related MCP Servers
- AlicenseAqualityAmaintenanceOpen-source MCP server that gives AI agents access to 100+ web applications through the user's authenticated browser session. No API keys, no screenshots, no DOM scraping — talks directly to web app internal APIs via a Chrome extension. Supports Slack, Discord, GitHub, Jira, Notion, Reddit, X, and 100+ more services with ~2,000 tools. Works with Claude Code, Cursor, Windsurf, and any MCP client.42933MIT
- AlicenseNot gradedqualityDmaintenanceAn extension-based MCP server that enables AI assistants to control your browser, leveraging existing sessions and login states for automation and content analysis. It provides over 20 tools for semantic tab search, interactive element manipulation, and network monitoring directly within your daily Chrome environment.MIT
- AlicenseBqualityCmaintenanceBrowser MCP server that connects to your existing browser, preserving sessions, passwords, and extensions, enabling AI agents to interact with web pages without bot detection.31121MIT

agentify-desktopofficial
AlicenseNot gradedqualityBmaintenanceMCP server that enables AI tools to control local browser sessions for ChatGPT, Claude, and other AI services, supporting querying, navigation, file uploads, and artifact management.44546Mozilla Public 2.0
Appeared in Searches
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/ofershap/real-browser-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server