jev-ra
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-raOpen the Hacker News front page and list the top 5 stories"
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-ra
A fast browser-use layer for CLI coding agents. Claude Code, Codex, or any MCP client hands jev-ra a goal. TypeSafe Jev, a System One decision model, picks the operation and the target element for every step in one round trip. Your agent plans, supplies the text values, reads what the page says, and takes over when jev-ra escalates. No second LLM runs inside the loop.

task | browser-use 0.13.10 + gemini-3-flash | jev-ra | |
Wikipedia: open the Gödel incompleteness article | 23,058 ms | 2,714 ms | 8.50× |
Google Flights ZRH→LON one-way, results on screen | 66,414 ms | 8,888 ms | 7.47× |
Olive Young category: sort by 신상품순 | 15,071 ms | 3,806 ms | 3.96× |
Medians over 5 runs each, 2026-09-18, same machine, same dedicated Chrome, both through OpenRouter. Each run was verified against the final page; 25 of 25 passed with no text-model calls. Method, p90, cost and raw rows.
Quick start
Claude Code
export OPENROUTER_API_KEY=sk-or-...
uvx jev-ra install claude
# then, in Claude Code: "open wikipedia.org and find the Gödel incompleteness article"Codex
export OPENROUTER_API_KEY=sk-or-...
uvx jev-ra install codex
# then, in Codex: "use jev-ra to open wikipedia.org and find the Gödel incompleteness article"Shell
export OPENROUTER_API_KEY=sk-or-...
uvx jev-ra doctor
uvx jev-ra run https://en.wikipedia.org/wiki/Main_Page "Open the Godel incompleteness article." \
--value "search_query=Godel incompleteness theorems"No Python setup? npx -y jev-ra install claude does the same thing through the npm launcher after
the 0.1.0 release (see Releases).
There is no install step either way: uvx runs jev-ra straight from PyPI and registers uvx jev-ra mcp as the server command. For a permanent copy, uv tool install jev-ra. The key is forwarded
from the variable you already exported and is never printed.
Related MCP server: Playwright MCP Server
How it works
your agent jev-ra Chrome
──────────── ─────────────── ─────────────
goal + values ──────────▶ observe ─────────────────────────▶ snapshot.js
│ elements, guards, page marker ◀──── one eval
▼
one request: operation? target?
value? prev_ok? goal_achieved? ──▶ Jev (~300 ms)
│
▼
freshness guard ──▶ act ──────────▶ trusted CDP input
│ (no JS clicks)
▼
verify url/title/text/fields
│
Result ◀──────────────┴── done · blocked · escalate · budgetOne decision per step. The only text typed into the page is text you supplied.
MCP tools
tool | arguments | what it does |
| url | Open a URL in the shared session and summarise the page. |
| goal, values?, max_steps? | Pursue a whole goal. Supply values for anything that must be typed. |
| query, goal?, max_pages? | Search, read the best results in parallel tabs, rank them against the goal. |
| instruction, values? | Take one decided step towards an instruction. |
| max_elements? | List the observed controls and the visible text. |
| mode? | Structured page data: |
| ref | Click one observed element by its ref. |
| ref, text | Type into one observed field. |
| ref, option | Select an observed dropdown option. |
| direction? | Scroll one viewport step up or down. |
| key | Press Enter, Escape or Tab. |
| - | Wait a moment and observe again. |
| - | JPEG of the current viewport. |
| - | Close the session held by the server. |
Every response carries elapsed_ms, and decisions plus cost whenever Jev was called.
CLI
command | what it does |
| pursue a goal from a URL until it is done or escalates |
| search the web and read the best results |
| open a URL and keep the session for later commands |
| list the controls and text of the open page |
| pull structured data out of the open page |
| take one decided step on the open page |
| click one observed element |
| type into one observed field |
| select an observed dropdown option |
| scroll the open page |
| press Enter, Escape or Tab |
| wait a moment and observe again |
| save a JPEG of the viewport |
| close the session kept by |
| run the MCP stdio server |
| print the agent guide, for saving as a skill file |
| register jev-ra as an MCP server with a coding agent |
| check the key, the endpoint, Chrome and one live decision |
| time the offline fixtures, and the live tasks with --live |
| run the real-site corpus |
open … close share one browser across invocations through a target id in
$XDG_STATE_HOME/jev-ra/session.json. Add --json to any command for the raw payload.
Python
from jev_ra import Agent
with Agent() as agent:
result = agent.run(
"Place the order with express shipping.",
values={"name": "Ada Lovelace", "email": "ada@example.com"},
url="https://example.com/checkout",
)
print(result.status, result.elapsed_ms, [step["target_label"] for step in result.steps])Values
TYPE_TEXT needs a string, and jev-ra will not invent one. Jev picks which of your values belongs in
the field it is about to fill, in the same round trip that picks the field. If nothing fits and no
text helper is configured, the run stops with needs_value and reports the field's label, role and
current value. You supply the value and call again. The default install has no text model.
When it hands control back
Result.status is done, blocked, escalate or budget. When a run stops short, reason is one
of needs_value, stuck_loop, unverified_done, stale, invalid_decision, too_many_controls,
blocked or budget. budget also names the budget that was hit (steps, decisions, time, or a
decision the provider would not answer) in detail. An escalation
also carries the top eight operation/target candidates with their probabilities, and up to 3,000
characters of page text — enough to decide what to do without observing again.
Verification is deterministic: after every action jev-ra compares url, title, text and field state,
and page_changed comes from a semantic page marker, not from the model.
Benchmarks
Five tasks, five runs each, every run verified against the page it left behind:
task | median | p90 | success | decisions | cost | ratio |
Wikipedia article | 2,714 ms | 3,179 ms | 5/5 | 3 | $0.00075 | 8.50× |
Google Flights search | 8,888 ms | 10,573 ms | 5/5 | 14 | $0.00317 | 7.47× |
Olive Young sort | 3,806 ms | 4,858 ms | 5/5 | 4 | $0.00204 | 3.96× |
Search with a citation | 2,416 ms | 2,571 ms | 5/5 | 4 | $0.00035 | no baseline |
Local checkout form | 2,191 ms | 2,338 ms | 5/5 | 5 | $0.00049 | no baseline |
Ratios are against browser-use 0.13.10 + gemini-3-flash flash_mode on the same machine and the
same Chrome: 23,058 ms, 66,414 ms and 15,071 ms respectively. Text-model calls across all 25 runs: 0.
A same-harness re-run of browser-use, five runs per task, was slower still: 9.07×, 8.31× and 7.26×.
Our median against browser-use's fastest single run of each task (15,759 ms, 49,914 ms,
17,647 ms) is 5.8×, 5.6× and 4.6×; the headline claim of 3-5× is below that.
jev-ra bench --live --runs 5 reproduces this table and prints PASS/FAIL against the v0.1 bar of
≥ 3× on every task with a baseline. Method, the browser-use rows, and how to reproduce
them.
jev-ra on the left, browser-use flash_mode on the right, same task, same Chrome, real time:

