Browser Use
OFFICIAL SERVERLocal MCP server that drives a Chrome or Chromium browser step by step, with an agent fallback
Runs a headless Chromium task from a goal and a start URL, steered by TypeSafe's Jev model
By Joey Kudish (individual) TypeScript Local · stdio Browser automationAI and ML
64 popularity score ★ 368 ↓ 1.4k/wk
Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.
It needs TYPESAFE_API_KEY. Replace each <NAME> with your value.
claude mcp add jev-browser -e TYPESAFE_API_KEY=<TYPESAFE_API_KEY> -- npx -y @jkudish/jev-browser{
"mcpServers": {
"jev-browser": {
"command": "npx",
"args": [
"-y",
"@jkudish/jev-browser"
],
"env": {
"TYPESAFE_API_KEY": "<TYPESAFE_API_KEY>"
}
}
}
}{
"mcpServers": {
"jev-browser": {
"command": "npx",
"args": [
"-y",
"@jkudish/jev-browser"
],
"env": {
"TYPESAFE_API_KEY": "<TYPESAFE_API_KEY>"
}
}
}
}{
"servers": {
"jev-browser": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@jkudish/jev-browser"
],
"env": {
"TYPESAFE_API_KEY": "<TYPESAFE_API_KEY>"
}
}
}
}[mcp_servers.jev-browser]
command = "npx"
args = ["-y", "@jkudish/jev-browser"]
[mcp_servers.jev-browser.env]
TYPESAFE_API_KEY = "<TYPESAFE_API_KEY>"gemini mcp add --scope user -e TYPESAFE_API_KEY=<TYPESAFE_API_KEY> jev-browser npx -- -y @jkudish/jev-browserTYPESAFE_API_KEY |
Required: TypeSafe key for the Jev judgments (default carrier). Alternatives: OPENROUTER_API_KEY, CLOUDFLARE_API_TOKEN with CLOUDFLARE_ACCOUNT_ID, or AI_GATEWAY_API_KEY. |
|---|---|
JEV_PROVIDER |
Optional: Forces the Jev carrier: typesafe, openrouter, cloudflare or vercel (default auto). |
OPENAI_API_KEY |
Optional: One of the typing-model keys detected in order: OpenAI, OpenRouter, Anthropic, Google. |
JEV_BROWSER_TYPE_PROVIDER |
Optional: Strictly selects the typing provider: openai, openrouter, anthropic or google. |
JEV_BROWSER_TYPE_MODEL |
Optional: Model id for the typing provider. |
JEV_BROWSER_TYPE_BASE_URL |
Optional: OpenAI-compatible endpoint for typing, e.g. a local Ollama. |
JEV_BROWSER_MODEL |
Optional: Pins a Jev version (default jev-latest). |
JEV_BROWSER_PASSWORD_ORIGIN |
Optional: Exact origin where password fill is allowed; needed for password fill. |
JEV_BROWSER_HANDOFF_DIR |
Optional: Directory for one-shot password and cookie files (default ~/.jev-browser/handoff). |
JEV_BROWSER_HEADED |
Optional: Set to 1 to show the browser window. |
JEV_BROWSER_AUTH_TOKEN |
Optional: Bearer token for HTTP mode; required there unless HOST is loopback. |
JEV_BROWSER_SKIP_BROWSER_DOWNLOAD |
Optional: Set to 1 to skip the Chromium download on install. |
Jev Browser is a single-tool MCP server (jev_navigate) that takes a plain-language task and an http(s) start URL, then works a headless Chromium through Playwright until the job is done. At each step it collects the page's clickable, typeable and selectable elements from the DOM and asks TypeSafe's Jev model three questions: which action to take, how likely the goal is met, and how likely the run is stuck. The loop itself lives in code: it stops when the agent picks done, when either probability passes 0.85, or when the step or time budget runs out.
A run returns the final page as text, markdown, HTML or an accessibility-tree YAML snapshot, a final viewport screenshot, and a trace for every step. The trace shows the proposed and executed actions, confidences, console and network errors, token use and an estimated cost. Jev itself never writes text. When a field needs typing, a small model from OpenAI, OpenRouter, Anthropic, Google or any OpenAI-compatible endpoint writes the string. It can start a run already logged in using seed cookies, or fill a password field on one trusted origin. In both cases the secret is passed by file or environment-variable reference, never as a value in the tool arguments.
The same package also works as a CLI (`jev-browser run`) and as a Node library. It runs over stdio by default, or as a stateless HTTP server with `--http`. In the v0.8.7 source, `max_steps` defaults to 24 and is capped at 100, `max_seconds` accepts 10 to 600, and `max_chars` accepts 100 to 1,000,000 (src/index.ts). The README does not give the step cap.
| Runtime | Node.js 22+ |
|---|
Node.js 22 or newer (the launch command uses npx). Playwright's Chromium downloads on install unless JEV_BROWSER_SKIP_BROWSER_DOWNLOAD=1. You need a key for one Jev carrier: TYPESAFE_API_KEY (the default), OPENROUTER_API_KEY, CLOUDFLARE_API_TOKEN plus CLOUDFLARE_ACCOUNT_ID, or AI_GATEWAY_API_KEY. Every run makes paid calls. A typing-model key (OpenAI, OpenRouter, Anthropic, Google or a local OpenAI-compatible endpoint) is optional but needed for good typing. HTTP mode needs JEV_BROWSER_AUTH_TOKEN unless HOST is loopback.
The makers call it early software with rough edges on harder sites. Each step offers at most 240 elements, so very dense pages can hide the one needed. Hover menus, shadow DOM, iframes, file inputs and keys other than Enter (Escape, Tab, arrows) are out of scope for v0.1. The markdown output keeps navigation chrome. Without a typing model, ordinary fields stay empty and searches fall back to a weaker keyword guess. Bot-protection detection covers Cloudflare only, and a Cloudflare challenge stops the run with status blocked. HTTP mode allows 4 concurrent runs by default (JEV_BROWSER_MAX_CONCURRENCY). The 0.85 thresholds were tuned on Wikipedia and DuckDuckGo tasks.
It suits developers who want an assistant to finish a short goal on a live site, such as reaching a page, reading a price or filling a form without sending it, and who want each step traced and costed. Each run is cheap but not free, and it needs a third-party model key. Pick a browser server that lets the assistant click step by step if you need iframes, shadow DOM, hover menus or file uploads, or if no paid key is allowed. For Jev judgments with no browser, the same author's Jev MCP (jev-mcp-2) offers eleven judgment tools instead.
jev_navigate