unbrowser
The unbrowser server provides a lightweight, agent-friendly web browser interface for LLMs — fetching, parsing, and interacting with web pages without full Chrome overhead, returning structured outputs optimized for agent consumption.
Navigation & Page Reading
Fetch URLs with Chrome-fingerprinted HTTP, parse HTML, and return a structured BlockMap summary (~500 tokens) with auto-extracted embedded JSON and tool recommendations
Retrieve raw HTML, main content text (stripped of nav/header/footer), or clean whitespace-collapsed text from selectors
DOM Querying & Search
Query elements via CSS selectors (with stable refs for interaction), find elements by visible text, diagnose selector misses, and retrieve surrounding context
Structured Data Extraction
Auto-strategy extraction: JSON-LD →
__NEXT_DATA__→ Nuxt → JSON-in-script → OpenGraph → microdata → text fallbackExtract HTML tables into
{headers, rows}, pull repeated card/listing patterns into structured arrays, and parse captured network/API responses into semantic objects
Page Modeling & Discovery
Model a page into semantic task-discoverable JSON (search forms, nav links, article/product cards, tables) with goal-based scoring
Discover navigation/search routes and merge DOM routes, inferred URLs, and network JSON into a ranked discovery graph
Interaction
Click elements (auto-follows
<a href>links), type into inputs, submit forms (GET or POST), and classify interaction effects (navigated, dom_changed, no_effect, etc.)
JavaScript Execution
Run arbitrary JS in an embedded QuickJS runtime and drain the event loop (microtasks, setTimeout/setInterval)
Cookie & Session Management
Set, get, and clear cookies for persistent sessions or replaying clearance cookies to bypass bot detection
Network Capture
Capture and inspect fetch/XHR responses (JSON, GraphQL, NDJSON) from navigations, ranked by content value
Observability & Diagnostics
Challenge detection for bot-walled pages, SPA detection heuristics,
tool_recommendationsto guide agent next steps, andreport_outcomefor binding task success/failure to prior navigations for policy learning
Allows accessing Cloudflare-protected websites by handling bot challenges and cookie handoff, with automatic detection of challenge provider.
Enables scraping and interacting with GitHub repository browsing pages with full selector support.
Provides limited rendering support for Next.js SSR pages and light hydration, allowing navigation and query of static content.
Offers excellent navigation and query capabilities on Wikipedia pages, producing a compact BlockMap summary.
Supports navigating Zillow pages with cookie handoff to bypass bot walls.
unbrowser
The cheap browser pass for agents. One native binary. No Chrome.
Official MCP Registry identity: mcp-name: io.github.protostatis/unbrowser
unbrowser is a stateful, non-visual web runtime for agents. It sits between curl/WebFetch and a real browser: it retains cookies and DOM state, returns queryable element refs, handles links and HTML forms, detects challenge and SPA signals, and can run bounded QuickJS page scripts when static HTML is not enough.
Default
navigateis a fast static/SSR pass. Setexec_scripts: trueonly when you need bounded QuickJS execution. Heavy SPAs, pixels, V8 fidelity, extensions, and interactive anti-bot challenges belong in a real Chrome tier.
Try the live public-web demo before installing. It accepts only the fixed public source sets shown on the page; do not send private data, cookies, or authenticated tasks through it. A shared Streamable HTTP MCP endpoint is available at https://unchainedsky.com/unbrowser-mcp for public smoke tests; production sessions should use a local install.
Pick the right tier
Need | curl / WebFetch | unbrowser | Real Chrome |
Static / SSR HTML | raw response | structured BlockMap + DOM queries | full browser |
Cookies, links, HTML forms | DIY | built in | built in |
Client-side page scripts | ❌ | bounded QuickJS, opt-in | V8 |
Pixels, Canvas, WebGL, Workers, extensions | ❌ | ❌ | ✅ |
Agent-oriented output | DIY parsing | element refs, page signals, structured extraction | DIY CDP / DOM parsing |
Hard bot challenge | ❌ | detect + cookie replay | browser / human / solver |
Use unbrowser when HTTP alone is too dumb and a full browser is too expensive. When the page needs Chrome, the output tells the agent to escalate rather than pretending compatibility it does not have.
Related MCP server: Browserbase MCP Server
Quick start
Docker — Linux amd64/arm64, ~13 MiB pull
docker pull ghcr.io/protostatis/unbrowser:latest
# One-shot navigation
docker run --rm ghcr.io/protostatis/unbrowser:latest \
navigate https://example.com --json
# Default mode: MCP over stdio
docker run --rm -i ghcr.io/protostatis/unbrowser:latestThe image is distroless and runs as non-root: no shell, package manager, or persistent state. Pin :vX.Y.Z or an image digest in production.
Python
pipx install pyunbrowser # recommended on macOS / modern Linux
# or, inside a Python 3.10+ virtual environment:
pip install pyunbrowserfrom unbrowser import Client
with Client() as ub:
ub.navigate("https://news.ycombinator.com")
for link in ub.query(".titleline > a")[:3]:
print(link["text"], link["attrs"]["href"])On macOS, /usr/bin/python3 is 3.9 and cannot install the wheel; use pipx or a Homebrew Python. The PyPI distribution is pyunbrowser, while the import and executable remain unbrowser.
MCP
{
"mcpServers": {
"unbrowser": {
"command": "unbrowser",
"args": ["--mcp"]
}
}
}{
"mcpServers": {
"unbrowser": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"ghcr.io/protostatis/unbrowser:latest"
]
}
}
}See installation and interface reference for Cargo, release archives, source builds, persistent shell sessions, raw JSON-RPC, and all MCP options.
What an agent gets
navigatereturns a BlockMap: page title, landmarks, headings, interactives, density signals, and an ASCII outline. Its size is page-dependent; it is structured for planning rather than a fixed-token promise.Stable element refs (
e:142): query an element once, thenclick,type, orsubmitit without re-parsing HTML.Stateful cookies and forms: cookie jar, GET and URL-encoded POST form submission, links, and redirects persist within a session.
Page and challenge signals:
density.likely_js_filled,thin_shell, andchallenge.providertell an agent whether to run scripts, inspect embedded data, replay a clearance cookie, or escalate.Structured helpers: route discovery, card extraction, table normalization,
text_main, and selector debugging cover common extraction workflows.
Script mode and escalation
{"id":1,"method":"navigate","params":{"url":"https://example.com","exec_scripts":true}}With exec_scripts: true, inline and external scripts run in QuickJS under a bounded watchdog. This can materialize light hydration and fetch-visible data; it is not V8 or a rendering engine. Heavy React/Vue/Ember apps may still leave an empty shell.
Escalate to unchainedsky-cli or Unchained when a task needs real pixels, Canvas/WebGL, Workers, browser extensions, V8 compatibility, or active challenge solving. For many bot walls, solve once in Chrome and replay the resulting clearance cookie with cookies_set until it expires.
Documentation
Need | Read |
Install paths, session CLI, one-shot CLI, raw RPC, MCP, shims, full RPC table | |
Script compatibility, SPA signals, challenge handling, cookie solver, escalation | |
Distribution and supported directory listings | |
Build the native binary |
License
Apache-2.0 — see LICENSE.
Maintenance
Related MCP Servers
- AlicenseAqualityDmaintenanceA Model Context Protocol server that provides browser automation capabilities using Playwright, enabling LLMs to interact with web pages through structured accessibility snapshots without requiring screenshots or visually-tuned models.Last updated226,254,424Apache 2.0
- AlicenseAqualityDmaintenanceEnables cloud browser automation through Browserbase and Stagehand, allowing LLMs to interact with web pages, take screenshots, extract data, and perform automated actions with support for proxies, stealth mode, and parallel sessions.Last updated145,082Apache 2.0

Plasmateofficial
Alicense-qualityCmaintenanceAgent-native headless browser for AI agents. Converts web pages to a Semantic Object Model (SOM) instead of raw HTML — 17x average token reduction across real-world sites (up to 117x on complex pages). Native MCP server with fetch_page, extract_text, extract_links, and full browser automation. No API key required.Last updated77Apache 2.0- Alicense-qualityDmaintenanceThe Zero-Setup Local Browser MCP. Enables AI agents to control web browsers via CDP with zero vision tokens and high-speed DOM mapping.Last updated18MIT
Related MCP Connectors
Scrape, crawl, map & search the web. Open-source, self-hostable Rust crawler & search for AI agents.
AI-powered browser automation — navigate, click, fill forms, and extract data from any website.
Screenshot, diff, audit and sitemap-capture any web page — 5 MCP tools for AI agents.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/protostatis/unbrowser'
If you have feedback or need assistance with the MCP directory API, please join our Discord server