Pure-Go browser for AI: fetch pages, render JS without Chromium, return clean Markdown over MCP.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
Inspect callable tools, capabilities, and parameters exposed to AI agents by Unblink.
readMain content (`mode=article`, default) or whole page (`full`) as Markdown, paginated via cursor. `format=raw_html` returns the unreduced source (optionally scoped by a CSS `selector`) β the escape hatch for scripts/forms/SSR-embedded JSON that reduction strips; `format=text` returns visible plain tβ¦
browseCheap orientation: title, description, lang, heading outline, link/form/image counts, excerpt, semantic region map, plus `llms_txt`/`robots` presence hints. Also returns a `collections` inventory β auto-detected repeating record-sets (product lists, search results, table-like rows), each with a reaβ¦
linksThe page's links (text + absolute href), optionally filtered. `limit` defaults to 200 (cap 1000); `total`/`truncated` report the rest.
formsThe page's forms and their fields (name, type, required, options).
findMatching text snippets with the heading path locating each.
siteA host's agent-facing metadata: robots.txt summary (allow/disallow for a browser agent, crawl-delay, sitemaps) + llms.txt content + whether llms-full.txt exists. Context only β never blocks a fetch.
unblink turns any web page into clean, token-budgeted Markdown for an AI agent β with no browser to install. It's a pure-Go MCP server: no Chromium, no V8, no Node, no cgo. It fetches a page, parses HTML5, optionally runs the page's JavaScript against a hand-rolled DOM, throws away everything that exists only for human eyes β nav, ads, chrome, tracking β and hands the model clean Markdown under a token budget, over the Model Context Protocol (MCP).
An AI doesn't need pixels. It needs structured meaning.
Three things it does that a browser-driving tool doesn't β each measured
head-to-head against Playwright MCP, Charlotte, Obscura, and Lightpanda on
identical fixtures (full numbers,
reproduce with make crossbench):
A 65 KB regional-news portal β mega-menu, cookie banner, ad rail, trending
sidebar, multi-column footer sitemap β wrapped around one short story. read
returns just the story (~300 tokens), fenced as untrusted data:
A browser tool's accessibility-tree snapshot of that same page is ~92 KB /
~26,000 tokens β every menu, rail, and footer link included. (This is the
benchmark's noisy-portal fixture; the numbers are in
docs/comparison.md.)
unblink is not a browser-automation tool that speaks MCP; it's a semantic reduction tool. Reach for it to read, extract, and research the web for a model at minimal token cost, footprint, and attack surface. Reach for a real browser (Playwright MCP, Charlotte) for screenshots, pixel-perfect fidelity, E2E testing, or hostile anti-bot β the things unblink deliberately doesn't do. They compose: use unblink for the hundred pages an agent reads, a real browser for the one it must drive or see.
The forfeits are design decisions, not gaps, so they're stated up front:
getBoundingClientRect returns zeros). Permanent
non-goals (ADR 0007).--tls-mimic clears naive fingerprint checks;
Turnstile-class interactive challenges and server-side proof-of-work are out
of scope.v0.24.0. The full pipeline works end to end: 18 MCP tools covering reading,
navigation, sessions, forms, structured data, schema extraction, page
inspection, site discovery, and search. The JavaScript engine is on by
default (opt out with --disable-js); the static read path turns most
server-rendered pages into clean Markdown with zero JavaScript, and the engine
can runtime-load a WebExtension (e.g. uBlock Origin Lite) for ad/tracker
blocking. See docs/architecture.md for the full design
and its non-goals, and docs/comparison.md for how unblink
compares to other AI web-browsing tools (Playwright MCP, Charlotte, Obscura,
Lightpanda).
The official MCP Go SDK requires Go β₯ 1.25. The Makefile sets
GOTOOLCHAIN=auto, so the go command downloads the toolchain pinned in
go.mod automatically β you do not need to install Go 1.25 yourself, and your
global go env is left untouched. (If you run go directly rather than via
make, prefix commands with GOTOOLCHAIN=auto.)
Or run the multi-arch (amd64/arm64) Docker image β no Go toolchain needed:
Or download a prebuilt binary from the GitHub releases page, or build from source (see Build & run).
unblink speaks MCP over stdio, so any MCP-capable client launches it as a subprocess. For Claude Code:
For Claude Desktop (or any client using the mcpServers config shape), add
to claude_desktop_config.json:
JavaScript rendering is on by default; add --disable-js for the zero-JavaScript
static read path (lighter, still handles most server-rendered pages). Add flags
like --search-provider or --tls-mimic to args as needed β see
Configuration.
unblink is also listed in the MCP registry
as io.github.ChristopherDavenport/unblink, and the repo ships a Claude Code
plugin manifest (.claude-plugin/plugin.json)
pinned to the current release image.
unblink feeds untrusted web pages to a model that will act on what it reads, so
it hardens the boundary between the two β on by default. Every other tool
measured secures the browser; unblink also secures what crosses into the
model. On a fixture carrying three planted hidden-instruction blocks
(display:none, aria-hidden, off-screen) plus an image-beacon exfiltration
URL, unblink is the only one of five tools that leaks 0 of 3 and defangs the
beacon (measured;
the others leak 1β3):
[UNTRUSTED WEB CONTENT β¦] fence with a random marker, so injected imperatives
read as data, not instructions. Human-hidden text and comments are stripped,
and Markdown image beacons ( β a zero-click data-exfil channel) are
defanged to inert, auditable text. Defense-in-depth against indirect prompt
injection, not a guarantee. --no-safe-output opts out.100.64.0.0/10), checked against the resolved address. On
by default; --allow-private / --js-allow-private opt out.requests tool); only the page-JS read is denied.See SECURITY.md for the full threat model.
Factual signals from GitHub, npm, and our automated checks β not a rating.
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/unblink)<a href="https://allmcps.com/mcp/unblink"><img src="https://allmcps.com/api/badge/unblink?style=directory" alt="Unblink on AllMCPs" /></a>