{"slug": "show-hn-browserr-an-mcp-first-browser-for-ai-agents-one-rust-binary", "title": "Show HN: Browserr – An MCP-first browser for AI agents (one Rust binary)", "summary": "A developer released Browserr, an MCP-first browser for AI agents shipped as a single ~120 MB Rust binary with zero dependencies, exposing 42 Model Context Protocol tools over JSON on a loopback socket and zero Chrome DevTools Protocol endpoints. Browserr is built on the Servo engine and emphasizes fail-closed behavior: unauthenticated sockets receive nothing, intercepted requests unanswered after 5 seconds are denied, and missing credentials fail closed, with an append-only action log, network evidence ring buffer and a confirm gate on payment submits. The project also ships a dependency-free Python driver.py and claims React 18 and Vue 3 compatibility, positioning alternative engines against Chromium wrappers as its edge.", "body_md": "Scope\n\n01 / 05\n## Everything an agent needs.\n\nBuilt agent-first: extraction over pixels, stable refs over coordinates, failures you can catch instead of hangs. Three commitments shape the whole engine: it blocks when unsure, it hands the page to a human when a human is needed, and it leaves evidence for everything it did.\n\n| Command | Covers | \n|---|---|\n| read | **Structured page reads.** Prose via read_page(), or read_structure(): every element with its rect and selector; fields carry label, constraints, state and validity. | \n| act | **Selector interaction.** click_element() and set_value() — real pointer events, React/Vue-safe writes. | \n| wait | **SPA-aware timing.** Wait for selectors and readiness — no sleeps, no flaky scripts. | \n| observe | **Console capture.** Page messages and network errors arrive as events. | \n| files | **Downloads.** Fetched straight to disk, without page cookies. | \n| survive | **Fast failure, not hangs.** A dead engine surfaces instantly; ephemeral profiles give every run a clean slate. | \n| block | **Adblock built in.** EasyList-based, refreshed weekly. | \n| gpu | **Rendering.** CPU by default — starts anywhere; --gpu opts into hardware. Screenshots on demand, per tab. | \n| compat | **SPA-ready.** React 18 and Vue 3 render and react; IntersectionObserver, IndexedDB, Web Animations, WebGL and WebGL2 (via ANGLE, no GPU needed), clipboard, DecompressionStream; requestIdleCallback and crypto.subtle digests via built-in shims where Servo omits them. | \n| secure | **Token-gated attach.** Unauthenticated sockets get nothing — not even events. | \n| intercept | **Fail-closed interception.** Requests held for an allow / deny / respond decision; unanswered means denied after 5 s. | \n| auth | **Challenges surfaced, not swallowed.** Auth and file-picker events; missing credentials fail closed. | \n| evidence | **Net evidence.** Every fetch/XHR recorded in a ring buffer, in every frame. | \n| frames | **Frame tree.** List frames and walk same-origin ones; cross-origin frames report their url only. | \n| fill | **Form filling.** A whole form in one round trip, with type-aware writes. | \n| submit | **Submit and read the outcome.** Runs the page's validation, then reports url, alerts and invalid fields. | \n| point | **Shared references.** Stable refs and numbered screenshot boxes: the agent says \"click 7\" and the human knows which one that is. | \n| proxy | **Upstream proxy routing.** browser_start(proxy=...) routes all http/https traffic through a CONNECT tunnel (basic auth in the URL, per-engine rotation); document_status reports the main document's real HTTP status so a block serving a fake 404 is distinguishable from a dead page. | \n| handoff | **Humans take over in a real native window.** Start MCP with headed:true; direct mouse and keyboard input keep working while agent mutations are paused. CAPTCHA support still depends on Servo compatibility. | \n| trust | **Fail-closed by design.** Persistent profiles, evidence shots, an append-only action log, a credential store and a confirm gate on payment submits. | \n\nProtocol\n\n02 / 05\n## The entire protocol, in full.\n\nJSON over loopback. One client, no hidden state — the opposite of CDP's 1000+ endpoints. Events:\n\n- Commands\n- 22\n- MCP tools\n- 42\n- Binary\n- ~120 MB\n- CDP endpoints\n- 0\n- Dependencies\n- 0\n\nSDK\n\n03 / 05\n## Three ways in.\n\nSame engine underneath; pick the integration you already have.\n\n| Surface | Covers | \n|---|---|\n| mcp | **Model Context Protocol server** with 42 tools, stdlib only. Any MCP-capable agent — Claude, Kai, your own — drives Browserr with zero integration code. | \n| python | **driver.py wraps the raw protocol:** navigation, extraction, form filling, screenshots. No dependencies. | \n| raw | **Anything that can write JSON lines to a socket.** Bindings in any language are an afternoon. | \n\nPosition\n\n04 / 05\n## Where it sits in 2026.\n\nChromium wrappers are the default; alternative engines are the bet. Browserr's edge is the local, trust-first, human-in-the-loop.\n\n|  | Browserr | Lightpanda | Obscura | Chromium headless | \n|---|---|---|---|---|\n| engine | **Servo** | own (Zig) | own (Rust) | Blink | \n| js engine | **SpiderMonkey** | own | own | V8 | \n| mcp-native | **yes, 42 tools** | no | partial | via wrappers | \n| protocol size | **22 commands** | CDP-compatible | own + CDP | 1000+ endpoints | \n| footprint | **one ~120 MB binary** | ~16× less than Chromium | ~30 MB | ~200 MB+ | \n| web compat | **Servo 0.8 (text, docs, forms, SPAs)** | growing | growing | full | \n| human handoff | **native window, pause, wait_for_user** | headless only | headless only | via wrappers | \n| trust layer | **evidence, action log, confirm gate** | no | no | no | \n| network policy | **fail-closed, held to a decision** | CDP opt-in | CDP opt-in | CDP opt-in | \n\nInstall\n\n05 / 05\n## Get Browserr in seconds.\n\nOne package per platform: the engine binary, Python SDK, and the MCP server.\n\n#### Windows x64\n\nDownload the zip, unpack anywhere, and point your agent at the MCP server. CPU rendering works out of the box; pass --gpu for hardware rendering.\n\n[↓ Download for Windows](https://github.com/Omodaka9375/browserr/releases/latest)\n\n#### Linux x64 / ARM64\n\nDownload the tarball, unpack anywhere, and point your agent at the MCP server. Works headless without a GPU; ARM64 covers the Raspberry Pi 4/5.\n\n#### macOS (Apple Silicon)\n\nDownload the tarball, unpack anywhere, and point your agent at the MCP server. Works headless out of the box.\n\n[↓ Download for macOS](https://github.com/Omodaka9375/browserr/releases/latest)\n\nStart\n\n## Start driving the web with your agents.\n\nFree, open source, no account, no telemetry. Runs on every machine.", "url": "https://wpnews.pro/news/show-hn-browserr-an-mcp-first-browser-for-ai-agents-one-rust-binary", "canonical_source": "https://browserr.dev", "published_at": "2026-11-14 03:22:22+00:00", "updated_at": "2026-11-14 03:50:30.607511+00:00", "lang": "en", "topics": ["ai-agents", "agent-protocols", "ai-tools", "developer-tools"], "entities": ["Browserr", "Model Context Protocol", "Servo", "React 18", "Vue 3", "Chromium", "Chrome DevTools Protocol", "EasyList"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/show-hn-browserr-an-mcp-first-browser-for-ai-agents-one-rust-binary", "markdown": "https://wpnews.pro/news/show-hn-browserr-an-mcp-first-browser-for-ai-agents-one-rust-binary.md", "text": "https://wpnews.pro/news/show-hn-browserr-an-mcp-first-browser-for-ai-agents-one-rust-binary.txt", "jsonld": "https://wpnews.pro/news/show-hn-browserr-an-mcp-first-browser-for-ai-agents-one-rust-binary.jsonld"}}