Browser-MCP Navigator
Fast-Browser-MCP (Fast-Browser-MCP Navigator)
Ultra-fast browser automation server over Chrome DevTools Protocol (CDP), exposed as a Model Context Protocol (MCP) server.
No screenshots. No Playwright relay. Direct CDP WebSocket — 20–50× fewer tokens, ~10ms per action.
Note: The core Python package is named
fast_browser_mcpinternally.
What it does
Controls a real Chrome browser from any AI agent that supports MCP. The agent receives a compact accessibility-tree snapshot with @eN references after every action — no pixels, no heavy HTML blobs.
Agent ──MCP──► Fast-Browser-MCP Server ──CDP──► ChromeRelated MCP server: Browser Jet Pilot
Quick Start — Docker (Recommended)
git clone https://github.com/ingjohnfigueroablanco/Fast-browser-MCP.git
cd Fast-browser-MCP
cp .env.example .env # optionally set MCP_API_KEY
docker compose up -dServer ready at http://localhost:3067/sse.
Quick Start — Local (No Docker)
git clone https://github.com/ingjohnfigueroablanco/Fast-browser-MCP.git
cd Fast-browser-MCP
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -e .
python -m fast_browser_mcp # stdio modeConnecting from Claude Code
Option A — Local subprocess / stdio
Add to your project's .mcp.json:
{
"mcpServers": {
"fast-browser-mcp": {
"command": "python",
"args": ["-m", "fast_browser_mcp"]
}
}
}Option B — Docker / SSE
{
"mcpServers": {
"fast-browser-mcp": {
"type": "sse",
"url": "http://localhost:3067/sse",
"headers": { "X-API-Key": "your-key" }
}
}
}Connecting from other agents / frameworks
Python agent (mcp SDK)
from mcp import ClientSession
from mcp.client.sse import sse_client
async with sse_client("http://localhost:3067/sse",
headers={"X-API-Key": "your-key"}) as (read, write):
async with ClientSession(read, write) as session:
await session.initialize()
result = await session.call_tool("navigate", {"url": "https://example.com"})
print(result.content[0].text)Testing Localhost Apps (Docker)
The browser runs inside the container. localhost inside Docker ≠ your dev machine.
Approach | How |
Docker Desktop | Use |
ngrok |
|
Local mode | (stdio) Chrome runs on your machine — |
Available Tools
Tool | Description |
| Launch / reconnect Chrome |
| Close Chrome |
| Go to URL, wait for load / networkidle |
| Accessibility tree as compact text with |
| Human-like click by coordinates |
|
|
| Clear + type text in an input |
| Key press (Enter, Tab, Escape, ArrowDown…) |
| Select native |
| Mouse hover (menus, tooltips) |
| React/Vue/Angular-safe input setter via native JS |
| Scroll page or element into view |
| Run any JavaScript — drag, events, async fetch, bulk loops |
| Bulk operations — run a JS snippet once per item |
| Raw CDP protocol — file upload, device emulation, network intercept |
| innerText of element or full page |
| Wait until text appears on page |
| JS console logs |
| Network requests / responses |
| PNG base64 (escape hatch) |
| Current URL + title |
Performance & Bulk Operations
The bottleneck is LLM round-trips, not the browser
Each tool call costs one full LLM inference + HTTP round-trip. The browser executes CDP in ~10ms.
Pattern | Tool calls | Typical wall time |
20 × (click + fill + click) | 60 | ~10 min |
1 × js_eval_loop with 20 items | 1 | ~15 sec |
Rule: for N > 5 repetitions, use js_eval_loop
# GOOD — 1 tool call for 20 users
js_eval_loop(
items=users,
script="""
document.querySelector('.agregar').click();
await new Promise(r => setTimeout(r, 400));
// ... fill logic ...
document.querySelector('.crear').click();
return item.user;
""",
delay_ms=300,
)Environment Variables
Variable | Default | Description |
|
|
|
|
| SSE bind address |
|
| SSE port |
| (empty) | API key header; empty = no auth |
| auto | Explicit path to chrome.exe |
| (empty) | Extra Chrome flags |
|
|
|
|
|
|
Architecture
mcp/ FastMCP server + tool definitions
browser/ BrowserManager — lifecycle, navigate, snapshot, waits
snapshot/ AX tree → compact text with @eN refs (no screenshots)
actions/ mouse, keyboard, forms (ref → coordinates)
cdp/ Raw CDP WebSocket connection + event buffers
chrome/ Chrome launcher, port scan, reattachWhy it's faster than Playwright:
No Node.js relay — Python speaks CDP directly.
Chrome stays alive between calls (daemon) — 0 ms startup per tool call.
Snapshot = compact AX text, not full YAML or heavy screenshots.
@eNrefs = stablebackendNodeId— no DOM re-query per action.
Available Tools
21 toolsbrowser_startB
Lanza (o reconecta) Chrome con CDP. Debe llamarse antes que las demas tools.
| Name | Required | Description | Default |
|---|---|---|---|
| headless | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility for behavioral disclosure. It mentions launching or reconnecting Chrome but does not explain implications of reconnection, side effects, authentication needs, or what happens with the headless parameter. The description lacks depth for safe agent usage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, consisting of two short sentences. Every sentence adds value: the first states the tool's action, the second gives an essential usage hint. No unnecessary words, 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?
Given the tool's simplicity (one optional parameter, no annotations) and existence of an output schema, the description is minimal but covers the core action and ordering requirement. However, it fails to explain the headless parameter or the reconnection behavior, leaving gaps for an agent. It is adequate but not 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 0%, and the description does not mention the 'headless' parameter at all. It adds no meaning beyond the schema's type definition. The agent receives no guidance on how or why to set headless mode, which is critical for a start tool.
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 launches or reconnects Chrome with CDP, specifying the verb 'lanza' (launch) and resource 'Chrome con CDP'. It distinguishes from sibling tools by indicating it must be called before any others, which implies it is the initialization 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?
The description explicitly states 'Debe llamarse antes que las demas tools' (must be called before the other tools), providing clear context for when to use this tool. However, it does not mention when not to use it or provide alternatives, but the context of sibling tools makes the purpose evident.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_stopB
Cierra la conexion CDP. kill=True ademas termina el proceso Chrome.
| Name | Required | Description | Default |
|---|---|---|---|
| kill | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description lacks behavioral details beyond the basic action. No warnings about consequences of terminating the connection or process, especially given no annotations are present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that efficiently conveys the tool's purpose and parameter behavior with 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 simple stop tool, the description is mostly adequate but lacks usage context and potential side effects. The output schema is not shown but present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The parameter 'kill' has no schema description (0% coverage), but the description adds meaning by explaining its effect. This compensates for the missing schema detail.
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 closes a CDP connection and optionally terminates Chrome, which is a specific verb+resource. It distinguishes from sibling tools like browser_start.
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 cdp_call or browser_start. There is no mention of prerequisites 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.
cdp_callA
Llama cualquier metodo del protocolo CDP directamente.
method — dominio.metodo, ej: "Input.dispatchKeyEvent", "DOM.querySelector" params — JSON string con los parametros, ej: '{"type":"keyDown","key":"Enter"}' use_session— True (default) para el contexto de la pagina actual; False para nivel browser
Ejemplos de acciones que no tienen tool dedicada: Drag & drop real: cdp_call("Input.dispatchDragEvent", '{"type":"dragEnter",...}') Subir archivo: cdp_call("DOM.setFileInputFiles", '{"files":["/ruta/archivo.pdf"]}') Emular dispositivo: cdp_call("Emulation.setDeviceMetricsOverride", '{"width":375,...}') Interceptar red: cdp_call("Fetch.enable", '{"patterns":[{"urlPattern":"*"}]}') Geolocation: cdp_call("Emulation.setGeolocationOverride", '{"latitude":4.7,...}')
| Name | Required | Description | Default |
|---|---|---|---|
| method | Yes | ||
| params | No | {} | |
| use_session | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 explains the session context (use_session parameter) but does not disclose potential risks like browser crashes or permission requirements. The examples imply safe usage but lack explicit warnings about destructive behavior.
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 relatively concise, front-loading the purpose and then explaining parameters and examples. Every sentence adds value, but it could be slightly more condensed without losing clarity.
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, no annotations, and an output schema exists (return values not required), the description covers all necessary usage information: parameter meanings, when to use vs siblings, and concrete examples. It is complete for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by explaining all three parameters: method (domain.method format), params (JSON string with example), and use_session (boolean for context). Examples clarify parameter usage.
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 'Llama cualquier metodo del protocolo CDP directamente' (calls any CDP method directly), and then gives examples of actions without dedicated tools, distinguishing it from siblings like click, navigate, 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 explicitly says 'Ejemplos de acciones que no tienen tool dedicada' (examples of actions without dedicated tool), guiding the agent to use this tool for CDP methods that are not covered by sibling tools. It provides concrete examples like drag & drop, file upload, device emulation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clickC
Clic humano (por coordenadas) sobre el elemento @eN. Devuelve snapshot nuevo.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It only mentions 'human click' and 'returns new snapshot,' but fails to explain what happens if the element is not found, whether it waits, or any side effects.
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 very concise with two short sentences, but the brevity sacrifices clarity and completeness. It could benefit from more structured information without becoming verbose.
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 tools and the presence of an output schema, the description lacks contextual details about prerequisites (e.g., active page), element visibility, or the content of the returned snapshot.
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 single parameter 'ref.' The description hints at an element identifier via '@eN' but does not explain the format or coordinate usage, and conflicts with 'by coordinates.'
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a human click on an element, returning a new snapshot, which distinguishes it from programmatic clicks like js_click. However, the phrase 'por coordenadas' (by coordinates) conflicts with the parameter 'ref' (likely an element reference), causing 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 like hover, fill, or js_click. The description does not mention prerequisites or when it is appropriate to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
current_urlA
Devuelve URL y titulo actuales (barato, sin snapshot).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses that the operation is 'cheap' (non-destructive, fast) and excludes snapshot data. However, does not mention error conditions or prerequisites like a loaded page.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence with all key information front-loaded: what it returns and key quality (cheap, without snapshot). No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and presence of an output schema (which likely documents return structure), the description is adequately complete. It adds context about cost and snapshot exclusion, sufficient for a simple retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, and schema coverage is 100%. Baseline is 4 for zero-param tools. The description adds value by explaining what the tool returns (URL and title) beyond the empty 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 the tool returns URL and title, and distinguishes from snapshot by noting it's cheap and without snapshot. The verb 'Devuelve' (returns) is specific, and the resource is the current page's URL and title.
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 for quick URL/title checks without need for full snapshot, but does not provide explicit when-not or alternatives among siblings like navigate or get_text. Guidance is implicit but minimal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fillC
Enfoca @eN, limpia y escribe text. submit=True presiona Enter al final.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | Yes | ||
| text | Yes | ||
| submit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries full burden. It discloses focusing, clearing, typing, and optional submit. However, it does not explain what '@eN' means (likely a placeholder), whether the tool waits for elements, or error handling. The behavior is partially described but lacks important details.
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, but its shorthand (e.g., '@eN') reduces clarity. It is appropriately short but at the expense of understandability. The information is front-loaded with 'Enfoca' (focuses) as the first word.
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 and the lack of annotations, the description is incomplete. It does not cover return values (though output schema exists), error states, or prerequisites like element visibility. For a tool with 3 parameters and no enums, the description is insufficient for an agent to use it correctly without additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It mentions 'ref' implicitly via '@eN' and 'text' via 'escribe text', and explicitly mentions 'submit=True'. However, it does not define 'ref' or 'text' clearly, nor their expected formats. Adds minimal value 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 that the tool focuses on an element (by ref), clears it, and writes text, with an option to submit (Enter). The verb 'fill' aligns with this action. It differentiates from siblings like 'set_value' or 'click' by implying a sequence of actions, but does not explicitly distinguish from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use 'fill' versus alternatives like 'set_value' or 'js_eval'. There are no exclusions or context for appropriate use. The description implies use for filling form fields, but this is not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_textA
Devuelve innerText del elemento @eN, o del body completo si ref es None.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It explains the core behavior (returning innerText based on ref) but does not disclose error handling, element existence, or 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 a single sentence with no fluff, front-loading the main action and conditional behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists and the tool is simple, the description is adequate but lacks details on failure modes or return format, leaving some gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage; the description partially compensates by linking ref to an element identifier (@eN) and indicating the null case. However, it does not specify the format or expected value of ref.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns the innerText of an element or the full body if ref is None, which is specific and distinguishes it from sibling tools like click or navigate.
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, nor does it mention prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hoverA
Mueve el mouse al centro de @eN (dispara menus/tooltips hover).
| Name | Required | Description | Default |
|---|---|---|---|
| ref | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the full burden. It mentions moving to center and triggering hover effects, but lacks details on waiting, side effects, or safety.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence efficiently conveys the core functionality with 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?
The tool is simple, but the parameter semantics gap leaves it incomplete. An output schema exists but is not referenced in the description.
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%, and the description does not explain the 'ref' parameter beyond a cryptic '@eN' reference. The agent cannot infer what input is expected.
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 mouse to center) and the effect (triggers hover menus/tooltips). It distinguishes itself from sibling tools like 'click' and 'scroll'.
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 over elements to trigger menus, but does not explicitly state when to use it vs alternatives or provide exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
js_clickB
JS element.click() directo — mas confiable para React SPAs y Angular. Usar cuando click() no dispara el handler (ej: botones con React 17+ delegation).
| Name | Required | Description | Default |
|---|---|---|---|
| ref | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and the description lacks behavioral disclosures such as side effects, required permissions, whether it waits for events, or what happens on failure. It only states it's 'direct' and 'more reliable' without sufficient detail.
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 very concise (two sentences) and front-loaded with the key purpose. However, it could add a brief explanation of the parameter without becoming verbose.
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 an output schema, the description fails to mention error handling, prerequisites, or whether the action is synchronous. The lack of annotation coverage and parameter clarity makes it incomplete for a tool with one critical parameter.
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 sole parameter 'ref' has no description in the schema (0% coverage) and the tool description does not clarify what it represents (e.g., CSS selector, element handle). The description adds no meaning beyond the schema's title.
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 performs a direct JS element.click() and distinguishes it from sibling 'click' by noting it's more reliable for React SPAs and Angular, especially when standard click fails due to event delegation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use when click() does not trigger the handler, with an example (React 17+ delegation), providing clear when-to-use and implied when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
js_evalA
Ejecuta JavaScript arbitrario en la pagina. Devuelve resultado + snapshot.
ref=None → evalua script como expresion en window context.
ref=@eN → ejecuta script como funcion con el elemento como this.
Ejemplos basicos: scroll abajo: js_eval("window.scrollBy(0, 500)") drag elemento: js_eval("el.dispatchEvent(new DragEvent('dragstart',...))", ref="@e5") leer atributo: js_eval("return this.getAttribute('data-id')", ref="@e12") click forzado: js_eval("this.click()", ref="@e7") esperar async: js_eval("return await fetch('/api').then(r=>r.json())")
RENDIMIENTO — operaciones en lote: Cada tool call = un round-trip LLM. Para crear/editar/extraer N elementos, escribe UN loop async en JS en lugar de llamar N veces a click/fill/js_eval.
Ejemplo — rellenar y enviar un formulario 20 veces en UNA llamada: js_eval(""" (async () => { const users = [ {name:'Ana',user:'ana01',role:'Operador'}, {name:'Luis',user:'luis02',role:'Supervisor'}, ]; const set = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value').set; const fire = (el,v) => { set.call(el,v); el.dispatchEvent(new Event('input',{bubbles:true})); }; const results = []; for (const u of users) { document.querySelector('button.agregar, [aria-label*=gregar]').click(); await new Promise(r => setTimeout(r, 400)); const inp = document.querySelectorAll('input:not([type=checkbox])'); fire(inp[0], u.name); fire(inp[1], u.user); document.querySelector('button[type=submit], button.crear').click(); await new Promise(r => setTimeout(r, 300)); results.push(u.user); } return results; })() """)
Para datasets grandes usa js_eval_loop() que inyecta items automaticamente.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | ||
| script | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It covers async execution, element context, and batch behavior. However, it does not disclose potential risks (e.g., page state changes, security implications, error handling). Adequate but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is fairly long but well-structured with examples, performance advice, and clear sections. Front-loaded with core purpose. Slightly verbose but every section 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 output schema exists (though not shown), return values need not be explained. Covers main use cases, batch processing, and sibling differentiation. Mentions js_eval_loop for large datasets. Complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description must compensate. It explains 'script' as JavaScript code and 'ref' with two modes (None vs @eN) with examples. Adds meaningful context beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it executes arbitrary JavaScript on the page returning result + snapshot. Distinguishes between ref=None (window context) and ref=@eN (element context). Examples clarify usage. Sibling js_eval_loop is mentioned for batch operations, differentiating use cases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly explains when to use ref=None vs ref=@eN. Provides a performance section advising batch operations to avoid multiple round-trips, and directs to js_eval_loop for large datasets. This gives clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
js_eval_loopA
Ejecuta script una vez por cada item — UNA llamada en lugar de N.
La variable item esta disponible en script como objeto JS plano.
Devuelve array JSON con {ok, result, error} por item + snapshot final.
USAR ESTO en lugar de llamar js_eval/click/fill N veces para operaciones bulk. Cada tool call = un round-trip LLM. Un loop aqui = 50-100x mas rapido para N>5.
Parametros:
items — lista de objetos, uno por iteracion
script — JS a ejecutar por item; puede usar await; item esta en scope
delay_ms — espera entre iteraciones (default 300ms; bajar si la app es rapida)
Ejemplo — crear 20 usuarios en una sola llamada: js_eval_loop( items=[ {"name": "Ana Garcia", "user": "agarcia", "phone": "3101234567", "email": "ana@corp.com", "area": "TI", "role": "Operador"}, ... ], script=""" document.querySelector('button[aria-label*="gregar"], button.agregar').click(); await new Promise(r => setTimeout(r, 400)); const inp = document.querySelectorAll('input:not([type=checkbox]):not([type=radio])'); const s = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value').set; const fire = (el,v) => { s.call(el,v); el.dispatchEvent(new Event('input',{bubbles:true})); el.dispatchEvent(new Event('change',{bubbles:true})); }; fire(inp[0], item.name); fire(inp[1], item.user); fire(inp[2], item.phone); fire(inp[3], item.email); fire(inp[4], item.area); const sel = document.querySelectorAll('select')[0]; const ss = Object.getOwnPropertyDescriptor(HTMLSelectElement.prototype,'value').set; ss.call(sel, item.role); sel.dispatchEvent(new Event('change',{bubbles:true})); document.querySelector('button[type=submit], button.crear').click(); return item.user; """ )
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | ||
| script | Yes | ||
| delay_ms | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does well: it explains the execution flow (script per item, item variable available), return format (array with ok/result/error per item plus final snapshot), and the delay parameter. However, it does not explicitly mention potential risks of running arbitrary JS or whether the tool is destructive, which could be important for safety.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: a brief summary, then explanation of variable and return, usage guidance, parameter details, and a comprehensive example. Every sentence adds value without unnecessary fluff, balancing detail with conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity, the description covers the main aspects: what it does, how to use it, and what it returns. It even provides a working example. However, it does not address edge cases like empty items or script errors, and the output schema is not shown but the description mentions the return format. Slightly more detail on error handling would improve 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 0%, so the description must compensate. It thoroughly explains each parameter: items (list of objects), script (JS with await and item in scope), delay_ms (default 300ms). The detailed example further clarifies usage, providing much-needed semantics beyond the bare schema 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 tool's purpose: 'Ejecuta script una vez por cada item — UNA llamada en lugar de N.' It distinguishes from sibling tools like js_eval by emphasizing that it handles bulk operations in a single call, making the purpose and uniqueness evident.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises to use this tool instead of calling js_eval/click/fill N times for bulk operations, providing a clear usage context. It also explains the performance benefit: 'Cada tool call = un round-trip LLM. Un loop aqui = 50-100x mas rapido para N>5.' This gives strong guidance on when to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
press_keyB
Presiona una tecla nombrada (Enter, Tab, ArrowDown...). ref opcional para enfocar.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | ||
| ref | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description should disclose more. It only says 'presses a key' but doesn't mention key-up/down, waiting, or effects on disabled elements.
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 action, concise. However, could list accepted keys more explicitly.
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?
Adequate for a simple tool with output schema. But lacks clarity on whether it types into an active element or sends events, and when to use over siblings.
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 the description adds meaning: 'key' is a named key with examples, and 'ref' is optional for focusing. This compensates well.
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 presses a named key and gives examples (Enter, Tab, ArrowDown). It differentiates from siblings by specifying keyboard interaction, but does not explicitly distinguish from tools like 'js_eval' for keyboard events.
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 'click' or 'fill'. The optional 'ref' hint suggests focusing, but no explicit when-to-use 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.
read_consoleA
Devuelve los mensajes de consola capturados. clear=True vacia el buffer.
| Name | Required | Description | Default |
|---|---|---|---|
| clear | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses that setting clear=True empties the buffer, which is important. However, it does not clarify whether reading is destructive, whether it returns only new messages, or the order of operations (return then clear). More transparency is needed for a complete behavioral understanding.
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 short sentences, front-loaded with the main purpose. Every word adds value; no redundancy. It efficiently communicates the core function and a key parameter behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description provides basic function and parameter effect, but lacks context about when to use (e.g., after browser actions, requires active session). Since an output schema exists, return value details are not needed, but usage prerequisites are missing. The Spanish language might be a minor barrier but is not penalized heavily.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, so the description must compensate. It explains the effect of the clear parameter: 'clear=True vacia el buffer' (empties the buffer). This adds meaning beyond the schema's type and default, though it could explicitly state what happens when clear is false.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns captured console messages. The verb 'Devuelve' (returns) and resource 'mensajes de consola capturados' specify the action and object. It also mentions the clear parameter effect, which distinguishes it from sibling tools that perform browser actions (click, navigate) or other reads (read_network).
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 read_network or when it should be invoked in a browser session. The description lacks context about prerequisites or typical scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_networkB
Lista requests capturadas (opcional filtra por substring de URL).
| Name | Required | Description | Default |
|---|---|---|---|
| clear | No | ||
| filter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose all behavioral traits. It mentions listing and filtering but does not explain the effect of the 'clear' parameter, whether the tool is read-only, or what happens when capture is not active.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that directly conveys the core purpose without repetition, though it could benefit from separating key behaviors.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description lacks context about prerequisites (e.g., network capture must be active), return type (even though an output schema exists), and does not mention side effects of the 'clear' parameter.
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. It explains the 'filter' parameter (optional URL substring) but completely omits the 'clear' parameter, leaving its semantics 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 description clearly states the tool lists captured requests with optional URL substring filtering, which is specific and distinguishes it from siblings like read_console.
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 reading network requests but provides no explicit guidance on when to use this tool versus alternatives or prerequisites like browser capture state.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
screenshotA
Escape hatch: PNG en base64 (usa snapshot de texto por defecto, no esto).
| Name | Required | Description | Default |
|---|---|---|---|
| full_page | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries full burden. It discloses that the output is a base64 PNG, but does not mention whether the tool is read-only or destructive, nor does it detail the effect of the 'full_page' parameter. The behavioral insight is minimal.
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 short sentence, which is concise and front-loaded with the key purpose. However, it is informal and mixed-language, missing an opportunity to be more 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?
The tool is simple with one parameter and an output schema. The description adequately clarifies the relationship with the sibling 'snapshot' tool but fails to explain the 'full_page' parameter or describe the output structure. It is minimally 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 0%, so the description must explain parameters. It does so for none: the 'full_page' boolean parameter is not described. The description adds no meaning beyond what the schema's name and default value imply.
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 is an 'escape hatch' producing a PNG in base64, and contrasts it with the default text snapshot. It distinguishes from the sibling 'snapshot' tool by specifying the output format.
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 phrase 'usa snapshot de texto por defecto, no esto' explicitly tells the agent that the text snapshot is the default, implying this tool is for when a graphical screenshot is needed. Clear context is provided, though no explicit when-not-to-use scenarios are listed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scrollA
Desplaza la pagina o un elemento especifico.
ref=None → window.scrollBy(x, y) ref=@eN → scrollIntoView del elemento + scrollBy(x, y) relativo y>0 baja, y<0 sube; x>0 derecha, x<0 izquierda.
Ejemplos: scroll() — baja 400px scroll(y=-400) — sube 400px scroll(y=99999) — va al final de la pagina scroll(ref="@e5", y=0) — centra elemento en viewport
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | ||
| y | No | ||
| ref | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It explains internal mechanics (scrollBy vs scrollIntoView) and gives examples. However, it does not disclose if scrolling is smooth, if it waits for completion, or return value details. Moderate 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?
Description is concise with front-loaded purpose, uses bullet points and examples efficiently. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Description covers main behavior and common use cases. With an output schema present, it need not detail return values. Lacks edge cases (e.g., invalid ref) but sufficient for typical 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 has 0% description coverage, so description fully compensates. It explains the role of x, y, ref, default behavior, and provides concrete examples showing parameter usage.
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 scrolls a page or specific element, with a verb and resource. No sibling tool does scrolling, so it is well-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?
Examples show when to use with ref (element) vs without (window), and how to scroll to bottom. No explicit when-not-to or alternatives, but it's the only scroll tool, so guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
select_optionB
Selecciona una opcion de un por value o por label visible.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | Yes | ||
| label | No | ||
| value | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so description carries full burden. It does not clarify behavior when both label and value are provided, what happens if no match is found, or if the element is not a <select>. Lacks important behavioral details.
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 verb and resource. However, it could be slightly more informative without becoming verbose.
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 browser automation context and existence of an output schema, the description is adequate for a simple selection tool but lacks error handling details and return value information. It is minimally complete but could be improved.
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 0%, so description must explain parameters. It mentions selecting by value or label, which covers label and value parameters, but does not explain the 'ref' parameter (likely a selector for the <select> element). Also unclear if label and value are mutually exclusive or how they interact.
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 selects an option from a <select> element, specifying two methods (by value or by visible label). This verb+resource combination distinguishes it from sibling tools like click, fill, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No usage guidelines provided. Does not mention when to use this tool versus alternatives (e.g., set_value, click), nor prerequisites 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.
set_valueA
Establece el valor de un input/select usando el setter nativo de JS.
Necesario para React, Vue y Angular: los inputs controlados no responden a .value= directo porque el framework sobreescribe el setter. Este tool usa Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value').set y dispara eventos input+change para que el framework detecte el cambio.
Usar para: date pickers, spinbuttons, selects custom, inputs con validacion.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | Yes | ||
| value | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite no annotations, the description reveals the underlying mechanism (using Object.getOwnPropertyDescriptor and dispatching input+change events) and why it's needed. This provides good transparency about the tool's behavior beyond a simple value assignment.
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, front-loading the purpose, then providing technical rationale, and ending with usage examples. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of working with framework-controlled inputs, the description covers the essential behavioral details (setter override, event dispatching). However, it lacks parameter documentation and does not mention the output schema, though the output schema exists.
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%, and the description provides no explanation of the parameters 'ref' and 'value'. While 'ref' likely refers to an element selector and 'value' the target value, the description should explicitly define them, especially given the tool's complexity.
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 sets the value of input/select elements using the native JS setter, specifically for controlled inputs in React/Vue/Angular. This distinguishes it from sibling tools like 'fill' or 'click', which have different mechanisms.
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 lists use cases (date pickers, spinbuttons, custom selects, inputs with validation) and explains why it's necessary (framework overrides setter). It doesn't explicitly state when not to use, but the context implies it's for controlled inputs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
snapshotC
Captura el arbol de accesibilidad como texto compacto con refs @eN.
| Name | Required | Description | Default |
|---|---|---|---|
| interactive_only | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It mentions capturing the accessibility tree but does not indicate whether it is read-only, side-effect-free, or requires permissions. The parameter 'interactive_only' is not explained.
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, but it lacks structure and important details. It is concise but at the expense of completeness, earning a middle score.
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 (one optional param, many siblings, output schema exists), the description is incomplete. It fails to explain the parameter, usage context, or how the output differs from similar tools.
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 0%, and the description adds no meaning to the lone parameter 'interactive_only'. The parameter's effect on the output is entirely unaddressed.
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 accessibility tree as compact text, which is a specific verb and resource. It distinguishes from sibling tools like screenshot and get_text by targeting accessibility data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as get_text or screenshot. The description lacks 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.
wait_forA
Espera hasta que aparezca text en la pagina (o agota timeout_ms).
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | ||
| timeout_ms | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses basic behavior (wait until text appears or timeout) but lacks details on what happens on timeout (e.g., error vs. return value) or how 'appears' is defined (visible, present in DOM). With no annotations, more depth would be beneficial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence with no unnecessary words. It front-loads the essential action, 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 simple wait tool, the description covers the core functionality. However, it omits behavioral details like whether the tool blocks until condition met or returns a result, and the output schema (though present) is not described, leaving some uncertainty.
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 mentions both parameters (text and timeout_ms), which adds meaning beyond the schema's type definitions. However, coverage is 0% and the description does not clarify nuances like what 'text' matching entails (exact substring? case-sensitive?) or the unit of timeout_ms (milliseconds implied).
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 action: waiting until text appears on the page, with a timeout. It uses a specific verb ('wait for') and resource ('text on the page'), distinguishing it from sibling tools like 'click' or 'navigate'.
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. It does not mention prerequisites, such as needing a page already loaded, nor does it compare to sibling tools like 'get_text' for reading text after a wait.
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.
21 tool updates
v0.1.0- First observed
browser_start - First observed
browser_stop - First observed
cdp_call - First observed
click - First observed
current_url - First observed
fill - First observed
get_text - First observed
hover - First observed
js_click - First observed
js_eval - First observed
js_eval_loop - First observed
navigate - First observed
press_key - First observed
read_console - First observed
read_network - First observed
screenshot - First observed
scroll - First observed
select_option - First observed
set_value - First observed
snapshot - First observed
wait_for
TDQS
Most tools have clearly distinct purposes (e.g., click vs js_click vs cdp_call), but the difference between click and js_click might confuse an agent without careful reading. Overall, each tool targets a unique action.
All names use snake_case, but the pattern mixes simple verbs (click, hover, scroll) with verb_noun phrases (get_text, read_console, press_key) and compound noun_verb (js_eval, cdp_call). This inconsistency, while still readable, could be improved.
21 tools is slightly above the typical 3-15 range, but each tool serves a specific need in browser automation (navigation, interaction, JavaScript execution, bulk operations, etc.). The count feels justified for the domain.
Covers essential browser automation operations: navigation, clicking, typing, scrolling, waiting, reading page state, console/network monitoring, and JavaScript execution. Missing a dedicated file upload tool, but can be done via cdp_call. Minor gaps overall.
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.
A paid remote MCP for AI agent browser DevTools MCP, built to return verdicts, receipts, usage logs,
Hosted browser for AI agents: screenshots, post-JS DOM, console, WCAG. No install, no API key.
61Hosted real Google Chrome MCP with per-user persistent state. Navigate, click, type, screenshot.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenancesingle-binary MCP server that gives AI agents a browser. 66 tools for navigation, form filling, data extraction, screenshots, and DOM diffing — built on pure Chrome DevTools Protocol.11MIT
- AlicenseAqualityDmaintenanceSelf-hosted MCP server for AI browser automation. Connects to your own Chromium instance via CDP, providing tools for browser control, navigation, interaction, and content extraction.191MIT
- FlicenseNot gradedqualityDmaintenanceMCP server that connects AI agents to browser DevTools via CDP, enabling real-time access to console logs, network requests, and page state.-
- AlicenseBqualityAmaintenanceA lightweight 30KB MCP browser automation server that uses raw Chrome DevTools Protocol to enable AI agents to browse the web, take screenshots, interact with elements, and capture live page events like console logs and network requests.262615MIT
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/ingjohnfigueroablanco/Fast-browser-MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server