Jev Browser

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

Connect your client

Local (npm)

Add in one click

Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.

Or add it by command or config

It needs TYPESAFE_API_KEY. Replace each <NAME> with your value.

Claude CodeTerminal
claude mcp add jev-browser -e TYPESAFE_API_KEY=<TYPESAFE_API_KEY> -- npx -y @jkudish/jev-browser
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "jev-browser": {
      "command": "npx",
      "args": [
        "-y",
        "@jkudish/jev-browser"
      ],
      "env": {
        "TYPESAFE_API_KEY": "<TYPESAFE_API_KEY>"
      }
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "jev-browser": {
      "command": "npx",
      "args": [
        "-y",
        "@jkudish/jev-browser"
      ],
      "env": {
        "TYPESAFE_API_KEY": "<TYPESAFE_API_KEY>"
      }
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "jev-browser": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@jkudish/jev-browser"
      ],
      "env": {
        "TYPESAFE_API_KEY": "<TYPESAFE_API_KEY>"
      }
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.jev-browser]
command = "npx"
args = ["-y", "@jkudish/jev-browser"]

[mcp_servers.jev-browser.env]
TYPESAFE_API_KEY = "<TYPESAFE_API_KEY>"
Gemini CLITerminal
gemini mcp add --scope user -e TYPESAFE_API_KEY=<TYPESAFE_API_KEY> jev-browser npx -- -y @jkudish/jev-browser

Settings 12

TYPESAFE_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.

What it does

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.

What it needs

RuntimeNode.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.

Limits

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.

Who it suits

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.

Tools 1

jev_navigate
Runs a goal from a start URL in headless Chromium; returns the final page, step trace, errors, cost and a screenshot

Similar servers