jevpilot
Drives a real Google Chrome (or Chromium-based) browser to complete goal-level web tasks, with capabilities for navigating, observing, acting on pages, managing tabs, and running tasks headlessly or in headed mode.
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., "@jevpilotreorder my usual coffee on Amazon and ask before paying"
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.
jevpilot — a fast Jev browser MCP for agents
English | 简体中文
jevpilot is an MCP server that gives an agent a browser that finishes tasks on its own. The agent sends a goal; jevpilot drives a real Chrome step by step, with Jev choosing each action, and returns a verified result or a concrete question.
jevpilot is not an official TypeSafe project. Jev is TypeSafe's paid model; you need a key from the TypeSafe API or OpenRouter.
Highlights
Goal-level tasks. One tool call per task instead of one per click; Jev picks each step in about 0.3–0.9 s.
Hands back instead of guessing. When unsure, missing a value or needing approval, the session stops with a clear status and question, and the agent resumes the same session.
Safety rules before the model. Login walls, bot challenges and error pages are detected by rules; buy, pay and delete buttons wait for approval; typed fields are re-checked before a form is submitted.
Secrets stay out of prompts. Passwords are passed as references and typed by the server on the sites you allow; neither the agent nor Jev sees them.
Network guard. Cloud metadata addresses are blocked by default, with an optional private-network mode and a domain allowlist.
Desktop and server. Headless Chrome by default on Windows and Linux; the Docker image runs Chromium under Xvfb; stdio or token-protected HTTP.
Easy to operate. Recovers from a browser crash,
jevpilot-mcp doctorchecks the setup, optional usage and decision logs, no telemetry.
Related MCP server: OpenChrome
Why not just Playwright MCP?
With Playwright MCP the agent reads every page and issues every click itself. With jevpilot the agent delegates the whole task:
Playwright MCP | jevpilot | |
Who plans each click | the agent | Jev, inside the server |
Tool calls per task | 7.1 | 1.5 |
Agent tokens per task | 49k | 11k |
Success rate, multi-step tasks | 83% | 100% |
Success rate, real sites not used in development | 66% | 89% |
Success rate, sites behind bot protection | 0% | 100% |
Median time per task, multi-step / real sites | 9.0 s / 16.9 s | 5.1 s / 9.6 s |
Passwords | plain text in the agent context | typed by the server, never seen by the agent |
Buy / pay / delete buttons | up to the agent | wait for the agent's approval |
Bot challenges and login walls | the agent has to notice | detected and handed back with the reason |
Measured in September 2026 on Windows, both sides running headless Chrome and driven by the same agent model, back to back. Small samples on public sites: treat the numbers as indicative.
Platforms and browser
Platform | Default browser | How it runs |
Windows x64 | Google Chrome (Microsoft Edge if Chrome is not installed) | headless by default, temporary profile |
Linux x64 / arm64 |
| headless by default; Docker runs Chromium under Xvfb |
macOS | not supported yet |
Any other Chromium-based browser, a persistent profile or your own running browser can be configured: see Configuration. Node.js 22 or newer is required.
Set JEVPILOT_DISPLAY=headed to use a headed browser (off-screen on Windows, Xvfb or an existing display on Linux).
Quick start
Each release on GitHub Releases ships the package jevpilot-X.Y.Z.tgz and SHA256SUMS.txt. Add it to your MCP client and keep the key in your environment rather than in the file.
Claude Code (.mcp.json):
{
"mcpServers": {
"jevpilot": {
"command": "npx",
"args": [
"-y",
"--package",
"https://github.com/bloudhood/jevpilot/releases/download/v0.1.0/jevpilot-0.1.0.tgz",
"jevpilot-mcp"
],
"env": { "JEV_PROVIDER": "openrouter", "JEV_API_KEY": "${JEV_API_KEY}" }
}
}
}Codex (config.toml):
[mcp_servers.jevpilot]
command = "npx"
args = ["-y", "--package", "https://github.com/bloudhood/jevpilot/releases/download/v0.1.0/jevpilot-0.1.0.tgz", "jevpilot-mcp"]
env = { JEV_PROVIDER = "openrouter" }
env_vars = ["JEV_API_KEY"]Use JEV_PROVIDER=typesafe for a TypeSafe key. On native Windows, Claude Code needs "command": "cmd" with "args": ["/c", "npx", ...]. Check the setup with jevpilot-mcp doctor (the same npx command with doctor at the end).
Tools
browser_run starts a session toward a goal; browser_resume continues it with values, an approval or a new goal. browser_observe, browser_act, browser_navigate, browser_tabs and browser_close give the agent manual control when it wants it, and jev_decide calls Jev directly.
Documentation
Configuration: settings, browser profiles, network safety, HTTP transport, Docker
Tools: inputs, results and the compatibility policy
Privacy: what is sent to Jev at each step
Use jevpilot on sites and accounts you are allowed to automate. It does not solve CAPTCHAs: a detected challenge is handed back.
License
MIT
Available Tools
8 toolsbrowser_actB
Perform manual browser operations against current element refs in an existing session. Returns a fresh snapshot, so a separate browser_observe is not needed after it. The orchestrator rechecks targets and applies the same domain and irreversible-action gates.
| Name | Required | Description | Default |
|---|---|---|---|
| ops | Yes | ||
| session | Yes | Session ID returned by browser_run. | |
| allow_irreversible | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | |
| title | Yes | |
| trace | Yes | |
| usage | Yes | |
| reason | Yes | |
| status | Yes | |
| timing | Yes | |
| details | No | |
| session | Yes | |
| question | Yes | |
| snapshot | Yes | |
| screenshot_path | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses post-conditions (returns a fresh snapshot) and orchestration behavior (rechecks targets, applies domain and irreversible-action gates), which hints at the allow_irreversible parameter's role. It stops short of explaining what the gates actually block, whether mutations are reversible, or failure/partial-batch semantics for the ops array.
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?
Three tight sentences with no filler, and the core purpose is front-loaded before the snapshot and gating details. Efficient, though the gating sentence is somewhat jargon-dense for the space it consumes.
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?
An output schema exists, so return-value explanation is not required, yet the description adds a useful note about the fresh snapshot. For a multi-op mutation tool with no annotations and only 33% schema coverage, the description leaves meaningful gaps around the irreversible gate semantics and operation-specific requirements.
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 low (33%) and the description adds nothing about the three top-level parameters or the meaning of the nested ops fields. Critically, the 14-value action enum and per-action required fields (ref, name, text, value_key, etc.) are not clarified, even though the schema descriptions only partially cover them. The description does not compensate for the coverage 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?
States a specific verb (perform) and resource (manual browser operations) scoped to 'current element refs in an existing session', which distinguishes it from browser_run (new session) and browser_observe (observation only). It does not enumerate the operation set from the action enum, so the exact scope remains slightly abstract, but an agent can still tell what class of tool this is.
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 'in an existing session' implies it should be used after browser_run, and 'a separate browser_observe is not needed after it' clarifies its relationship to that sibling. However, there is no explicit when-to-use guidance versus browser_navigate, browser_tabs, or browser_observe beyond that single aside, and no stated prerequisites for the session.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_closeA
Close a browser session and its tab, and delete its temporary handoff files. The shared browser remains available for other sessions.
| Name | Required | Description | Default |
|---|---|---|---|
| session | Yes | Session ID returned by browser_run. |
Output Schema
| Name | Required | Description |
|---|---|---|
| closed | Yes | |
| session | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose concrete side effects: the session and its tab are destroyed and temporary handoff files are deleted. It also reassures that the shared browser is unaffected, which is genuinely useful context. It omits error/idempotency behavior for an invalid or already-closed session.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, with the destructive action front-loaded and the non-destructive scoping note second.
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?
An output schema exists, so return values need no explanation, and for a one-parameter teardown tool the description covers destruction scope and blast radius. Minor gaps remain around failure behavior, but nothing essential to calling it 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?
Schema description coverage is 100% and the single 'session' parameter is already documented as 'Session ID returned by browser_run'. The description adds no format or constraint details beyond the schema, so the baseline 3 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?
States a specific verb and resource: 'Close a browser session and its tab', plus the side effect of deleting temporary handoff files. The clause 'The shared browser remains available for other sessions' scopes the operation and implicitly distinguishes it from any global shutdown, though it never names a sibling like browser_tabs or browser_resume.
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?
Usage is implied (close a session you obtained from browser_run once finished) but there is no explicit when-to-use, when-not-to-use, or named alternative. The statement that the shared browser survives is the closest thing to a routing hint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_observeA
Read the current page in an existing session without taking action. Use full detail when the compact snapshot omits needed content. A screenshot path may be returned for handoffs when safe.
| Name | Required | Description | Default |
|---|---|---|---|
| detail | No | ||
| session | Yes | Session ID returned by browser_run. | |
| screenshot | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | |
| title | Yes | |
| trace | Yes | |
| usage | Yes | |
| reason | Yes | |
| status | Yes | |
| timing | Yes | |
| details | No | |
| session | Yes | |
| question | Yes | |
| snapshot | Yes | |
| screenshot_path | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses that the call takes no action and that a screenshot path may be returned 'when safe', but says nothing about permissions, rate limits, session validity, or what 'safe' means. Partial behavioral coverage only.
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?
Three short sentences, front-loaded with the core read-only purpose. Every sentence contributes something, though the trailing screenshot clause is vague enough that it earns slightly less than a perfect score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value explanation is not required, and the description covers the essential read-only purpose and detail escalation. The remaining gap is the un-explained 'screenshot' boolean against thin schema coverage, which keeps it from a 5.
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 33%: 'session' is documented in the schema, 'detail' has an enum but no prose, and 'screenshot' is entirely undocumented. The description compensates for 'detail' with the compact-vs-full guidance and hints at screenshot output, but the boolean 'screenshot' parameter remains unexplained.
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+resource ('Read the current page') and explicitly scopes it as non-mutating ('without taking action') in an 'existing session', which separates it from action-oriented siblings like browser_act and browser_navigate. It does not name those siblings, so it stops 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?
Gives a concrete conditional for the 'detail' parameter ('Use full detail when the compact snapshot omits needed content'), which tells the agent when to escalate. No explicit when-not-to-use or exclusion relative to browser_act/browser_tabs, so it is clear context without full routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_resumeA
Continue an existing session after a handoff. Supply missing values, refine the goal, or approve one pending irreversible action; approval is scoped to that action.
| Name | Required | Description | Default |
|---|---|---|---|
| dialog | No | ||
| values | No | ||
| session | Yes | Session ID returned by browser_run. | |
| goal_update | No | ||
| allowed_domains | No | ||
| allow_irreversible | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | |
| title | Yes | |
| trace | Yes | |
| usage | Yes | |
| reason | Yes | |
| status | Yes | |
| timing | Yes | |
| details | No | |
| session | Yes | |
| question | Yes | |
| snapshot | Yes | |
| screenshot_path | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It does disclose one genuinely useful behavioral trait — approval is scoped to a single pending irreversible action — but omits what happens on an expired session, whether resumption is idempotent, and what happens to values already supplied.
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 tight sentences, front-loaded with the continuation purpose. The scoping clause about approval earns its place by disambiguating a risky operation, though the enjambed sentence mixes three separate modes.
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?
An output schema exists, so return values need not be described, but for a 6-parameter continuation tool with nested objects, no annotations, and low schema coverage the description leaves gaps on allowed_domains semantics, secret resolution, and failure modes.
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 only 17%, with just 'session' documented. The description partially compensates by mapping to concepts (values, goal update, approval, irreversible action), but 'allowed_domains', the secret_ref/origins wrapper, and 'dialog.value_key' are never explained, leaving half the parameters opaque.
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+resource ('Continue an existing session after a handoff') and enumerates the concrete modes: supplying values, refining the goal, or approving one pending irreversible action. This implicitly separates it from browser_run (which starts a session) and browser_act, though it never names a sibling explicitly.
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 'after a handoff' supplies a clear triggering condition, and the three listed activities describe when each capability applies. It stops short of stating exclusions or naming an alternative tool to use instead when no handoff has occurred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_runA
Open a new browser session and work toward a goal. Jev acts fast on its own and hands back early with a question when unsure; continue with browser_act / browser_resume from the returned snapshot. Returns a session ID and a status; handoff statuses include a concrete question for the agent or user. Reuse the session with browser_resume, browser_observe, browser_act, and browser_close.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Initial HTTP(S) URL. Omit to start on a blank tab. | |
| goal | Yes | Task to complete in the browser. | |
| budget | No | Per-invocation limits. | |
| values | No | Every piece of text the page needs typed (search terms, form fields) must be given here as { short field description: text }. Text inside the goal is never typed. Secrets use {secret_ref: 'env:NAME' or 'file:PATH', origins: [...] }. | |
| profile | No | Configured engine profile name; defaults to the server engine. | |
| success | No | Optional checks that are false now and become true only when the goal is done, e.g. url_matches for the result page. Checks that already hold on the start page are ignored. | |
| thresholds | No | Per-session decision confidence thresholds (0 to 1). | |
| constraints | No | Navigation allowlist and irreversible-action gate. | |
| navigation_timeout_ms | No | Navigation timeout in milliseconds; defaults to 30000. |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | |
| title | Yes | |
| trace | Yes | |
| usage | Yes | |
| reason | Yes | |
| status | Yes | |
| timing | Yes | |
| details | No | |
| session | Yes | |
| question | Yes | |
| snapshot | Yes | |
| screenshot_path | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does disclose meaningful behavior: Jev acts autonomously and 'hands back early with a question when unsure', plus the handoff-status semantics. This is genuine runtime behavior not expressed in the schema, though it omits any note on irreversible-action or auth implications (those live only in the schema).
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?
Purpose is front-loaded in the first sentence and the follow-up guidance is compact. It is slightly repetitive about the resume/act siblings, but every sentence carries useful routing information.
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 complex autonomous tool with an output schema, the description covers the goal, the handoff model, and the continuation path. Return-format details are correctly left to the output schema, so the remaining gaps are minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 9 parameters and their nested fields thoroughly. The description adds nothing parameter-specific, so the baseline 3 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?
States a specific verb and resource ('Open a new browser session and work toward a goal'), which is clear and distinct from the resume/reuse flow. It names the session-reuse siblings but does not explicitly contrast with browser_navigate, which also concerns browsing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly tells the agent how to continue after a handoff ('continue with browser_act / browser_resume from the returned snapshot') and that the session can be reused with several siblings. However, it never states when to choose browser_run versus browser_navigate, and gives no exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_tabsC
List, select, or close tabs owned by a browser session.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| tab_id | No | ||
| session | Yes | Session ID returned by browser_run. |
Output Schema
| Name | Required | Description |
|---|---|---|
| tabs | No | |
| closed | No | |
| reason | No | |
| status | No | |
| session | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, yet it does not disclose that 'close' is destructive/irreversible, what 'select' changes (active/focused tab state), or any permission requirements. The only added context is the ownership scoping phrase 'owned by a browser session.'
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 that wastes no words and enumerates the modes efficiently. It is arguably too terse, but there is 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?
An output schema exists so return values need not be explained, but with no annotations and only one of three parameters documented, the action-to-parameter contract (especially tab_id) is left incomplete for a tool that can also destroy state via close.
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 only 33% (just the session param). The description does not clarify that tab_id is required for select/close (it is not in the required list), how to obtain a tab_id, or how the action enum interacts with tab_id. It adds no meaning 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 three specific verbs (list, select, close) against a clear resource (tabs owned by a browser session). It does not explicitly contrast with siblings like browser_close or browser_run, but the resource scope is unambiguous enough for selection.
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 beyond restating the three enum actions. It does not say when to pick this over browser_close for tearing down a session, nor which action to choose in a given situation, so the agent must infer everything.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jev_decideC
Pass a state and typed questions directly to the configured decision port. This does not create or change a browser session.
| Name | Required | Description | Default |
|---|---|---|---|
| state | No | ||
| questions | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| model | Yes | |
| usage | Yes | |
| answers | Yes | |
| latency_ms | 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 burden of behavioral disclosure. It states one non-behavior (does not create or change a browser session) but omits whether the tool mutates state, has side effects, requires authentication, or how the decision port behaves. This is a significant gap for a tool whose name implies decision-making.
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 wasted words, and the purpose is front-loaded before the browser-session disclaimer. It is structurally clean, though the extreme terseness leaves little room for important context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given two parameters, nested object schemas, and no annotations, the description is far too sparse. While an output schema exists so return values need not be explained, the description should at least clarify the state format and the typed question variants; instead it omits both.
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 names 'state' and 'typed questions,' which loosely map to the two parameters, but with 0% schema description coverage and a deeply nested anyOf schema (choice/score/noul variants, instructions, criteria), it adds almost no semantic detail. It does not explain required fields, allowed question types, or the shape of state, so an agent must infer everything from the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resources: 'Pass a state and typed questions directly to the configured decision port.' However, 'decision port' and 'typed questions' are jargon, and the description never explains what the tool actually returns or decides, leaving the purpose vague for an agent unfamiliar with this port. It does distinguish itself from browser session tools by negation, but the core outcome remains unclear.
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 only usage-oriented statement is 'This does not create or change a browser session,' which is a negative disclaimer rather than a positive when-to-use condition. There is no explicit guidance on when to choose this tool over alternatives, and the siblings are all browser_* tools, making the intended invocation context ambiguous.
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.
8 tool updates
v0.1.0- First observed
browser_act - First observed
browser_close - First observed
browser_navigate - First observed
browser_observe - First observed
browser_resume - First observed
browser_run - First observed
browser_tabs - First observed
jev_decide
TDQS
Scored across 8 tools
Tools are mostly distinct: browser_run creates sessions, browser_observe reads, browser_act performs manual ops, browser_navigate handles within-session navigation, and browser_tabs manages tabs. The main overlap is between browser_resume (handoff continuation/approval) and browser_act (manual element operations), which both act on existing sessions and could occasionally be confused despite clarifying descriptions.
Seven of eight tools follow a clear browser_verb snake_case pattern (browser_run, browser_observe, browser_act, etc.), which is predictable and readable. jev_decide breaks the browser_ prefix convention, but it represents a separate decision-port domain, making the deviation minor and understandable.
Eight tools is well-scoped for a browser automation server with handoff support. Each tool earns its place across the session lifecycle (create, resume, observe, act, navigate, tabs, close) plus one distinct decision tool, with no obvious redundancy or missing role.
The surface covers the full browser session lifecycle: creation (browser_run), continuation (browser_resume), reading (browser_observe), manual action (browser_act), navigation (browser_navigate), tab management (browser_tabs), and teardown (browser_close), plus decision support. Minor gaps exist around multi-session discovery or session listing, but core workflows are fully supported.
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
- AlicenseBqualityFmaintenanceEnables AI agents to directly control your real Chrome browser with full context including login sessions, cookies, and open tabs. It provides tools for page scanning, JavaScript execution, CDP control, screenshots, and physical mouse/keyboard input for authentic browser automation.20243MIT
- AlicenseBqualityAmaintenanceControls a real Chrome browser for AI agents, enabling authenticated automation with parallel lanes, token-efficient page reads, and robust recovery mechanisms.12285 npm237MIT
- AlicenseAqualityAmaintenanceEnables AI agents to drive your real, logged-in Chrome browser with existing sessions and cookies, bypassing CAPTCHA and anti-bot measures, with support for multi-session and human-in-the-loop workflows.4046MIT
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to drive a real Chrome browser for autonomous web tasks, using fast typed decisions with calibrated confidence, human-in-the-loop questions, safety gates, and full debug traces.1,633 npm1MIT