chromiumfish_mcp
Page management: list, open, select, close pages/tabs with stable IDs.
Navigation: navigate to URLs, back/forward, reload; reports HTTP status, final URL, title.
Content inspection: capture screenshots (viewport, full page, element), retrieve visible text, list interactive elements (snapshot with ARIA roles, stable references), enumerate frames/iframes with IDs.
Interaction: click elements (by reference, CSS selector, or coordinates), hover, type text (with clear/submit), select dropdowns, set checkboxes/radios, press keys, scroll, and drag-and-drop (with human-like path).
Waiting: wait for element presence/absence, text visibility, URL patterns, page load states, or fixed duration.
Challenge handling: detect and solve browser interstitials or checkbox-style CAPTCHAs.
Dialog handling: pre-arm responses for JavaScript alerts, confirms, prompts.
File operations: upload files to inputs (requires
--upload-dir), list downloads (requires--download-dir).Advanced (requires explicit flags): execute arbitrary JavaScript (
evaluate) and run native autonomous agent (run_task).Security: restrict navigation to allowed hosts, require directories for uploads/downloads, disable eval/native agent by default, isolate browser contexts.
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., "@chromiumfish_mcpgo to example.com and show me what's clickable"
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.
chromiumfish_mcp
chromiumfish_mcp is an independent Model Context Protocol (MCP) server for ChromiumFish. It lets Claude Code, Claude Desktop, Cursor, and other MCP clients drive a ChromiumFish browser through structured tools.
It uses the official ChromiumFish npm package and ships no Chromium source or binaries — on the first tool call that needs a page, the upstream SDK downloads and caches the matching browser build. See docs/USAGE.md for detailed tool usage.
Requirements
Node.js 20 or later.
An OS and architecture supported by ChromiumFish.
Network access for the initial browser download. If no prebuilt asset matches your platform, build ChromiumFish locally and point to it with
--chrome-pathorCHROME_BIN.
Related MCP server: monkeysee
Install
npm install --global github:LowOrbitLab/chromiumfish_mcp
chromiumfish_mcp --persona-seed aliceOr run without installing: npx --yes github:LowOrbitLab/chromiumfish_mcp --persona-seed alice.
Configure
Add the server to your MCP client config:
{
"mcpServers": {
"chromiumfish": {
"command": "chromiumfish_mcp",
"args": ["--persona-seed", "alice"]
}
}
}To run from GitHub instead of a global install, set "command": "npx" and prepend "--yes", "github:LowOrbitLab/chromiumfish_mcp" to args. On Windows, use npx.cmd if your client cannot resolve npx.
Tools
Tool | Purpose |
| Manage pages by stable |
| Navigate and use page history |
| List visible interactive elements with |
| Retrieve page or frame content; |
| Interact with the page |
| Drag onto another element or by a pixel offset, with a human-like path |
| Arm the answer for the next |
| Attach local files to a file input — requires |
| Report what was downloaded and where it landed — requires |
| Click absolute coordinates (for widgets |
| List frames/iframes with stable IDs |
| Detect and clear interstitial / framed challenges; the result says whether one was observed, interacted with, and verified |
| Run arbitrary JavaScript — requires |
| Native ChromiumFish agent — requires |
A JavaScript dialog is answered the instant it opens, because a page left waiting on one freezes and no later call could finish. Unarmed the answer is dismiss — which is what Playwright already did silently — so a click that only raised confirm("Delete?") did not delete, and the action result now says so under dialogs. Call handle_dialog to arm the next answer, then repeat the action. The four navigation tools also report the HTTP status, since a 404 or a 500 loads like any other page.
Every navigation and interaction tool reports the resulting url, title, navigated, and any newPages, so a client only needs a follow-up snapshot when the page actually changed; returnSnapshot: true returns the action result and a fresh snapshot in one call. An action that navigates waits for the new document before reporting, so those fields describe the page it arrived on; one whose navigation is still in flight after ten seconds reports navigationPending: true rather than describing the page being left as though nothing happened, and one whose navigation was cancelled outright — blocked by --allowed-host, an unresolvable host — reports navigationFailed with the browser's own reason instead of waiting out that bound for a page that is never coming. Reference numbers are never reused, so one held across a snapshot fails with an error instead of acting on a different element; snapshot also reports ARIA roles, so role=button[name="Submit"] works in any target field as a re-render-proof alternative. The server ships MCP instructions describing this workflow, reference lifetime, and the challenge sequence.
Snapshot references, frame-aware interaction, waiting, and the cross-origin challenge workflow are covered in docs/USAGE.md.
Command-line options
--persona-seed VALUE Use a stable browser fingerprint persona
--chrome-path PATH Use a local ChromiumFish executable
--browser-version VERSION Select an upstream ChromiumFish build version (rejected with --chrome-path)
--headed Show the browser window
--window-size WIDTHxHEIGHT Set the browser window size
--timezone ZONE Use an IANA time zone, auto, or system (default: auto)
--proxy URL Route browser traffic through a proxy
--allowed-host HOST Allow top-level navigation to a bare host and its subdomains; repeatable
--max-text-chars N Set the hard limit for text and snapshot output
--upload-dir PATH Allow upload_file to read this directory; repeatable
--download-dir PATH Save downloads here; without it they are discarded
--allow-eval Enable arbitrary JavaScript execution
--allow-native-agent Enable the native ChromiumFish browser agentProxy credentials can be embedded in the proxy URL, but are then exposed in the client config. Never commit config files containing proxy passwords, cookies, or API keys.
Security
stdio only — do not expose the Chromium DevTools endpoint to the public internet.
evaluateand the native agent are disabled by default; enable them only in trusted environments.--allowed-host example.comrestricts top-level HTTP/HTTPS navigation (redirects, links, form posts, popups) to a host and its subdomains. Give it a bare host name: matching is on the host alone, so a scheme, path, port, leading dot, or wildcard is rejected at startup rather than quietly matching nothing. Third-party subframes and page assets remain reachable — it is a navigation guard, not a network egress filter. A blocked navigation is reported asnavigationFailedwith reasonnet::ERR_BLOCKED_BY_CLIENT, rather than as a click that appeared to do nothing. Enabling it also turns on request interception, which disables the browser's HTTP cache for the session: expect slower asset-heavy pages, and note that a browser re-fetching everything on a repeat visit is itself a signal to sites that profile behavior.upload_filesends host files to whatever origin the page posts to, so it is unregistered until--upload-dirnames at least one directory, and every path must resolve inside one. Both the path and the roots are resolved through symlinks first, so a link planted inside a root cannot reach outside it. Scope the roots to the files a task actually needs — a page can influence which file the model picks.Downloads are written only when
--download-dirnames a directory; without it the transfer still runs (so the page's own flow is unchanged) but nothing is kept, and the action result saysdiscarded. The file name comes from the remote server'sContent-Disposition, so it is reduced to a bare base name and the resolved path is checked against the root before anything is written.A page can raise
confirm()to guard a destructive action. Unarmed dialogs are dismissed, so that guard holds by default;handle_dialogwithaccept: truedeliberately answers the next one. Keep human confirmation in front of it for anything irreversible.Clients can click and type with real side effects. Keep human confirmation for purchases, publishing, deletion, and permission changes.
solve_challengereturnsok: truewhenever the page is not blocked, including on pages that were never challenged. ReadchallengeObserved,interactionPerformed, andclearanceVerifiedbefore recording or reporting that a challenge was cleared —okalone will overstate what happened.Each process runs an independent browser context; this is not a shared multi-tenant service.
Development
npm ci
npm test
node dist/index.js --helpThe suite uses an in-memory MCP transport to verify tool discovery, dangerous-tool opt-in, and results. It does not download or launch a browser.
License
MIT. ChromiumFish code and trademarks belong to their respective contributors; see NOTICE for attribution. This is an independent wrapper, not an official ChromiumFish release.
Available Tools
24 toolsclickA
Click an element reference returned by snapshot or a CSS selector. Use frameId with selectors inside a frame. Returns the resulting url, title, navigated, and any newPages.
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes | ||
| frameId | No | ||
| returnSnapshot | No | Also return a fresh snapshot of the resulting page; renumbers element refs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the return values (url, title, navigated, newPages), adding context beyond the annotation (destructiveHint=false). It does not contradict 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 with two sentences, no redundancy, and front-loads the core purpose. 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?
For a tool with 3 parameters and no output schema, the description covers purpose, usage, and return values adequately. However, it could mention that 'target' is required and the effect of 'returnSnapshot' more explicitly.
Complex tools with many parameters or behaviors need more documentation. 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 schema description coverage of only 33%, the description compensates by explaining the meaning of 'target' (element ref or CSS selector) and 'frameId' (for frames). This adds value 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 action ('Click') and the resource ('an element reference returned by snapshot or a CSS selector'). It distinguishes from sibling tools like hover, click_at, and drag by specifying the type of target.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 usage guidance for frameId ('Use frameId with selectors inside a frame'), but does not explicitly differentiate when to use this tool versus alternatives like click_at or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
click_atA
Click page coordinates in CSS pixels from the viewport's top-left corner. Useful for controls inside cross-origin iframes that snapshot cannot enumerate.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | ||
| y | Yes | ||
| returnSnapshot | No | Also return a fresh snapshot of the resulting page; renumbers element refs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint=false annotation, the description discloses the coordinate-based clicking behavior and the effect of returnSnapshot returning a fresh snapshot with renumbered refs. 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 concise sentences, front-loaded with the core action and immediately followed by a specific use case. 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?
The tool is simple; the description covers the key use case and parameter effect. No output schema, but returnSnapshot hints at output. Could mention potential navigation or page changes from clicking, yet still sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool description adds no meaning to x and y beyond what the schema already indicates (coordinates). With only 33% schema coverage, the description should compensate but does not. returnSnapshot is already documented in 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 verb (click), resource (page coordinates), and distinguishes from sibling tools by specifying it clicks at coordinates rather than on elements. The use case for cross-origin iframes further clarifies purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Describes when to use (for controls in cross-origin iframes not enumerable by snapshot), but does not explicitly mention when not to use or list alternatives. Still provides clear context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
close_pageADestructive
Close the specified page, or the current page when pageId is omitted.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description aligns with destructiveHint annotation, but adds no details about consequences (e.g., unsaved data, window state) beyond what annotations already imply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded, no filler words; 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?
Simple tool but missing context about page lifecycle (e.g., unloading, window impact) and relationship with sibling tools like navigate_back or snapshots.
Complex tools with many parameters or behaviors need more documentation. 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 0% schema description coverage, description should compensate but only mentions pageId implicitly; no format, source, or behavior for invalid IDs provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states action (close), resource (page), and behavior difference when pageId is omitted, distinguishing it from sibling tools like open_page and select_page.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 through parameter omission but lacks explicit when-to-use or when-not-to-use guidance relative to other page/navigation tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dragA
Press on an element, move with a human-like curved path, and release. Give exactly one destination: toTarget to drop onto another element, or dx/dy to drag by a pixel offset (what slider controls need). Both ends must be on screen at once. Returns the from and to points actually used.
| Name | Required | Description | Default |
|---|---|---|---|
| dx | No | ||
| dy | No | ||
| target | Yes | ||
| frameId | No | ||
| toTarget | No | ||
| returnSnapshot | No | Also return a fresh snapshot of the resulting page; renumbers element refs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare destructiveHint=false, so the description carries the transparency burden. It discloses the human-like curved path, the requirement that both ends be on screen, and the return of from/to points. However, it does not describe error behavior or prerequisites like element interactability.
Agents need to know what a tool does to the 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, each earning its place: first states the action, second explains parameter choices, third adds constraints and output. No extraneous words; front-loaded with the core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 6 parameters, 1 required, low schema coverage, and no output schema, the description provides adequate context for most use cases. It covers two drag modes, preconditions, and output, though it omits behavior for edge cases or details about frameId.
Complex tools with many parameters or behaviors need more documentation. Simple 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 17% (only returnSnapshot has a description). The tool description explains target (element to press), toTarget (drop target), and dx/dy (pixel offset), adding value. But frameId is left ambiguous, and the explanation for dx/dy is brief, leaving some parameters underspecified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool performs a drag action: pressing, moving with a human-like curved path, and releasing. It distinguishes two drag modes (toTarget for elements, dx/dy for offsets), which differentiates it from siblings like click or hover.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly instructs to give exactly one destination (toTarget or dx/dy), which guides correct parameter choice. It also specifies that both ends must be on screen, providing a precondition, but does not mention when not to use the tool or alternatives beyond the constraint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_challengeARead-only
Detect common browser interstitials and embedded cross-origin challenge controls. Returns present, kind, widgetState, tokenPresent, the widget box, and related frames.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Consistent with readOnlyHint annotation; describes output fields (present, kind, widgetState, etc.) which adds value beyond the annotation. No hidden side effects mentioned, but for a read-only detection tool this is acceptable.
Agents need to know what a tool does to the 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 verb 'Detect' and resource. Every word adds value; 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?
Lists return fields comprehensively, compensating for lack of output schema. However, for a tool in a set with 'solve_challenge', missing context on how it fits the workflow reduces completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so the description cannot add value beyond the schema. Baseline 4 is appropriate as the tool is parameterless.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 detects common browser interstitials and challenge controls, listing return fields. However, it does not explicitly differentiate from the sibling 'solve_challenge' tool, which is the next logical step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives like wait_for or snapshot. The context implies use before solving challenges, but this is not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_textCRead-only
Read visible text from the first matching region in the main document or a frame, bounded by maxChars and --max-text-chars.
| Name | Required | Description | Default |
|---|---|---|---|
| frameId | No | ||
| maxChars | No | ||
| selector | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=true, and description adds 'visible text' and region context, but lacks details on blocking, error handling, or multiple matches.
Agents need to know what a tool does to the 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, but includes extraneous '--max-text-chars' which undermines conciseness; not optimally 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?
Missing explanation of selector and frameId, no description of return value, and no indication of how 'first matching region' is determined.
Complex tools with many parameters or behaviors need more documentation. 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 0% schema description coverage, the description should clarify parameters; it only mentions maxChars but not selector or frameId, leaving their purpose unclear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The tool clearly reads visible text from a region, but the reference to '--max-text-chars' is confusing and not explained.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 snapshot or list_frames, or prerequisites such as needing a selector.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hoverAIdempotent
Move the mouse over an element reference or CSS selector without clicking.
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes | ||
| frameId | No | ||
| returnSnapshot | No | Also return a fresh snapshot of the resulting page; renumbers element refs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds the nuance 'without clicking', which aligns with annotations (idempotentHint=true, destructiveHint=false). However, it does not discuss potential side effects like triggering hover events or requirements for element visibility. Since annotations cover idempotency and destructiveness, the description provides minimal additional value.
Agents need to know what a tool does to the 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 key verb and resource, containing no redundant or extraneous information. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 3 parameters and no output schema, the description is minimal. It does not explain what happens after hovering (e.g., trigger dropdowns, wait for events) or how to handle frameId. With annotations present, it is adequate but leaves room for more detail about the hover behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33%, meaning most parameters lack descriptions in the schema. The tool description does not describe any parameters (target, frameId, returnSnapshot) beyond loosely implying 'target' is a CSS selector or element reference. This fails to compensate for the low schema coverage, leaving agents underspecified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ('Move the mouse over') and the resource ('an element reference or CSS selector'), and distinguishes it from clicking by explicitly noting 'without clicking'. This differentiates it from sibling tools like 'click' and 'click_at'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 hovering without clicking, but does not explicitly state when to prefer this tool over alternatives (e.g., 'click', 'hover' triggers event listeners). No when-not or context guidance is provided, which is a minor gap given many sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_framesARead-only
List frames and iframes with stable frameId values, parent relationships, URLs, and names. Request bounding boxes only when coordinate interaction needs them.
| Name | Required | Description | Default |
|---|---|---|---|
| includeBox | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation readOnlyHint=true already indicates a read-only operation. The description adds that it returns stable frameId values and parent relationships, which is useful context. No additional behavioral traits (e.g., rate limits, performance) are disclosed, but the annotation reduces the burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences front-loaded with the primary purpose and then usage guidance. No redundant 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 low complexity (1 optional param, no output schema), the description adequately covers the function and the parameter use. It could optionally mention the return format (list of frames), but it's sufficiently complete for an agent to understand.
Complex tools with many parameters or behaviors need more documentation. 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 0% description coverage, so the description must compensate. It explains that bounding boxes should be requested only when needed, directly adding meaning to the 'includeBox' parameter beyond its name and default value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists frames/iframes with specific fields (frameId, parent relationships, URLs, names). It distinguishes itself from sibling tools which are primarily interaction tools like click, hover, 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?
The description provides conditional guidance on requesting bounding boxes via the includeBox parameter, but lacks explicit guidance on when to use this tool versus alternatives. However, siblings are mostly action-oriented, so the context is implicitly clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_pagesARead-only
Report browser running state and list open pages without starting the browser.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true. The description adds that the tool does not start the browser, which is useful context 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?
Single sentence, 13 words. Purpose is 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?
For a parameterless tool with no output schema, the description adequately states what it does. Could mention output format, but the key behavior is covered.
Complex tools with many parameters or behaviors need more documentation. 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, so schema coverage is 100%. With zero parameters, baseline is 4; description adds no param info, but none 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 reports browser running state and lists open pages, distinguishing from siblings like open_page, select_page, close_page. The qualifier 'without starting the browser' 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?
No explicit when-to-use or alternatives guidance. The statement about not starting the browser implies safety, but lacks scenarios where this tool is preferable over others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
open_pageA
Create and select a new page, optionally opening an HTTP/HTTPS URL.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate non-destructive (destructiveHint: false). Description adds 'Create and select' behavior but no further details on effects like new tab behavior or error states.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single concise sentence with no redundant information, perfectly 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 with one optional parameter and no output schema, description covers core functionality. Could mention return values or failure modes, but not critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but description mentions 'optionally opening an HTTP/HTTPS URL', adding meaning beyond the schema's format definition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Create and select' and resource 'a new page', with optional URL opening. It distinguishes from siblings like 'navigate' (current page) and 'select_page' (existing page).
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 (creating new pages) but does not explicitly contrast with alternatives like 'navigate' or 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.
press_keyA
Press a key in the current page, such as Enter, Escape, ArrowDown, or Control+A.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | ||
| returnSnapshot | No | Also return a fresh snapshot of the resulting page; renumbers element refs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate destructiveHint=false, and the description adds behavioral detail about the returnSnapshot parameter (returns fresh snapshot, renumbers element refs). However, it lacks disclosure of behavior for invalid keys, page load timing, or default return value.
Agents need to know what a tool does to the 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 examples, no redundancy or fluff. It is front-loaded 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?
For a simple tool with 2 parameters and no output schema, the description covers basic purpose and one parameter's effect. Missing information includes error handling, page readiness guarantees, and default return value when returnSnapshot is false.
Complex tools with many parameters or behaviors need more documentation. Simple 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 50%; only returnSnapshot has a description. The description provides example keys (Enter, Escape, etc.) which adds partial meaning, but does not specify valid formats or constraints for the key parameter beyond the schema's maxLength/minLength.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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), the resource (current page), and provides specific examples (Enter, Escape, ArrowDown, Control+A). It effectively distinguishes from sibling tools like click or type_text.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for pressing keys but does not explicitly state when to use this tool over alternatives like type_text or click. No exclusions or alternative recommendations are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reloadA
Reload the current page and wait for DOMContentLoaded.
| Name | Required | Description | Default |
|---|---|---|---|
| returnSnapshot | No | Also return a fresh snapshot of the resulting page; renumbers element refs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=false, so the description's disclosure of waiting for DOMContentLoaded adds some behavioral context. However, it does not mention other behaviors like potential loss of unsaved form data or interaction with the browser's cache.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-formed sentence that conveys the essential purpose and behavior with no unnecessary words. It is front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity (one optional parameter, no output schema, annotations present), the description is largely complete. It covers the primary action and a notable wait condition. Minor omission: no mention of side effects like losing page state.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers 100% of the single parameter (returnSnapshot) with an adequate description. The tool description adds no further semantic value 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 (reload), the resource (current page), and a specific condition (wait for DOMContentLoaded). This distinguishes it from siblings like navigate, which load a new URL, and navigate_back/forward, which navigate history.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use reload over alternatives such as navigate, snapshot, or wait_for. It does not mention prerequisites, scenarios where reload is appropriate, or cases where it should be avoided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scrollB
Scroll the current page; positive deltaY scrolls down and negative deltaY scrolls up.
| Name | Required | Description | Default |
|---|---|---|---|
| deltaX | No | ||
| deltaY | Yes | ||
| returnSnapshot | No | Also return a fresh snapshot of the resulting page; renumbers element refs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only include destructiveHint: false. The description adds direction semantics (positive down, negative up) but does not disclose behavior like scroll amount limits, viewport vs element scrolling, or side effects on element references (only implied in snapshot parameter). Minimal 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?
Single sentence, front-loaded with verb and resource, no waste. Efficient and clear for the information provided.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 3 parameters and no output schema, the description is incomplete. It omits deltaX, returnSnapshot, and any behavioral details about scrolling beyond direction. An agent would lack critical 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?
The description adds value for deltaY by explaining direction, but does not explain deltaX or the returnSnapshot parameter. Schema coverage is low (33%), and the description could compensate more. Baseline 3 due to partial addition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('scroll') and resource ('current page') and explains the direction based on deltaY sign. However, it omits the horizontal scroll capability via deltaX, which could lead agents to overlook horizontal scrolling. It does not contrast with sibling tools, but siblings are sufficiently different.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool vs alternatives (e.g., clicking or typing). There is no mention of prerequisites, when not to scroll, or how it compares to other interaction tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
select_optionAIdempotent
Select one or more native dropdown options by value or label.
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes | ||
| values | Yes | ||
| frameId | No | ||
| matchBy | No | value | |
| returnSnapshot | No | Also return a fresh snapshot of the resulting page; renumbers element refs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotent and non-destructive. The description adds the important constraint that it works on 'native dropdown options', preventing misuse on custom elements. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence, front-loading the key action and target. 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?
With 5 parameters and no output schema, the description is too terse. It omits details on how to target elements, what values represent, and the effect of returnSnapshot, leaving significant gaps for an 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?
Only 20% of parameters have schema descriptions. The description adds meaning only for matchBy (value/label). Target, values, and frameId remain unexplained, forcing the agent to infer from names and 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 action (select), target (native dropdown options), and method (by value or label). It distinguishes from sibling tools like click or type_text.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as click or set_checked. No exclusions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
select_pageAIdempotent
Select the current page by a pageId returned from list_pages.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true and destructiveHint=false. The description adds no further behavioral details but does not contradict 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 sentence that conveys all necessary information without redundancy or extraneous detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and clear annotations, the description is sufficient. It explains the origin of the pageId, making it complete enough 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?
The schema has 0% description coverage for the pageId parameter. The description adds context by stating the pageId comes from list_pages, providing some semantic value beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Select the current page'), the required input ('pageId'), and its source ('returned from list_pages'). It distinguishes from siblings that create or navigate pages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description indicates when to use the tool by specifying the prerequisite call to list_pages. It does not explicitly state when not to use it, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_checkedAIdempotent
Set a checkbox state, or select a radio element with checked=true. Radios cannot be unchecked directly.
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes | ||
| checked | Yes | ||
| frameId | No | ||
| returnSnapshot | No | Also return a fresh snapshot of the resulting page; renumbers element refs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds key behavioral detail: radios cannot be unchecked directly, beyond the idempotent and non-destructive annotations. 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 efficient sentences with no fluff; directly states purpose and special case for radios.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 gives core behavior but omits parameter contexts for target/frameId. With no output schema, more detail on return values would help. Adequate for 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?
Only 25% schema coverage; description does not explain 'target' or 'frameId' parameters, though it clarifies the role of 'checked'. Schema covers 'returnSnapshot'.
Input schemas describe structure but not intent. Descriptions should explain 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 sets checkbox state or selects radio element, with specific behavior for each. Distinguishes from siblings like click or select_option.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description makes clear the tool is for checkboxes and radios, but does not explicitly contrast with alternatives or mention when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
snapshotARead-only
List visible interactive elements in the main document or a frame, with bounded output and temporary references.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | ||
| frameId | No | ||
| maxChars | No | ||
| maxElements | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=true, confirming safety. The description adds value by disclosing bounded output and temporary references, which are not in annotations. 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?
Single sentence, front-loaded with the core action. No wasted words, but could be expanded slightly to clarify parameter usage without sacrificing brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having 4 parameters, no output schema, and multiple siblings, the description omits return value details, error conditions, and parameter semantics, making it incomplete for practical 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?
With 0% schema description coverage, the description should compensate but only vaguely references bounded output (relating to maxChars and maxElements). The parameters scope and frameId remain unexplained, providing little added value over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists visible interactive elements, specifies scope (main document or frame), and mentions bounded output and temporary references, effectively distinguishing it from sibling tools like get_text or take_screenshot.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use before interacting with elements, but lacks explicit guidance on when to use snapshot versus alternatives like list_frames or get_text, and provides no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
solve_challengeA
Use human-like coordinate clicks on a standard checkbox inside a cross-origin challenge frame, then poll until clearance is confirmed by a response token, widget success state, or interstitial exit. Does not require a vision model. ok means the page is not blocked and you may continue - it does not mean a challenge was defeated. Report what happened from challengeObserved, interactionPerformed, and clearanceVerified: on a page that was never challenged all three are false while ok is true.
| Name | Required | Description | Default |
|---|---|---|---|
| maxClicks | No | ||
| timeoutMs | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only include destructiveHint: false. The description adds behavioral context: it clicks a checkbox, polls for clearance, and explains the response flags (challengeObserved, interactionPerformed, clearanceVerified). This adds value 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 two sentences, front-loading the main action. It is concise but loses some points for including a somewhat lengthy explanation of the response fields in the same sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is complex, with no output schema. The description explains the response fields (challengeObserved, interactionPerformed, clearanceVerified) but does not give a complete picture of the return structure, edge cases (e.g., timeout), or state changes. Some 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?
With 0% schema description coverage, the description must compensate by explaining the parameters 'maxClicks' and 'timeoutMs'. It does not mention them at all, leaving their semantics entirely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: using human-like coordinate clicks on a standard checkbox inside a cross-origin challenge frame and polling for clearance. It specifies the action (solve) and resource (challenge), and distinguishes itself from generic click tools and the sibling 'find_challenge'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 that the tool does not require a vision model and clarifies the meaning of the 'ok' field in the response. However, it does not explicitly state when not to use this tool versus alternatives like 'find_challenge', leaving some ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
take_screenshotARead-only
Capture the viewport, the full page, or a single element as a PNG image. Pass target to crop to one element, which costs far fewer tokens than a full viewport image.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | ||
| frameId | No | ||
| fullPage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, which is consistent with the screenshot operation. The description adds behavioral context by mentioning token cost differences for element vs full viewport, though it does not detail other traits like file format or size 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?
Two concise sentences front-load the primary action and immediately provide a key usage tip. Every word adds value with no extraneous content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description explains purpose and one parameter but omits details on 'frameId' and 'fullPage' behavior. With no output schema, it fails to describe the return format (e.g., base64 data). Cost optimization is noted, but overall scope is incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must explain all parameters. It only clarifies the 'target' parameter as a CSS selector for an element. 'frameId' and 'fullPage' are not explained, leaving gaps in understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool captures the viewport, full page, or a single element as a PNG image. It distinguishes between modes and highlights the token cost advantage of targeting an element, which differentiates it from siblings like snapshot.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 advises using the target parameter to crop to an element for cost efficiency, contrasting it with a full viewport image. It does not explicitly cover when to use viewport vs full-page or alternatives among siblings, but provides useful context for decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
type_textA
Focus an element and enter text, optionally clearing its current value and pressing Enter afterward. Use frameId with selectors inside a frame.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| clear | No | ||
| submit | No | ||
| target | Yes | ||
| frameId | No | ||
| returnSnapshot | No | Also return a fresh snapshot of the resulting page; renumbers element refs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses focusing, entering text, optional clearing and pressing Enter. Annotations indicate non-destructive (destructiveHint: false), and the description adds behavioral details beyond that, though it does not cover all edge cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences, front-loaded with the core purpose, and provides specific guidance in the second sentence without any 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?
With 6 parameters and no output schema, the description covers main functionality but leaves gaps (e.g., target format, text encoding, behavior when element not found). It is adequate but lacks completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is low (17%), but the description adds context for frameId and implicitly for text, clear, and submit. However, it does not explain the target format or returnSnapshot behavior beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool focuses an element and enters text, with optional clearing and pressing Enter. This specific verb+resource combination distinguishes it from sibling tools like click, hover, and press_key.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides usage guidance for frameId with selectors inside a frame, but does not explicitly contrast with alternatives 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.
wait_forBRead-only
Wait for one typed condition: element, text, URL glob, page load state, or duration.
| Name | Required | Description | Default |
|---|---|---|---|
| condition | No | ||
| timeoutMs | No | ||
| returnSnapshot | No | Also return a fresh snapshot of the resulting page; renumbers element refs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already indicates no mutation, but the description adds no extra behavioral details such as polling mechanics, timeout behavior, or side effects 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?
Single sentence that is front-loaded with the core purpose, no unnecessary words or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a moderate-complexity tool with no output schema, the description provides a high-level summary but lacks details on error handling, return behavior, and condition-specific nuances. It is adequate but not comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is low (33%), but the description lists the condition types, providing some context. However, it does not explain the structure of the condition object or the meaning of parameters like frameId or state beyond what the schema says.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as a wait operation with specific condition types (element, text, URL, load, duration). It is specific but does not differentiate from potential sibling wait tools, though no such sibling exists.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like polling or retrying. No exclusions or context for when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
24 tool updates
v0.4.0- First observed
click - First observed
click_at - First observed
close_page - First observed
drag - First observed
find_challenge - First observed
get_text - First observed
hover - First observed
list_frames - First observed
list_pages - First observed
navigate - First observed
navigate_back - First observed
navigate_forward - First observed
open_page - First observed
press_key - First observed
reload - First observed
scroll - First observed
select_option - First observed
select_page - First observed
set_checked - First observed
snapshot - First observed
solve_challenge - First observed
take_screenshot - First observed
type_text - First observed
wait_for
TDQS
Each tool has a clearly distinct purpose, from basic interactions like click and hover to specialized actions like solve_challenge and drag. The slight overlap between click and click_at is well-documented and justified by use cases.
Tool names mostly follow a consistent verb_noun pattern (e.g., open_page, type_text), though a few single-word verbs (click, hover, scroll) deviate slightly. The pattern is predictable and readable.
24 tools is a comprehensive set for browser automation, covering navigation, input, waiting, frames, screenshots, and challenge handling. It is slightly above the ideal range but each tool serves a distinct purpose.
The toolset covers most common browser interactions including all major navigation and input actions, frame handling, and even challenge detection/solving. Minor gaps like file upload or clipboard operations exist but are not essential for core automation.
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
Hosted real Google Chrome MCP with per-user persistent state. Navigate, click, type, screenshot.
Stealth web browser for agents: search, fetch, click, download and type in persistent MCP sessions.
MCP server to assist with JxBrowser development.
Access Kernel's cloud-based browsers and app actions via MCP (remote HTTP + OAuth).
Related MCP Servers
- FlicenseCqualityDmaintenanceEnables browser automation, including navigation, form filling, login with CAPTCHA handling, and element manipulation, using a Chrome-based MCP server.364-
- AlicenseNot gradedqualityBmaintenanceEnables MCP clients to drive a real, logged-in Chrome browser for web automation tasks like navigation, clicking, typing, and screenshotting.101MIT
- AlicenseNot gradedqualityCmaintenanceEnables browser automation over MCP using a real Chrome browser with existing profile, supporting real tabs, downloads, cookies, and RPA workflows.104MIT
- FlicenseNot gradedqualityCmaintenanceEnables MCP clients to control a real local browser window for web automation tasks such as clicking, typing, scrolling, and taking screenshots.51-
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/LowOrbitLab/chromiumfish_mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server