A run that finishes without doing the task counts as a failure, not as a time.
What it will not do
limit | what happens |
Canvas drawing, games, anything painted rather than marked up |
|
File upload |
|
CAPTCHA, bot walls, stealth |
|
Auth flows |
|
Pop-up windows, multi-tab workflows | the run stays on its own target |
Cross-origin iframes | reported as one opaque element; open shadow roots and same-origin iframes are traversed |
More than 250 visible controls |
|
Each returns an escalation with the page text and the ranked candidates.
FAQ
OpenRouter or a TypeSafe key? Either. jev-ra resolves JEV_RA_API_KEY, then TYPESAFE_API_KEY,
then OPENROUTER_API_KEY. A key starting sk-or- selects the OpenRouter route
(typesafe/jev-1.13); anything else goes direct (jev-latest). JEV_RA_ENDPOINT and
JEV_RA_MODEL override both. OpenRouter is easier to get; direct TypeSafe is roughly 140 ms faster
per decision according to the upstream measurements.
What does a task cost? Between $0.00035 (a search, 4 decisions) and $0.00317 (the whole Google Flights flow, 14 decisions). Cost scales with decisions, not with page size, because the state sent is the element table and the visible text, never the HTML.
Does it need its own Chrome? It will find or launch one on its own profile
($XDG_STATE_HOME/jev-ra/chrome-profile) and reuse it. Point BU_CDP_URL at a different Chrome to
override. Do not point it at a browser signed into anything you would not let an agent operate.
Why no text model? The host agent already has the context. A second model adds 675-938 ms per
field and invents values. You can still configure one with JEV_RA_TEXT_MODEL.
Configuration
variable | effect |
| key, in that order of precedence |
| override the route |
| path to the browser binary to launch |
| an existing Chrome to drive instead of launching one |
| e.g. |
| budgets (40 / 80 / 120) |
|
|
| search endpoint template, |
| optional text helper, off by default |
$XDG_CONFIG_HOME/jev-ra/config.json sets the same keys; the environment wins.
Credits
jev_ra/browser/snapshot.js and the NEXT_ACTION / TARGET instruction texts are adapted from
browser-use/jev-ultrafast (MIT), where they were
measured. Chrome is driven through
browser-harness (MIT).
See THIRD_PARTY_NOTICES.md.
MIT licensed. Contributing · Security · Agent guide · Usage reference · 한국어
Available Tools
14 toolsbrowser_actD
Take one decided step towards an instruction on the current page.
| Name | Required | Description | Default |
|---|---|---|---|
| values | No | ||
| instruction | 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, and it reveals almost nothing. It does not state whether the tool mutates page state, what side effects occur, what limitations apply, or how the step is decided and executed. This is critically insufficient for a tool that likely performs arbitrary browser actions.
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 short and front-loaded, but it is under-specified rather than concisely informative. One vague sentence does not earn its place because it lacks the detail necessary for correct use of the 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 absence of annotations, output schema, and parameter descriptions, plus a large set of siblings, the overall context is severely incomplete. The description provides no information about return behavior, side effects, parameter semantics, or when this tool should be selected, making it impossible to invoke correctly with confidence.
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%, yet the description does not compensate by explaining either parameter. 'instruction' is echoed from the schema without additional meaning, and 'values' is entirely unexplained. An agent cannot reliably know what to provide for 'values' or what formats the instruction may take.
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 'Take one decided step towards an instruction on the current page' is vague and does not identify a concrete action or resource. It restates the generic act concept without specifying what kind of step (navigation, input, selection, etc.) is taken, and it does not distinguish this tool from the many sibling browser tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use browser_act versus alternatives like browser_click, browser_type, or browser_run. The phrase 'towards an instruction' implies high-level task execution, but there is no explicit context, prerequisites, or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_clickB
Click one observed element by its ref.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | 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 states what is clicked but does not mention side effects such as navigation, event firing, or invalid refs, and no auth/state changes are disclosed.
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 communicates the action, target, and identifier with no filler or redundant detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool with no output schema, the core action and prerequisite are present. Missing details about ref provenance, side effects, and alternative interactions keep it from being fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Since schema description coverage is 0%, the description must compensate; it does minimally by clarifying that the 'ref' belongs to an observed element. However, it does not explain how to obtain the ref or its expected format.
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 the core action ('Click') and the specific resource ('one observed element'), identified by its ref. This clearly distinguishes it from generic browser commands, though it does not explicitly differentiate it from siblings like browser_act.
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 'observed element by its ref' implies the tool is for clicking elements previously returned by an observation step, providing a precondition. However, it offers no explicit when-to-use or when-not-to-use guidance and no alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_closeA
Close the browser session held by this server.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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 that the browser session is closed, which implies a destructive action, but does not detail consequences like losing unsaved state or invalidating other tool calls. For a simple close operation, 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?
A single, direct sentence 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 tool with no output schema, the description is sufficient for an agent to understand its purpose. It could mention return behavior (e.g., success/failure), but this is not critical for a close operation. The description is complete enough.
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 is empty with 100% coverage. No parameter information is needed, and the description does not need to compensate for missing parameter docs. Baseline of 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('close') and resource ('browser session held by this server'). It is unambiguous and distinguishes itself from siblings like browser_open or browser_act, which perform other actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide explicit when-to-use guidance or mention alternatives. While it is obvious this is a cleanup operation, there is no context about when it should be called (e.g., after finishing all browsing) or what happens if called prematurely. It is minimally acceptable but lacks proactive routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_extractB
Pull structured page data from the DOM: text, elements, links, tables or main.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | text |
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 the tool reads from the DOM and can return categorized structured data, which implies a non-mutating extraction. However, it does not describe response shape, limits, or behavior on dynamic or incomplete page content.
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 no filler. 'Pull structured page data from the DOM' communicates the core action, and the colon-delimited list adds helpful mode variety 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?
With no output schema and no annotations, the description should explain return values and exact accepted modes. It lists mode-like categories but omits details such as what 'main' returns, whether the output is JSON/text, and whether extraction waits for page readiness. This leaves meaningful gaps for an agent invoking the 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?
The schema has only a bare 'mode' string with no enum or description (0% coverage). The description compensates by listing candidate modes (text, elements, links, tables, main), but it does not explicitly define them or confirm they are valid values for the mode 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 description uses a specific verb ('Pull') and resource ('structured page data from the DOM') and enumerates content categories: text, elements, links, tables, or main. It is not explicitly differentiated from browser_observe/browser_search, but the DOM/structured extraction framing gives clear purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use browser_extract versus siblings like browser_observe or browser_search, nor any exclusions. The description solely states what it does, leaving selection entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_observeC
List the observed controls and the visible text of the current page.
| Name | Required | Description | Default |
|---|---|---|---|
| max_elements | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the burden of behavioral disclosure. It only states the action and result but does not disclose whether it is read-only, what happens if no page is loaded, or any side effects. The implicit 'observe' suggests non-destructive, but this is not explicit. The description lacks transparency about 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 unnecessary words. It front-loads the action and resource. However, it is too brief, bordering on under-specification, but structurally it is concise and not 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 tool's simplicity (one optional parameter, no annotations, no output schema), the description should provide enough information for correct invocation. It does not explain what 'observed controls' means, does not describe the output format, and does not clarify the max_elements parameter. It is incomplete for an agent to use effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has one parameter (max_elements) with 0% schema description coverage. The description does not mention this parameter at all, so the agent cannot infer its purpose or how to use it. The description fails to compensate for the missing schema documentation, leaving the parameter's meaning entirely ambiguous.
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 ('List') and a resource ('observed controls and the visible text of the current page'). It distinguishes itself from siblings like browser_search and browser_extract by specifying what it returns, though it does not explicitly name alternatives. This meets the 'clear but no sibling differentiation' criterion.
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 like browser_extract or browser_search. It does not mention contexts where this tool is preferred, nor does it state exclusions or prerequisites. No usage context is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_openB
Open a URL in the shared browser session and summarise the page.
| 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 disclosing behavior. It mentions opening a URL and summarizing the page, but does not disclose side effects such as whether the current page is replaced or a new tab is opened, whether navigation is persistent, or any potential errors (e.g., invalid URLs). The shared-session mention is a useful detail but insufficient for full transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core action ('Open a URL') and adds the summarization behavior. Every word contributes meaning with no redundancy or filler.
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, so the description covers the basic action and output (summary). However, it lacks usage guidance and does not elaborate on return format or failure modes. Given the lack of an output schema, the description should have clarified what the summary looks like, but it is adequate for a basic 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?
The schema provides only the parameter name 'url' with type string and no description, yielding 0% schema coverage. The description adds little beyond restating 'URL' — it does not specify expected formats (e.g., http/https), whether relative paths are allowed, or any constraints. Since the description must compensate for low schema coverage, this is a notable 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 ('open') and resource ('URL'), and clarifies it operates within the 'shared browser session' and also summarizes the page. This distinguishes it from siblings like browser_search (which searches) or browser_observe (which observes), making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like browser_act, browser_search, or browser_observe. There are no exclusions, prerequisites, or conditions for selection, leaving the agent to infer appropriate usage from the name and description alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_pressB
Press Enter, Escape or Tab.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description bears full responsibility. It states the keys but doesn't disclose side effects, required focus, or error behavior on invalid keys. It implies only these three keys are valid, which is helpful, but lacks depth. The description does not contradict any annotations because none exist.
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 with no redundancy. The action and allowed keys are front-loaded. This is an appropriate 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's simplicity and one parameter, the description covers the allowed keys but omits context such as whether the press applies to the current page, focus requirements, or outcome. No output schema is present, so return behavior is undefined. For a key press action, this may be insufficient for an agent to use it correctly without additional assumptions.
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 zero description coverage, so the description must explain the 'key' parameter. It lists the allowed values (Enter, Escape, Tab), which is essential and goes beyond the schema. However, it doesn't explicitly state that other values are invalid or provide format details. This adds meaning but could be more explicit.
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 clear action (press) and specific keys (Enter, Escape, Tab), making its purpose unambiguous. It distinguishes from siblings like browser_click or browser_type by focusing on keyboard shortcuts. However, it doesn't explicitly contrast with siblings, so a 4 is appropriate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention that this is for special keys rather than text input (browser_type) or that it should be used after focusing an element. No exclusions or alternatives are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_runC
Pursue a whole goal on the current page. Supply values for anything that must be typed.
| Name | Required | Description | Default |
|---|---|---|---|
| goal | Yes | ||
| values | No | ||
| max_steps | No |
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 disclosing behavior. It reveals the tool may type values, but it does not disclose that the tool will likely navigate, click, wait, or perform multiple autonomous steps, nor does it mention side effects, failure modes, or the meaning of max_steps. This is a significant transparency gap for an autonomous browser-agent 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 two sentences are short and front-loaded with the core purpose, and there is no fluff. However, the description is so terse that it omits important operational details, so its brevity is not fully 'appropriate' for a tool of this complexity.
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 an autonomous, multi-step browser runner with no annotations and no output schema, so the description needs to explain behavior, bounds, and success/failure signals. It only mentions pursuing a goal and supplying typed values, leaving max_steps, return behavior, navigation effects, and error cases entirely unaddressed.
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 gives weak semantic hints for 'goal' and 'values' ('Supply values for anything that must be typed'), but it does not clarify the expected format of the goal, how values map to fields/inputs, or what max_steps controls. The description adds only minimal meaning beyond the raw parameter names and types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear goal-directed action ('Pursue a whole goal on the current page') and 'whole goal' signals this is a higher-level operation than sibling primitive actions like browser_click or browser_type. It does not fully define what 'pursue' entails, but it distinguishes the tool from the surrounding action-level siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The instruction to 'Supply values for anything that must be typed' gives some practical guidance, and the phrase 'whole goal' implies this is for multi-step tasks rather than single actions. However, it never explicitly says when to prefer browser_run over browser_act or the other siblings, nor does it mention exclusions such as navigation limits or page-load expectations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_screenshotA
Capture the current viewport as a JPEG.
| 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 full burden. It conveys that the operation is non-mutating ('capture'), scopes it to the current viewport rather than the full page, and specifies the JPEG output format. It does not disclose resolution or encoding details, but for a zero-parameter read-only tool this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no filler. Every word adds meaning: capture (action), current viewport (scope), JPEG (format).
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 action with no output schema, the description covers the essential operational facts: what is captured, from where, and in what format. It omits minor details like image dimensions or return mechanism, but nothing critical is missing for invoking 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?
There are no parameters, so the schema is trivially complete and the description need not explain any inputs. The baseline of 4 for zero-parameter tools 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 names a specific verb ('capture'), a precise target ('current viewport'), and an output format ('JPEG'). This distinguishes it from action-oriented siblings like browser_click or browser_type, and from observation tools, because none claim to produce a screenshot.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when a screenshot should be preferred over browser_observe or browser_extract, nor any exclusion criteria. The description simply states what it does, leaving the agent to infer 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.
browser_scrollA
Scroll the page one viewport step up or down.
| Name | Required | Description | Default |
|---|---|---|---|
| direction | No | down |
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 the step size and direction but omits details like return value, behavior at page boundaries, or whether it scrolls the main viewport or a frame. This is minimal for an unannotated 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?
A single, front-loaded sentence with no wasted words. It delivers the core action and parameter semantics efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool with no output schema, the description covers the essential action and direction. However, it omits expected return behavior and any implicit prerequisites (e.g., page must be open), which could leave the agent uncertain about what to expect.
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 only defines 'direction' as a string with default 'down' and no enum or description. The description adds critical meaning by specifying valid values ('up or down') and the step size ('one viewport step'), which the agent needs to invoke the tool correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (scroll), the resource (page), and the scope (one viewport step up or down). It distinguishes this tool from siblings like browser_click or browser_type, which have entirely 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?
There is no guidance on when to use this tool versus alternatives, nor any conditions or prerequisites. It simply states what the tool does, leaving the agent to infer when scrolling is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_searchC
Search the web, read the best results in parallel tabs, and rank them against the goal.
| Name | Required | Description | Default |
|---|---|---|---|
| goal | No | ||
| query | Yes | ||
| max_pages | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the workflow (search, read in parallel tabs, rank against goal) but does not mention side effects like opening or leaving browser tabs, whether it requires an existing session, or any state changes. This is a significant gap for a tool that likely manipulates browser state.
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 that efficiently conveys the core action. It is concise and avoids fluff. However, it lacks structural elements like explicit use-case context or parameter hints, so it is not perfectly structured for quick agent parsing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, no annotations, and three parameters (one undocumented), the description is incomplete. It does not specify what the tool returns, how results are presented, what 'max_pages' controls, or any side effects. An agent would struggle to call this tool correctly without additional documentation.
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 only hints at the 'goal' parameter ('rank them against the goal') but does not explain 'query' or 'max_pages'. 'max_pages' is especially opaque; its role in controlling the number of results or pages is unstated. The description fails to compensate for the lack of schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('Search'), a resource ('the web'), and outlines the process ('read the best results in parallel tabs, and rank them against the goal'). It is distinct from sibling tools like browser_click or browser_screenshot, but does not explicitly name or contrast with alternatives, so it falls short of a perfect 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no indication of when to use this tool versus the many sibling browser tools. It does not mention any prerequisites, exclusions, or alternative tools. The agent must infer from the name and description alone, which is insufficient guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_selectC
Select an observed dropdown option by its value or label.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | Yes | ||
| option | 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 disclosing behavior. It only says 'select an observed dropdown option' – it doesn't mention that this performs a UI mutation, whether it requires a preceding browser_observe call, or whether it triggers events or changes the page state. It also fails to disclose any constraints like the option needing to be visible or in the DOM.
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?
While the description is short (one sentence), it is under-specified rather than concise. It lacks any structure (e.g., prerequisites, examples, or parameter explanations) that would make it useful. Every word is needed but critical information is missing, so the brevity is a liability, not an asset.
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 part of a complex browser automation suite with 14 siblings, no output schema, and no annotations, the description is far from complete. It doesn't explain how to obtain the 'ref', what happens after selection, or any error conditions. The agent cannot reliably call this tool correctly based on the current definition.
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 zero description coverage, so the description must explain what 'ref' and 'option' mean. It only hints that 'option' can be a value or label, but gives no explanation of 'ref' – presumably a reference to the dropdown element obtained from observation, but this is never stated. This leaves the agent guessing about the required format and source of both 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 ('select') and a resource ('observed dropdown option'), and specifies that it works by value or label. This distinguishes it from siblings like browser_click (which clicks any element) and browser_type (which types text). However, it doesn't explicitly contrast with browser_act, which might be a generic action tool, so it's not a perfect 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives. It doesn't state that the dropdown must be observed first, nor does it explain when to prefer this over browser_click or browser_type. The need for prior observation is implied by 'observed' but never made explicit, and no exclusions or alternative routing are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_typeC
Type text into one observed field by its ref.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | Yes | ||
| text | 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 explaining behavior, but it only states that text is typed. It does not disclose whether existing field content is replaced or appended, whether events fire, whether the field must be visible/focused, 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, front-loaded sentence with no filler. It is concise, though the brevity borders on under-specification.
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 browser automation action, the description omits practical details an agent needs: what the tool returns, failure conditions, whether the ref comes from a prior observe call, and how typing interacts with the page state. The lack of annotations and output schema makes these omissions more significant.
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 clarifies that 'ref' identifies the field and 'text' is what gets typed, but it doesn't explain how to obtain a valid ref, what formats are accepted for text, or any constraints such as maximum length or special characters.
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 names a specific action ('Type text') and a specific target ('one observed field by its ref'), which is clear and differentiates it from click/select/press siblings. It doesn't elaborate on what counts as an 'observed field,' but the core operation 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 gives no guidance about when to use this tool versus browser_press, browser_act, or browser_click, and no mention of prerequisites like obtaining a ref from browser_observe. Usage context is only implied by the action itself, not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_waitB
Wait a moment and observe again.
| 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 must disclose behavior. It says 'wait a moment' but gives no specifics on duration, conditions (e.g., network idle), timeouts, or what 'observe again' returns. The behavior is vague and under-specified.
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 efficient for a simple tool. It front-loads the key action ('wait') and includes the follow-up ('observe again'). It's not over-verbose, but it could be slightly more informative without losing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no params, no output schema), the description is minimally acceptable. However, it lacks details like the default wait duration, whether it waits for a specific condition, and what the observation returns. An agent might not know what to expect when calling it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. The description doesn't need to explain parameters, and the schema confirms there are none. No additional value needed here.
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 clear action: wait and then observe again. It distinguishes itself from sibling tools like browser_observe by implying a preceding wait, but it doesn't explicitly differentiate from other wait-like actions or name 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?
No guidance on when to use this tool versus other browser actions. It doesn't mention scenarios where waiting is needed (e.g., page load, element appearance) or suggest alternatives. The description is purely functional with no contextual usage hints.
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.
14 tool updates
v0.1.0- First observed
browser_act - First observed
browser_click - First observed
browser_close - First observed
browser_extract - First observed
browser_observe - First observed
browser_open - First observed
browser_press - First observed
browser_run - First observed
browser_screenshot - First observed
browser_scroll - First observed
browser_search - First observed
browser_select - First observed
browser_type - First observed
browser_wait
TDQS
Scored across 14 tools
Most tools are clearly distinct, but browser_act overlaps with browser_click/type/select/etc. as a generic 'take a step' action, and browser_run could be confused with act at a higher level. The descriptions help distinguish them, but an agent might occasionally misselect between generic and specific actions.
All 14 tools follow the exact same browser_<verb> pattern using lowercase snake_case. The naming is highly predictable and consistent, making it easy to infer a tool's purpose from its prefix and verb.
14 tools is a well-scoped count for a browser automation server, covering navigation, observation, interaction, and high-level task execution without being bloated. Each tool has a clear role in the workflow.
The surface covers the core browser lifecycle (open, observe, interact, navigate, close) and includes both low-level and high-level operations. Minor gaps like back/forward navigation or page refresh are missing, but agents can work around them using open or run.
Maintenance
Related MCP Connectors
Stealth web browser for agents: search, fetch, click, download and type in persistent MCP sessions.
Web search, browser automation, scraping, crawling and CAPTCHA solving for AI agents.
Hyperbrowser MCP — wraps the Hyperbrowser AI-agent browsing API
AI-powered browser automation — navigate, click, fill forms, and extract data from any website.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables real browser automation as tools in Cursor, Claude Desktop, Windsurf, and any MCP-compatible client, allowing AI agents to interact with web pages through natural language.8 npmMIT
- FlicenseNot gradedqualityDmaintenanceEnables browser automation through the MCP protocol, allowing AI agents to control a real browser using accessibility snapshots and natural language commands.-
- AlicenseNot gradedqualityDmaintenanceEnables browser automation through the Claude Chrome Extension, allowing agents to navigate websites, fill forms, take screenshots, and debug web apps via standard MCP protocols.1MIT
- FlicenseNot gradedqualityCmaintenanceEnables remote browser automation via MCP, allowing models to open pages, read snapshots, click, fill, and select elements using Playwright, with built-in security restrictions against sensitive actions.-