Browser Use
Browser agents and stealth cloud browsers for AI: run web tasks, fill forms, extract data.
作者による説明(英語の原文)
Replayable browser automation: Jev picks the element, a gate blocks risky actions, every run traces.
この3つを1つのスコアにまとめることはしません。意見、測定、人気はそれぞれ別のものだからです。
このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。
使っているAIアプリを選んで、設定をコピーしてください。
TYPESAFE_API_KEY「秘密」と表示された値は、あなたのアカウントの鍵です。絶対に人に教えたり、チャットに貼り付けたりしないでください。
必要なもの
どのアプリを使っていますか?
上でアプリを選んでください。選んだアプリを覚えておくので、次からはボタンに「…にインストール」と表示されます。
Claude Desktop → Settings → Developer → Edit Config を開き、claude_desktop_config.json にこれを貼り付けます
{
"mcpServers": {
"jevnav": {
"command": "uvx",
"args": [
"jevnav",
"mcp"
],
"env": {
"TYPESAFE_API_KEY": "your-value"
}
}
}
}ターミナルでこれを実行します
claude mcp add jevnav --env TYPESAFE_API_KEY=your-value -- uvx jevnav mcp動かす前に、空欄の値を入力してください。
プロジェクトの .cursor/mcp.json、または ~/.cursor/mcp.json に貼り付けます
{
"mcpServers": {
"jevnav": {
"command": "uvx",
"args": [
"jevnav",
"mcp"
],
"env": {
"TYPESAFE_API_KEY": "your-value"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
プロジェクトの .vscode/mcp.json に貼り付けます
{
"servers": {
"jevnav": {
"type": "stdio",
"command": "uvx",
"args": [
"jevnav",
"mcp"
],
"env": {
"TYPESAFE_API_KEY": "your-value"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
これはパソコンで動くサーバーですが、ChatGPTがつなげるのはインターネット上のサーバーだけです。ほかのアプリを選んでください。
選んだアプリは、この端末のCookieに保存されます。アカウントは不要です。
この設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。
パソコンで動くサーバーです。インストールすると、ツール一覧がAIアプリに表示されます。
誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月6日にチェック
レジストリ名は、リポジトリを所有するGitHubアカウント dtduc-git で確認済みです
このリポジトリはまだGitHubから読み取っていません
このリポジトリはまだGitHubから読み取っていません
これはパソコンで動くため、インターネット上のエンドポイントはありません
パソコンで動き、代わりにローカルの設定を使います
パソコンで動くサーバーです。ツール一覧を読み取れるのは、インターネット上のエンドポイントがある場合だけです
レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。
当てはまる基本チェック1項目のうち1項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。
入力が必要なもの:TYPESAFE_API_KEY
あなたのパソコンで動きます。必要なときにAIアプリが起動し、データは作者のサーバーを通りません(サーバー自体がオンラインサービスを呼び出す場合を除きます)。
GitHubリポジトリの最終更新は–、最新バージョン(0.2.2)がレジストリに届いたのは40 日前です。
Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。パソコンにPython (uv)も必要です。
同じカテゴリには:Browser Use, Chrome DevTools MCP, MCP Server Browser
同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。
カードの見方:★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i
Browser agents and stealth cloud browsers for AI: run web tasks, fill forms, extract data.
MCP server for Chrome DevTools
MCP server for browser use access
作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。
Page truth for browser agents — and decisions that replay, test and audit.
https://github.com/user-attachments/assets/502550ec-77d4-439e-b334-fe7007f946b9
jevnav is a browser layer for agents and tests. It reads a page as facts (structure, computed styles, the controls on screen), lets Jev — TypeSafe's model for structured questions — pick the element for an intent with a calibrated probability, gates risky or uncertain actions to a human, and records every decision in a trace that replay re-checks offline in CI.
outline, styles and diff return what the browser resolved — font-size 32px → 28px between a mockup and the running app is something an agent can fix. No screenshots in the decision loop.replay exit 1 — no model call, no API key.Why it exists — selector tests break when a label changes; LLM browser agents are confident, unauditable and occasionally wrong: docs/why.md.
uv tool install jevnav # or: pip install jevnav (the MCP server is included)
playwright install chromium # one-time browser download
Requires Python 3.10+. Deciding (go, run, browse, goal) needs a TypeSafe API key in TYPESAFE_API_KEY or ~/.config/typesafe/apikey.txt. `replay`, `diff`, `outline` and `styles` need no key — that is the point.
1. Let Jev drive — state a goal and the outcome that proves it:
jevnav go --goal "sign in with the demo account and open the pricing page" \
--start https://app.example.com/login \ --context email=demo@example.com --context password="${ACME_PASSWORD}" \ --success "#pricing.visible" \ --report goal.md
status: done — outcome verified against the page steps: 5 — auto 4, review 0, blocked 0
One Jev request per step; every step is gated and traced. The loop stops when the goal is met, when nothing on the page can make progress (stuck), when the gate wants a human (review), when the page stops changing (no_progress), or at --max-steps. done is a claim — --success turns it into evidence (verified, or unverified and the run fails). --dry-run decides without acting.
2. Or script the flow and let Jev resolve each intent:
# flows/acme-login/flow.yaml
id: acme-login start: https://app.example.com/login steps:
jevnav run flows/acme-login/flow.yaml --report run.md
3. Replay it in CI — offline, deterministic, no key:
jevnav replay acme-login.trace.jsonl # re-resolve every recorded decision
jevnav replay acme-login.trace.jsonl --execute # also re-run the actions + check --success
steps 3 verdicts: ok 3
Change Sign in to Log in on the site and the same replay fails:
[01] changed Sign in to the existing account
no element now has 'button|sign in' (was 'Sign in' / 'button')
Exit code 1, with the reason. That is the regression test.
The facts a coding agent needs about a rendered page, without a screenshot: outline(selector) for a region's structure (tags, headings, text, boxes), styles(selector, props) for the computed values, page_state() for the controls jevnav can act on.
jevnav diff compares a mockup with the running app as facts and exits 1 on drift:
jevnav diff new-ui.html http://localhost:3000 --report ui-diff.md
| element | property | mockup | app |
|---|---|---|---|
| h1 [Pricing] | font-size | 32px | 28px |
| button#cta [Start free] | border-radius | 8px | 4px |
The report also lists structure differences (missing, new and moved elements; boxes compared with a 4px --tolerance). The loop for "here is a new UI, update the codebase": the agent reads both pages with jevnav, edits the code itself, re-runs diff until it exits 0, then pins the outcome with goal(..., success=" ") so replay --execute keeps checking it. jevnav reports; it never edits your repository and never compares pixels.
Every decision gets one of three verdicts:
| verdict | meaning |
|---|---|
auto | confidence at or above the threshold and nothing risky — the action runs |
review | a human confirms first: low p, a risky intent, or a truncated candidate list |
blocked | no decision was possible (the model answered none, or the call failed) |
review and blocked never execute. Thresholds and risky patterns live in an optional gates.yaml; defaults ship for nine languages:
# flows/acme-login/gates.yaml
min_confidence: 0.9 # scripted flows: one question per step, well calibrated loop_min_confidence: 0.5 # goal loop: four questions at once, p runs lower risky:
intents: "delete the *": { min_confidence: 0.99 } truncated: review # the page had more than 255 candidates
The goal loop uses a lower threshold on purpose: measured correct loop decisions land at p 0.41–0.99 and wrong ones at 0.39–0.47, so its safety comes from deterministic checks instead — fill on a button is refused, a field with no context value is blocked, two steps that change nothing stop the run, risky patterns always go to review, and the outcome is verified against --success.
claude mcp add --scope user jevnav -- uvx jevnav mcp
Or, for Cursor, Claude Desktop, VS Code and other clients:
{
"mcpServers": { "jevnav": { "command": "uvx", "args": ["jevnav", "mcp"], "env": { "TYPESAFE_API_KEY": "..." } } } }
No URL or flags needed: the agent opens pages with goto, one server serves every site, and each session writes an auditable jevnav-session.trace.jsonl (--no-trace opts out). The deciding tools are what no other browser MCP has:
| tool | what it does |
|---|---|
browse(intent, action, value, min_confidence) | one step: Jev picks the element, the gate decides, only auto acts |
goal(goal, context_json, max_steps, success) | drive the whole way; returns done / stuck / review plus the verification |
goto(url) · page_state() · summary() | open a page, list what jevnav can act on, session totals |
Plus 28 acting and inspecting tools (forms, keys, uploads, tabs, console, network, styles, outline, emulation, tracing, Lighthouse), each with MCP annotations so the host knows which calls change state. A decision costs about $0.00004 and ~330ms, and the page never enters the LLM's context. Full tool reference, security flags and when to pick jevnav vs. Playwright or chrome-devtools-mcp: docs/mcp.md.
- uses: dtduc-git/jevnav@v0
with: trace: examples/local-demo/demo.trace.jsonl execute: "true" # also re-run the recorded actions report: replay.md
No model call, no API key, ~30 seconds. Fails when a recorded target changed, became ambiguous, or a recorded --success selector is no longer visible. Inputs: trace, report, execute, json, version (default latest from PyPI, or local for a checkout). @v0 floats; pin a release tag such as @v0.2.2 for fully reproducible CI.
The jev fixture ships with the package: an ordinary Playwright test gets Jev decisions, and every test writes a trace that replays in CI.
def test_sign_in(jev):
jev.goto("https://app.example.com/login") jev.fill("the email address", "demo@example.com") jev.fill("the password field", "${DEMO_PASSWORD}") jev.click("the sign-in button") jev.expect("#welcome")
DEMO_PASSWORD=... pytest --jev-trace-dir=traces
DEMO_PASSWORD=... jevnav replay --execute traces/test_sign_in.trace.jsonl # offline, no key
A review verdict fails the test before the action runs, ${VAR} values are recorded by name only, and jev.page is the real Playwright page for everything else. Runnable example with a committed trace: examples/pytest-interop/.
jevnav go --goal "..." # fresh headless Chromium (default)
jevnav go --goal "..." --user-data-dir ~/.cache/jevnav-profile --headed # persistent profile jevnav go --goal "..." --cdp http://127.0.0.1:9222 # attach to a running Chrome
Log in once with --headed and every later run reuses the profile; --cdp drives the Chrome you already have open, keeps its own settings (so it refuses --user-data-dir, --locale, --timezone and --user-agent) and never closes it. Both work on run, go, replay and mcp, and so does --browser for firefox or webkit (plus --locale, --timezone, --user-agent). Profile paths and cookies never reach a trace.
| what | result | source |
|---|---|---|
element picks on real sites (9 sites, jev-1.13.0) | 41/41 scored cases correct; 30/30 at the p ≥ 0.9 gate | research/browser-element-selection.md |
| decision latency and cost | p50 365ms, $0.000153 per decision | same |
| goal loop (local fixture, 4 goals × 2 wordings) | 8/8 goals correct, incl. the impossible one (stuck) | docs/evidence.md |
| driving tasks vs. chrome-devtools-mcp (same LLM, n=2) | jevnav 8/8, chrome-devtools-mcp 6/8; chrome-devtools 2.4× faster end to end | research/driving-benchmark.md |
| replay | deterministic: offline, no key, exit 1 on a broken decision | run it on your own traces |
Small samples with a single annotator: read them as direction, not proof. jevnav's advantage is decision cost and evidence, not wall-clock speed on small pages. Method, caveats and the tool-level comparison: docs/evidence.md.
--max-candidates, hard cap 254). Each carries role, accessible name, type, href, placeholder and a scope, so three "Email" fields stay distinguishable.none becomes a choice question; Jev answers with one element and its probability.role|name. The trace stores every candidate's fingerprint as the model saw it, and actions and repla冒頭だけを表示しています。続きはリポジトリで読めます