jev-reflex
Click on "Deploy 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., "@jev-reflexSearch Google Flights for one-way Zurich to London on Sept 20 and stop when results appear."
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.
jev-reflex
Claude thinks, Jev reacts. This is an MCP server that lets Claude hand a whole browser task to TypeSafe's Jev. Jev makes each click/type/select decision in about 100 ms. Claude stays in charge of planning the task and verifying the result.
you ──▶ Claude ── browse(url, goal) ──▶ jev-reflex ──▶ Chrome (background tab)
▲ │
│ │ loop until done:
│ │ read page → Jev picks action (~100 ms) → execute
│ ▼
└──── status · steps with probabilities · final page textWhy
Browser tools for LLM agents usually work one step at a time. The model looks at the page, picks a click, waits for the result, and looks again. Every one of those steps is a full round trip to a frontier model: several seconds and thousands of tokens per click. A 15-click form costs 15 of them.
Most of those steps don't require reasoning. "Which of these 40 elements is the Where to? field?" is a choice from a list, not an open question. Psychologists call this kind of fast judgement System 1. Slow, deliberate reasoning is System 2.
Jev is a System One model. It never generates free text. It gets a state and a fixed set of options, and it returns one of those options with calibrated probabilities. That makes it fast, cheap, and unable to invent an element that is not on the page.
jev-reflex splits the work between the two models:
Claude (System 2) | Jev (System 1) | |
Role | decides what to do | decides which element, now |
Calls per task | 1 | one per step |
Output | plans, goals, judgement | a typed choice from the element table |
Latency | seconds | ~100 ms (TypeSafe's figure) |
The browser loop comes from browser-use/jev-ultrafast. This project exposes it as an MCP tool. It also adds what an orchestrating LLM needs: a result it can verify, loop detection, a hard time limit, and a handoff when Jev gets stuck.
Related MCP server: Browser Agent MCP
How a run works
Claude calls
browsewith a URL, a goal that says when to stop, and the exact strings to type:goal="Find one-way flights from Zurich to London on 20 September 2026 for one adult. Stop when flight options are visible.",values=["Zurich", "London", "20 September 2026"].jev-reflex opens a background tab in your Chrome and reads the page in a single call. The result is a numbered table of every visible control:
[1] button Change ticket type · Round trip [2] combobox Where from? · San Francisco [3] combobox Where to? · emptyJev picks an operation and a target in one request:
CLICK [1],TYPE_TEXT [3],SELECT,SCROLL,WAIT,DONEorBLOCKED. Every choice comes with a probability.Claude supplies the text and Jev decides where it goes. For
TYPE_TEXT, Jev picks which of thevaluesbelongs in the selected field ("London" goes in Where to?). That is one more ~100 ms choice, with no text model and no generated text. If no value fits, the run stops and Claude takes over. If you leavevaluesout, a small text model you configure infers the value from the goal instead.The action is executed safely. Before input, the target is rechecked against the live page: it must still exist, be visible, and not be covered by another element. If the page changed, the decision is discarded and the loop observes again.
The loop repeats until Jev says
DONEorBLOCKED, the same page comes back a third time (looping), ormax_secondsruns out.Claude gets the result back. It contains the status, every step with its probability, and the final page text. If the run did not finish, it also contains the element table, so Claude can take over from where Jev stopped.
Measured
Task | Result | Time |
example.com → "Click 'Learn more'. Stop when the IANA example-domains page is open." |
| 1.96 s |
Wikipedia search for Gödel's incompleteness theorems, with |
| 3.39 s |
Google Flights, one-way ZRH→LON on 20 Sep 2026 for 1 adult, with |
| 13.0 s |
Google Flights ZRH→LON search (upstream demo, their measurements) | done | 7.1 s |
The first three rows were measured through this MCP server, end to end, on Windows 11 with a real Chrome. The last row is jev-ultrafast's own published figure. A handful of runs is not a benchmark. Run your own tasks before relying on it.
When to use it
Good fit: tasks inside one site with a clear finish line, for example searches, filters, form filling, navigating to a known page, or reaching a results view. Also any flow where Claude would otherwise spend a dozen tool calls on clicks.
Poor fit: open-ended research across many sites, tasks where reading and judging the content is the actual work (Claude should do that part), and anything that involves iframes, shadow DOM, canvas, file uploads or pop-up windows, which the upstream loop does not support.
Install
Requirements
Python 3.12+ and uv
Google Chrome with remote debugging enabled. Open
chrome://inspect/#remote-debuggingand turn it on, or runuvx browser-harness --doctorand follow its promptsA TypeSafe API key. Jev is in early access
Optional: an OpenAI-compatible text model key. You only need it if you want field values inferred from the goal instead of passed in
values
Claude Code
claude mcp add jev --scope user -e TYPESAFE_API_KEY=your-typesafe-key \
-- uvx --from git+https://github.com/MSalvalaggio/jev-reflex jev-reflexThat is all you need: Claude passes values, so no text model is involved. To enable the text-model fallback, also
add -e TEXT_MODEL_API_KEY=… -e TEXT_MODEL_BASE_URL=https://openrouter.ai/api/v1 -e TEXT_MODEL=inception/mercury-2.5 -e TEXT_MODEL_REASONING=none.
Start a new session, then ask something like "use jev to find one-way flights from Zurich to London on 20 September".
Claude Desktop and other MCP clients
{
"mcpServers": {
"jev": {
"command": "uvx",
"args": ["--from", "git+https://github.com/MSalvalaggio/jev-reflex", "jev-reflex"],
"env": { "TYPESAFE_API_KEY": "your-typesafe-key" }
}
}
}Configuration
Variable | Default | Notes |
| — | Required |
|
| |
| — | Optional fallback, used only when a goal types text and |
|
| Any OpenAI-compatible |
|
| |
| — | Set to |
How Claude decides to use it
Claude chooses tools on its own. The server gives it two signals:
Server instructions. Claude Code adds these to the system prompt. They tell Claude to use
browsebefore step-by-step browser tools for any interaction with a website, list the cases where it should not (reading a known URL, debugging a local dev server, visual checks, logins, payments), and describe what to do with each status, including falling back to another browser tool from the returnedurl.The tool description, which is what Claude sees when it searches for a tool to load.
If you have other browser tools installed and want to make the preference explicit, drop a rule into
~/.claude/rules/jev.md:
Use the jev MCP tool `browse` for any task that needs interacting with a live website (searching on a site,
forms, filters, dates, dropdowns, reaching a page through menus). Prefer it over step-by-step browser tools; if it
is deferred, load it with ToolSearch (`select:mcp__jev__browse`). Always give `goal` a stop condition and pass
every string to type in `values`. Never let it submit orders, payments, messages or deletions without asking.Tool reference
browse(url, goal, values=None, max_seconds=60)
{
"status": "done",
"elapsed_ms": 1956,
"url": "https://www.iana.org/help/example-domains",
"title": "Example Domains",
"page_text": "first 4000 characters of visible text",
"steps": [
{ "action": "Learn more", "kind": "click", "text": null,
"probability": 1.0, "confidence": 0.96, "page_changed": true }
]
}Status | Meaning | What Claude should do |
| Jev reports the goal is met | Check |
| Jev found no way forward, or the page stopped changing | Read |
| The same page was reached a third time | Usually means a missing stop condition. Add one |
|
| Split the goal into smaller ones |
| Model or provider failure, step budget reached, or no entry in | Read |
Every status except done includes elements, the indexed controls of the final page.
Writing good goals
Pass every string to type in
values, exactly as it should appear. Jev only decides which one goes in which field, so nothing can be typed that you didn't supply.State a stop condition. Without "stop when …", Jev keeps browsing until the run hits
looping.Keep one goal per site. For multi-site work, let Claude chain several
browsecalls.
Safety
It runs in your real Chrome profile, including your logged-in sessions. Only give it goals you would click through yourself. Turn remote debugging off when you are done: while it is on, any local program can control Chrome.
Model output never becomes code. Every action targets an element that was observed on the page and rechecked just before input. Nothing the models return is used as a selector, a coordinate or JavaScript.
Runs are bounded: by
max_seconds, by the 60-action budget of jev-ultrafast, and by loop detection.Jev can click any control on the page, including submit and buy buttons. Nothing restricts it to "safe" actions. Keep goals explicit about where to stop, and don't delegate anything you wouldn't want done unattended.
Development
uv sync
uv run pytest # offline, no API calls
uv run ruff check . && uv run ruff format --check .
uv run python scripts/smoke.py # live: a few paid Jev calls; needs TYPESAFE_API_KEY and ChromeThe whole server is one file of about 90 lines. The browser loop lives upstream and is pinned to a specific commit.
Credits
browser-use/jev-ultrafast (MIT): the browser loop, DOM snapshot and safe executor
TypeSafe: the Jev model
Browser Harness: the Chrome connection
This is an independent project. It is not affiliated with Browser Use, TypeSafe or Anthropic.
License
MIT
Available Tools
23 toolsbrowser_cdpB
Call a raw Chrome DevTools Protocol method. params are passed as kwargs.
| Name | Required | Description | Default |
|---|---|---|---|
| method | Yes | ||
| params | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so the description carries the full burden. It discloses the action ('Call') but not side effects, validation behavior, possible errors, authentication needs, or response format. Calling a raw CDP method can mutate browser state, but the description does not warn about this.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no filler. The main purpose is front-loaded, and the note about `params` as kwargs is directly relevant and compact.
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?
Although the input schema is simple, the absence of annotations, output schema, and usage context makes the description thin. It does not explain return values, errors, or when this raw tool should be preferred over the dedicated sibling tools, so the agent is left under-informed for correct invocation.
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 the description must compensate. It adds one useful semantic detail: `params` are passed as keyword arguments. However, it provides no guidance on `method` values, how to construct params, or the relationship between the two, leaving meaningful gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies the exact verb ('Call') and resource ('raw Chrome DevTools Protocol method'), and the word 'raw' clearly distinguishes it from the high-level sibling tools like browser_click or browser_navigate. An agent can immediately understand this is a low-level passthrough rather than a convenience operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given for when to use this tool versus the many provided browser helpers. There is no mention of 'use this when no high-level tool exists' or any warning about when it is inappropriate, leaving the decision entirely to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_clickB
Click at screen coordinates (x, y). button is 'left'/'right'/'middle'.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | ||
| y | Yes | ||
| button | No | left | |
| clicks | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, and it does disclose the core action and button options. However, it never clarifies the coordinate system (viewport vs. page, device vs. CSS pixels), the side effects of clicking (navigation, form submission), or the behavior of the `clicks` parameter, leaving meaningful ambiguity for a mutating action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, action first, with no wasted words. It is appropriately front-loaded, though it is lean enough to omit the `clicks` parameter entirely, which a slightly expanded description could have covered 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?
The tool is simple (4 params, no output schema), so the description only needs to enable a correct basic call — which it does for x/y and button. But since there are no annotations and no output schema, the description is the sole behavioral source, and its silence on `clicks` semantics and the coordinate-system meaning leaves gaps an agent could trip on.
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 does add meaning to x/y ('screen coordinates') and to `button` (left/right/middle). But `clicks`, an integer parameter with default 1, is never explained — the agent cannot tell whether it means double-click or repeat count — and no ranges or pixel semantics are given for x/y.
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 specific verb and resource — 'Click at screen coordinates (x, y)' — which is unambiguous and tells the agent this is a coordinate-based mouse action rather than an element- or key-based one. It also adds meaning to `button` by enumerating 'left'/'right'/'middle'. It stops short of a 5 because it never names sibling tools (e.g., browser_js or browser_press) to explicitly carve out its scope.
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 given on when to choose this tool over alternatives: browser_js/browser_cdp can trigger clicks programmatically, browser_press handles key presses, and browser_fill targets form fields, yet none of these routing decisions are addressed. There are no prerequisites, exclusions, or context hints, so the agent gets no information beyond the tool's own name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_close_tabA
Close a tab. Without target, closes the active tab.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. It discloses the destructive action and the active-tab default, but it does not explain whether closing is reversible, what happens if it is the last tab, or what response the tool returns.
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 short sentences with no filler. The main action and the default behavior are stated directly and concisely, with the most important conditional behavior 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?
The default invocation is fully described and the operation is simple. However, for non-default usage with a target, the agent is left guessing about the target value's format, and with no output schema there is no stated expectation of return behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage for target, the description must compensate. It adds meaning by explaining the null case ('closes the active tab'), but it does not define what a string target value should be or where to obtain it, such as a tab ID.
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?
States the exact verb and resource: 'Close a tab.' It immediately clarifies the default behavior ('Without target, closes the active tab'), which also distinguishes it from tab-creation and navigation siblings like browser_new_tab and browser_switch_tab.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear invocation context by explaining what happens when target is omitted. It does not explicitly name alternatives or when-not-to-use conditions, but the intended usage is unambiguous for this simple operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_current_tabA
Return the active tab's targetId, url and title.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It states what is returned, but does not mention potential side effects (likely none) or error conditions (e.g., no active tab). For a simple read operation this is 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?
The description is a single, concise sentence that immediately states the tool's purpose. There is no unnecessary information, and the key output fields are 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 low complexity (no parameters, no output schema), the description provides enough information: it lists the three return fields. It does not elaborate on types or edge cases, but for a straightforward getter, it is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the baseline for such cases is 4. The description does not need to explain parameters, and the schema is already empty. No additional parameter semantics are required.
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 (Return) and the resource (the active tab's targetId, url, title). It is specific and distinct from siblings like browser_list_tabs (lists all tabs) and browser_page_info (likely more detailed page info). The purpose is immediately understandable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when you need current tab metadata, but it does not explicitly state when to prefer this over alternatives or when not to use it. No exclusions or alternative references are provided, though the context of 'active tab' makes the primary use case clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_ensure_real_tabA
Switch to a real (non-internal) tab if the current one is chrome:// or stale.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It clearly discloses the conditional tab switch, but leaves 'stale' undefined and does not explain what happens if no real tab exists or how the replacement tab is chosen. Core behavior is stated, but side-effect details are thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence carries the action, target, and trigger condition with no filler. It is front-loaded and 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?
For a zero-parameter, no-output-schema utility, the description supplies the key context: when to run it and what it accomplishes. Slight ambiguity in 'stale' is the only notable gap.
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 takes zero parameters, so there is no parameter semantics for the description to add. The 100% schema coverage makes this trivially complete, and the baseline of 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Switch') with a clear resource ('real (non-internal) tab') and an explicit condition ('if the current one is chrome:// or stale'). This distinguishes it from browser_switch_tab and other navigation tools. The purpose is immediately obvious.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states exactly when to invoke the tool: when the current tab is an internal chrome:// page or is stale. It does not name alternatives or state when not to use it, so it falls short of a full 5, but the trigger condition is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_fillC
Fill an input matched by selector with text.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| selector | Yes | ||
| clear_first | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden for behavioral disclosure. It only states the basic fill operation but does not mention side effects (e.g., clearing the field, triggering events), behavior on missing selectors, or whether it replaces existing text. The clear_first parameter is not mentioned, so the agent is unaware of the default clearing 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 a single, efficient sentence with no fluff. It is front-loaded with the action and key parameters. However, it could be slightly more structured to include parameter details without losing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool, the description is still incomplete. It lacks information about the optional clear_first parameter, error handling, and differentiation from siblings like browser_type. With no output schema and no annotations, the agent has insufficient context to call the tool reliably.
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 selector and text implicitly but omits clear_first entirely. It also does not specify selector syntax (CSS, XPath) or any constraints on text. This leaves a required parameter undocumented in any form.
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 (fill), the resource (an input matched by selector), and the payload (text). It is a specific verb+resource but does not distinguish from sibling browser_type, which might also interact with inputs. Still, the purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives like browser_type. There is no mention of context, prerequisites, or exclusions, leaving the agent to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_gotoB
Navigate the current tab to url. Returns the navigation result.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It mentions 'Returns the navigation result' but provides no details on whether it waits for page load, error handling, or side effects like history updates. The tool mutates state (navigation), yet the description gives no safety or blocking information. This is a significant gap for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. It states the action and the return value efficiently. 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's complexity (simple navigation) and lack of annotations and output schema, the description is inadequate. It omits critical details like whether navigation blocks until page load, what the 'navigation result' contains, and how errors are surfaced. The existence of sibling browser_wait_for_load suggests this tool may not wait, but that's not clarified. An agent would need more context to use it reliably.
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 says 'Navigate the current tab to `url`', which adds that the parameter is the destination. However, this is essentially restating the parameter name and adds no format, constraints, or examples. The description barely adds meaning beyond the parameter name itself.
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 ('Navigate') on a specific resource ('current tab') and specifies the target as 'url'. This distinguishes it from siblings like browser_new_tab (which opens a new tab) and browser_switch_tab (which changes focus). No 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?
The description implies usage for navigating the current tab to a URL, but does not explicitly state when to prefer it over alternatives (e.g., browser_new_tab, browser_switch_tab). There is no exclusion or guidance on when not to use it, leaving the agent to infer based on the name and siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_http_getA
HTTP GET url (browser-less). Returns the response body. Optional
headers dict for authentication or custom request headers.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| headers | No | ||
| timeout | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It does state that the tool is browser-less and returns the response body, which are meaningful behavioral traits. However, it does not mention how non-2xx responses are handled, whether redirects are followed, or the effect of the timeout parameter—leaving notable gaps for a network call.
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 with no filler. The core action and result are front-loaded, and the optional header detail is presented right after. Every word earns its place, and the structure makes the tool easy to scan.
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 GET tool with no annotations and no output schema, the description covers the basic purpose and result but falls short on critical context. The timeout parameter is entirely unexplained, and error/redirect behavior is absent. The description is not complete enough for an agent to use the tool confidently in edge cases.
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 for all parameters. It explains headers well ("Optional `headers` dict for authentication or custom request headers"), but it entirely omits the timeout parameter, including its units and meaning, and url is left to be inferred. This is insufficient for a tool with three undocumented parameters.
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 a specific verb and resource: "HTTP GET `url` (browser-less)" and names the result ("Returns the response body"). The "browser-less" qualifier distinguishes it from the browser-navigation siblings like browser_goto and browser_js, leaving no ambiguity about what this tool does.
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 context by saying "browser-less", signaling that this is for raw HTTP requests without a browser, but it never explicitly names alternatives or states when not to use it. An agent can infer the when, but it lacks the direct routing that would earn a 4 or 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_jsA
Evaluate a JavaScript expression in the current tab (or an iframe target_id).
| Name | Required | Description | Default |
|---|---|---|---|
| target_id | No | ||
| expression | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears the full burden of disclosing behavior. It says the expression is evaluated but does not mention that JavaScript can mutate the page, whether a result is returned, how asynchronous expressions are handled, or what errors may surface. For an arbitrary-JS-execution tool this is a meaningful gap.
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 compact sentence with no filler. It front-loads the core operation and handles the iframe variant in a parenthetical, with every word earning 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?
With no annotationsaint, no output schema, and incomplete parameter semantics, the description is too sparse for an eval tool. It omits the return behavior, constraints on expressions, and the exact meaning of `target_id`. An agent could call it safely only by guessing at these important details.
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 adds that `target_id` refers to an iframe, but it does not clarify whether `target_id` is an id, a selector, or a frame reference, nor does it explain how `expression` results are returned or formatted. The addition is marginal beyond the schema's own property titles.
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 specific verb ('Evaluate') and a clear resource ('a JavaScript expression in the current tab'), with an explicit iframe variant via `target_id`. This distinguishes the tool from browser-level sibling tools such as browser_goto or browser_cdp.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly scopes the tool to the current tab and identifies the iframe condition via `target_id`. It does not explicitly name alternatives or when not to use it, but the intended context is clear enough for an agent to select it over siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_list_tabsA
List open page tabs.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry behavioral disclosure. 'List' conveys a read-only operation with no side effects, but it does not describe the return shape or whether the current tab is identified. More detail would reduce ambiguity.
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 four-word sentence states the operation with no filler. It is front-loaded and easily parsed by an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, non-destructive list operation, the description is largely complete for invocation. The lack of an output schema means a note on return format (e.g., tab IDs/titles, active tab) would be a minor improvement, but nothing necessary to call the tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the description has no parameter burden. The baseline of 4 applies because there is nothing to document beyond the already-complete 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?
The description uses a specific verb ('List') and a clear resource ('open page tabs'), making the operation unambiguous. The plural phrasing distinguishes it from sibling tools like browser_current_tab and browser_switch_tab, even without naming them.
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 intended use is implied: call it when a list of all open tabs is needed. However, it gives no explicit guidance about when to prefer browser_current_tab or browser_switch_tab, or any exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_new_tabB
Open a new browser tab. Returns the new tab's targetId.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | about:blank |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility for behavioral disclosure. It states the return value (targetId) but does not explain whether the new tab becomes active, whether it opens in the background, what happens with invalid URLs, or any side effects on the current tab. For a tool with no annotation coverage, this is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, direct sentence with no filler. The key action and return value are front-loaded. Optimal length for a simple tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool is simple (one optional parameter, no output schema, no annotations), the description is minimally adequate. It states the action and the return. However, it lacks context on how the new tab interacts with the existing browsing session (e.g., does it become active? is it added to the tab list?). For an agent that needs to manage multiple tabs, this is a notable gap.
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% – the 'url' parameter has no description in the schema. The description does not mention the parameter at all, leaving the agent to infer that 'url' is the address to open. Since it is optional and defaults to 'about:blank', the agent might not know the meaning or format expected. The description adds no 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?
States a specific verb 'Open' and resource 'a new browser tab'. Clearly distinguishes from sibling tools like browser_goto (which navigates existing tab) and browser_switch_tab (which switches to an existing tab). The purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for creating a new tab, but does not explicitly state when to use it versus alternatives (e.g., when you want to keep the current tab intact). It does not mention that this is the tool to use for a fresh browsing context or that it should be used when you need a separate targetId for later operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_page_infoA
Return current tab metadata: url, title, viewport and scroll sizes.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description bears the full burden of disclosing side effects. It correctly implies a read-only operation but does not explicitly state that it makes no changes to the page or that it may fail if no tab is loaded. It only lists return fields without addressing error handling or edge cases, but for a simple metadata fetch the essential behavior is conveyed.
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, front-loaded sentence with zero filler. The purpose and returned data are in the first clause, making it immediately scannable. 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's simplicity (no parameters, no output schema), the description sufficiently covers what an agent needs to call it: it names the exact data items returned. It does not specify the output structure (e.g., nested vs flat), but that is a minor gap for a metadata retrieval tool, and the listed fields imply a clear contract.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, so schema coverage is trivially 100%. The description correctly adds no parameter information because there is nothing to document. Per the rubric, a zero-parameter tool earns a baseline of 4, and the description does not detract from that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Return') and the target ('current tab metadata'), and enumerates the specific data fields it provides (url, title, viewport, scroll sizes). This unambiguously differentiates it from sibling tools like browser_screenshot or browser_list_tabs, which serve different purposes.
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 timing or alternative-selection guidance. It does not mention when to prefer this over browser_current_tab, browser_list_tabs, or any other sibling, nor does it state any prerequisites (e.g., an open tab). An agent must infer its use case solely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_pressC
Press a key. modifiers is a bitfield: 1=Alt, 2=Ctrl, 4=Meta, 8=Shift.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | ||
| modifiers | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral implications, but it only says 'Press a key' and defines modifiers. It does not state that the key press targets the focused element, may trigger navigation or shortcuts, or whether it waits for resulting page changes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, leads with the core action, and every word is informative. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations and no output schema, this description is too thin. It lacks usage context, key-value guidance, and behavioral expectations, leaving an agent to guess at critical details for correct invocation.
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 fully explains the modifiers bitfield values (1=Alt, 2=Ctrl, 4=Meta, 8=Shift), which is valuable, but it does not specify accepted key strings or syntax for the required key parameter.
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 phrase 'Press a key' clearly identifies the action as a keyboard key press, which distinguishes it from siblings like click, type, and fill at a basic level. However, it does not explicitly state that it acts on the current page or name alternatives, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or when-not-to-use guidance is provided; the description never mentions alternatives like browser_type or browser_click. An agent must infer when browser_press is appropriate instead of being told.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_screenshotA
Capture a PNG screenshot. If path is omitted, a temp file is used.
Set max_dim to downscale results larger than that dimension.
| Name | Required | Description | Default |
|---|---|---|---|
| full | No | ||
| path | No | ||
| max_dim | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It usefully adds that omitting path uses a temp file and that max_dim downscales results, which go beyond the schema. However, it does not explain what the `full` parameter does or what the return value looks like, leaving a meaningful behavioral gap for a tool with no annotation coverage.
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 short sentences with no filler. The core action is front-loaded, and every sentence adds a meaningful detail: format, path behavior, and max_dim behavior. It is appropriately sized for a simple tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is minimally viable for a basic screenshot invocation, especially because all parameters are optional and the tool has no required inputs. However, the lack of an output schema and the absence of any explanation of the `full` parameter mean the description is not fully complete for edge cases like full-page captures or understanding the returned artifact.
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 itself. It covers path and max_dim clearly, but it never mentions the `full` parameter, which remains unexplained despite being part of the input schema. This is helpful but incomplete.
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 'Capture a PNG screenshot' states a specific verb and resource, making the tool's purpose immediately unambiguous. It also distinguishes itself from sibling browser tools by naming the output format (PNG) and the action (screenshot), leaving no room for confusion with navigation or recording tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the core use case clear—when a screenshot is needed—but it does not explicitly discuss when to prefer this over sibling tools like browser_page_info or browser_start_recording. The usage context is implied rather than stated, and no exclusions or alternative routing guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_scrollA
Scroll the wheel at (x, y) by dy vertical / dx horizontal pixels.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | ||
| y | Yes | ||
| dx | No | ||
| dy | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral disclosure burden. It does state the core behavior (scroll at a point by pixel deltas), but it does not clarify the coordinate system (viewport vs. page), scroll direction sign convention beyond pixel deltas, or what happens if coordinates are out of bounds. This is adequate but not rich.
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 entire description is one front-loaded sentence that states the action, location, and units without filler. Every clause adds operational 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 4-parameter, no-output-schema action tool, the description covers the core invocation but leaves the coordinate basis and edge-case behavior implied. An agent might call it correctly in a common case, but would not know viewport semantics or whether the wheel event is relative to the current scroll position.
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 compensates by naming all four parameters and explaining their roles: x/y as the scroll position and dx/dy as horizontal/vertical pixel amounts. It stops short of describing coordinate space and defaults (already in schema), but it provides meaning the bare integer schema does not.
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 uses a specific verb ('Scroll') and identifies the exact target ('wheel at (x, y)') plus the units of action (`dy` vertical / `dx` horizontal pixels). This makes the tool's function immediately distinguishable from the other browser action siblings such as browser_click or browser_js.
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 states what the tool does but gives no guidance on when to prefer it over alternatives or any prerequisites/context. There is no 'use when...' or 'for other scrolling behavior use...' note, so an agent must infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_start_recordingC
Start recording actions to a local directory.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| title | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden of behavioral disclosure. It only states that recording starts and writes to a local directory, but does not explain what gets captured, how the recording session ends, whether existing recordings are overwritten, or what side effects occur.
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 filler, but it is under-specified rather than efficiently complete. Key behavioral and parameter information is missing while the existing sentence could have been expanded 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?
With no annotations, no output schema, and two undocumented optional parameters, the description leaves a state-changing recording workflow largely unexplained. It omits the lifecycle relationship with browser_stop_recording and the meaning of the parameters, making it incomplete for correct invocation.
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 explain the optional name and title parameters at all. An agent has no way to know what values to provide or how these parameters affect the recording, so the description adds no semantic value beyond the property names.
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 names a specific action (start recording) and target (local directory), distinguishing it from the browser interaction tools. It does not explicitly contrast with browser_stop_recording, but the start/stop pairing is inferable from the tool name and sibling list.
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 when-to-use guidance, alternatives, or prerequisites are provided. The description does not mention that this should be paired with browser_stop_recording or that a browser session should be active, so usage must be inferred entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_stop_recordingA
Stop the active recording and return its directory.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions the stop action and the return of a directory, but does not disclose side effects (e.g., whether the recording is saved, whether it is resumable, what happens if no active recording exists).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. It states the action and the return value with zero 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?
For a zero-parameter tool, the description is largely adequate: it states the action and return value. However, it does not mention whether an active recording is required or what happens if one is absent, leaving minor ambiguity in edge cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema has 100% coverage of nothing, so the description adds no parameter semantics—but none are needed. The baseline of 4 applies because there are no parameters to document.
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 uses a specific verb ('Stop') and resource ('active recording') and clearly distinguishes from the sibling tool browser_start_recording, which is the inverse action. It is unambiguous and tells an agent exactly what operation is performed.
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 wording implies the tool should be used when a recording is already active, likely after browser_start_recording, but it does not explicitly state prerequisites, exclusions, or alternatives. No when-not-to-use guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_switch_tabC
Switch to tab by targetId or URL substring. Returns the sessionId.
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions the return value ('Returns the sessionId') but does not disclose what happens if the target is not found, whether the switch is synchronous, or whether the sessionId refers to the new tab's session. The behavior of matching by URL substring is ambiguous (e.g., case sensitivity, partial match).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that front-loads the action and target format. It earns its place by adding the URL substring option and the return value, though it could be slightly 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?
For a tool with no annotations, no output schema, and a single parameter with 0% schema coverage, the description is too thin. It does not explain error behavior, how to obtain a targetId (e.g., via browser_list_tabs), or what the sessionId is used for. An agent would likely need to experiment or consult other tools to use this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does clarify that `target` can be a `targetId` or URL substring, which adds meaning beyond the bare schema. However, it does not explain how to distinguish a targetId from a URL substring, what format a targetId takes, or how the substring matching works.
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 specific verb ('Switch') and resource ('tab'), and identifies the two accepted target formats: `targetId` or URL substring. It clearly distinguishes this from sibling tools like browser_new_tab and browser_close_tab, though it doesn't explicitly name them.
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 this tool: when the agent needs to change the active tab and has a targetId or URL substring. However, it does not explicitly state when not to use it or mention alternatives like browser_list_tabs for finding the targetId or browser_current_tab for checking the active tab.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_typeC
Insert text into the focused element.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. 'Insert text into the focused element' states the basic behavior but omits important behavioral traits such as whether it types keystrokes, appends at the cursor, clears existing content, or triggers input events. The term 'insert' is ambiguous relative to browser_fill.
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 focused sentence with no filler or redundant restatement of the tool name. It front-loads the action and target effectively and earns every 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?
For a tool with no annotations, no output schema, and a large sibling set, more context is needed. It does not tell the agent about the required focused state, how to set that state, or how this differs from browser_fill and browser_press, so the description alone 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?
Schema coverage is 0% and the only parameter is a string named 'text'. The description confirms the text is what gets inserted, adding a bit of meaning beyond the schema, but it offers no extra details like encoding, newline handling, or length limits. This is adequate, not exceptional.
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 a specific action ('insert text') and resource ('the focused element'), so the tool's core purpose is unambiguous. It does not explicitly contrast with sibling tools like browser_fill or browser_press, but 'focused element' is a distinguishing qualifier.
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 this tool over browser_fill, browser_press, or browser_click. It also does not mention whether the element must already be focused or whether this tool focuses it first, leaving selection and sequencing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_upload_fileC
Set files on a file input matched by selector. path is the local file.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| selector | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It does not state whether the file path must be absolute, whether the tool waits for the upload to complete, whether it triggers change events, or what happens if the selector does not match a file input. The description is minimal and leaves key behaviors unspecified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no wasted words. It front-loads the action and resource. However, it is so brief that it sacrifices useful detail, which is a minor structural tradeoff.
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 no annotations, no output schema, and 0% schema description coverage, the description is too thin. An agent needs to know whether the path is local-only, whether the upload is synchronous, and what success/failure looks like. The sibling set includes many browser interaction tools, and this one lacks the context needed to use it reliably.
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 explains that `path` is 'the local file' and `selector` matches the file input, which adds some meaning beyond the bare schema. However, it does not clarify the expected format of `path` (absolute vs relative), whether it supports URLs, or the selector syntax (CSS vs XPath).
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 specific verb ('Set files') and resource ('a file input matched by `selector`'), which clearly distinguishes it from sibling tools like browser_click or browser_type. It could be slightly clearer that this is for uploading files via an <input type=file> element, but the core purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives like browser_type or browser_fill. The description does not mention prerequisites (e.g., the page must be loaded, the input must be visible) or exclusions (e.g., not for drag-and-drop uploads). An agent must infer usage from the tool name and sibling context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_waitB
Wait for seconds.
| Name | Required | Description | Default |
|---|---|---|---|
| seconds | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry full behavioral transparency, but it only says 'Wait for seconds.' It does not disclose whether this blocks the page, whether it returns a value, or whether it has side effects. The behavior is implied but not elaborated.
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 with no filler. The essential information, the wait duration, is front-loaded and every word contributes to meaning.
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 one-parameter tool, the description is minimally viable: an agent knows to wait for the given seconds. However, with no annotations, no output schema, and sibling tools that wait for specific conditions, the description leaves some context gaps about exact behavior and when to prefer this over alternatives.
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 repeats the parameter name 'seconds' and indicates it is the wait duration, which adds minimal semantic value. However, schema description coverage is 0%, and the description does not provide constraints like minimum/maximum values or behavior when the default is used.
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 operation: wait for a specified number of seconds. It distinguishes this as a time-based wait, but it does not explicitly differentiate itself from sibling tools like browser_wait_for_load or browser_wait_for_element, so it misses the top score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use a fixed delay vs. waiting for a load event or an element. There are no alternatives, conditions, or exclusions mentioned, leaving the choice of tool to the agent's inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_wait_for_elementA
Wait for an element matching selector to appear. Set visible=True to
also require it to be rendered.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | ||
| visible | No | ||
| selector | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It clarifies that `visible=True` requires rendering, which is useful, but it does not disclose timeout behavior (whether failure throws or returns), polling behavior, or what happens if the element never appears.
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 tight sentences with no filler. The main action is front-loaded, and the `visible=True` clarification is placed where it adds immediate value without bloat.
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 operation, the description plus schema defaults is mostly sufficient to invoke the tool. However, with no output schema, no annotations, and no explanation of timeout or failure behavior, an agent cannot predict how the tool responds under negative conditions.
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 add parameter meaning. It explains `selector` and adds the rendered semantics for `visible`, but it omits `timeout` semantics such as units and default behavior, leaving an incomplete parameter picture.
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 uses a specific verb and resource: wait for an element matching `selector` to appear, with an explicit `visible=True` nuance. This distinguishes it from sibling tools like browser_wait and browser_wait_for_load by targeting element presence rather than page load or a generic delay.
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 the tool: when waiting for an element to appear. However, it does not explicitly contrast this with browser_wait, browser_wait_for_load, or other alternatives, and offers no exclusions or conditions for preferring a different tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_wait_for_loadC
Wait until the current tab's readyState is 'complete'.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It states the wait condition but does not disclose what happens on timeout (error? return?), whether it polls or uses an event, whether it returns any value, or whether it blocks indefinitely. The timeout parameter is in the schema but the description doesn't explain its behavior (e.g., default 15 seconds, what happens when exceeded).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that front-loads the core behavior. It earns its place with no filler, though it could have added a brief note about timeout behavior without becoming bloated.
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 with one optional parameter and no output schema, the description is close to adequate, but the missing timeout semantics and lack of failure behavior leave an agent uncertain about edge cases. Given the sibling set includes browser_wait and browser_wait_for_element, a brief differentiation 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 for the undocumented 'timeout' parameter. The description does not mention the timeout parameter at all, leaving the agent to infer its units (seconds? milliseconds?) and behavior from the schema's default of 15. This is a clear gap.
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 specific verb ('Wait') and a precise condition (readyState is 'complete'), which clearly identifies the tool's function. It is distinguishable from siblings like browser_wait and browser_wait_for_element because it targets page load state rather than a fixed delay or element presence, though it doesn't explicitly name those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: call this after navigation to ensure the page has finished loading. However, it does not explicitly state when to use this versus browser_wait or browser_wait_for_element, nor does it mention that it may be unnecessary for some SPAs or that readyState 'complete' may not mean all resources are loaded. The context is clear but exclusions/alternatives are not stated.
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.
23 tool updates
v0.1.0- First observed
browser_cdp - First observed
browser_click - First observed
browser_close_tab - First observed
browser_current_tab - First observed
browser_ensure_real_tab - First observed
browser_fill - First observed
browser_goto - First observed
browser_http_get - First observed
browser_js - First observed
browser_list_tabs - First observed
browser_new_tab - First observed
browser_page_info - First observed
browser_press - First observed
browser_screenshot - First observed
browser_scroll - First observed
browser_start_recording - First observed
browser_stop_recording - First observed
browser_switch_tab - First observed
browser_type - First observed
browser_upload_file - First observed
browser_wait - First observed
browser_wait_for_element - First observed
browser_wait_for_load
TDQS
Scored across 23 tools
Most tools map cleanly to distinct browser actions, but browser_current_tab and browser_page_info overlap on basic tab metadata, and browser_type vs browser_fill both handle text input. The descriptions help disambiguate, but an agent could plausibly misselect between these pairs.
All tools share the browser_ prefix and snake_case style, and the majority follow a clear verb_noun pattern (goto, click, close_tab, new_tab). However, a few names deviate with noun phrases or added prepositions like current_tab, page_info, ensure_real_tab, and wait_for_load, making the pattern mostly but not fully consistent.
At 23 tools, this is on the heavier side, but each tool serves a distinct browser automation capability—navigation, tabs, wait conditions, input, JS/CDP, upload, and recording. The count is justified for a browser control surface, though it slightly exceeds the typical well-scoped range.
The tool set covers most standard browser automation needs: navigation, tab management, interaction, waiting, screenshots, JS evaluation, raw CDP, file upload, and session recording. Minor gaps like explicit back/forward/reload, hover, or direct text extraction exist, but these are workable via browser_js or browser_cdp.
Maintenance
Related MCP Connectors
- openhelmOAuthai.openhelm
Autonomous cloud agent tasks: real browser + your tools, structured evidence-backed results.
AI-powered browser automation — navigate, click, fill forms, and extract data from any website.
AI-powered web automation. Navigate websites using AI agents for one page or a thousand
AI-powered web automation. Navigate websites using AI agents for one page or a thousand
Related MCP Servers
- AlicenseBqualityDmaintenanceA browser automation agent that enables Claude to interact with web browsers through the Model Context Protocol, allowing for actions like navigating websites, manipulating elements, and managing browser state.29MIT
- AlicenseAqualityBmaintenanceA Model Context Protocol (MCP) integration that provides Claude Desktop with autonomous browser automation capabilities. This agent enables Claude to interact with web content, manipulate DOM elements, execute JavaScript, and perform API requests.138 npm41TypeScriptMozilla Public 2.0
- AlicenseNot gradedqualityCmaintenanceTEX is an MCP server that enables Claude Code to perform browser tasks using plain language, driving a real browser to interact with web applications that lack APIs.MIT
- AlicenseNot gradedqualityCmaintenanceFast Browser is an MCP server that lets Claude Code and Codex drive an existing Chrome browser with your real profile, logins, and tabs, using a macro library for multi-step flows in single tool calls and supporting concurrent agents with isolated tab groups.57 npmMIT