Semantic snapshots
Regions, headings, links, buttons — not a wall of DOM. Agents reason over structure, not markup.
@drisp/browser-mcp — formerly Agent Web Interface
Browser MCP is an MCP server that gives agents a compact, semantic view of any web page — not 40,000 bytes of DOM they can't reason over.
$ npx @drisp/browser-mcp installThe problem
Current tools dump thousands of tokens of noise into the agent's context. Tasks fail mid-flow. Selectors break on the next deploy. And there's no stable way to reference an element across calls.
Raw DOM
<div class="wrapper xyz-123">
<div class="inner" data-v="8">
<button type="submit"
class="btn btn-primary
x-4 y-2 md:x-6">
Submit
</button>
</div>
</div>40,000+ bytes of noise. Brittle class selectors. Context exhaustion.
Accessibility tree
RootWebArea "Checkout"
generic ""
generic "wrapper xyz-123"
generic "inner"
button "Submit"
StaticText "Submit"Better, but still verbose. No stable IDs to reference across calls.
Browser MCP
<page title="Checkout">
<region role="main">
<button
eid="btn-1"
label="Submit" />
</region>
</page>Compact. Stable eid. Only what the agent needs.
Live example
Every MCP tool call returns a structured semantic snapshot — not raw DOM.
The agent references btn-checkout by eid across every call that follows — no selector hunting, no re-finding elements after navigation.
How it works
Agent calls a browser tool via MCP
navigate, click, find, type, screenshot…
Browser MCP intercepts the tool call
A local server launched with npx — no daemon to manage
Puppeteer drives Chrome
Local Chrome via CDP — real rendering, full JS
Page reduced to semantic XML
Headings, buttons, links, forms — no raw markup
Agent receives stable eids
Reference the same button call after call. No re-finding elements.
Browser MCP runs locally and needs Node.js and Chrome. Workflows dispatched on Drisp run it on the runner for you.
Features
Regions, headings, links, buttons — not a wall of DOM. Agents reason over structure, not markup.
Every interactive element gets a stable eid. Reference it across 10 tool calls — CSS classes change on the next deploy, eid does not.
Snapshots return only the structure an agent needs to act — not the full page on every call. Longer task horizons. Lower token spend.
See every request that followed an action — verify form submissions, trace auth flows, and debug redirects without a DevTools tab.
When the page is a canvas, chart, or image, capture a screenshot or read canvas data directly. Semantic snapshots where they work; pixels where they do not.
Works with any MCP-compatible agent: Claude, GPT-4o, Gemini, local models. No vendor lock-in.
What people build
Navigate, read, and extract from live pages — pricing monitors, news aggregators, and competitor trackers that work on real rendered content, not stale APIs.
Walk through sign-up, checkout, and onboarding flows. Fill forms, verify responses — without the fragile CSS selectors that break Playwright suites.
Log in, find fields by their label, and submit — even on pages where the DOM shifts between visits.
Part of Drisp
Workflows that exercise a real UI — end-to-end test builders, QA flows, form automation — drive the browser through Browser MCP. Assign the issue, and the harness driving it can see and act on the running page.
FAQ
Browser MCP is an open-source MCP server that gives AI agents a compact, semantic view of any web page. Instead of raw DOM or verbose accessibility trees, it returns structured XML snapshots with stable element IDs (eids) that agents can reference across tool calls.
Agent Web Interface joined Drisp and is now published as @drisp/browser-mcp. Same server, same semantic snapshot format, same MIT license — under a new name and npm scope. Existing agent-web-interface installs keep working, but new installs should use @drisp/browser-mcp.
Playwright and Puppeteer were built for deterministic scripts, so their MCP wrappers hand an agent raw DOM or long accessibility dumps that flood its context. Browser MCP returns only the semantic structure an agent needs — headings, buttons, links, forms — with stable eids, so tasks run longer on far fewer tokens.
A typical page is 40,000+ bytes of DOM. Browser MCP reduces it to a compact snapshot — often under 1 KB — containing only the interactive and structural elements an agent needs to act. That means fewer tokens per step and longer multi-step tasks before the context fills up.
Any MCP-compatible agent — Claude, GPT-4o, Gemini, and local models via Ollama. Browser MCP speaks the Model Context Protocol directly, so there is no model-specific glue code and no vendor lock-in.
Yes. Browser MCP is MIT-licensed and developed in the open on GitHub, so you can self-host it for free. Drisp workflows that exercise real UIs use it as their browser layer.
The local server drives a real Chrome instance through Puppeteer, so you need Node.js and Chrome installed. Workflows dispatched on Drisp run it on the runner for you.
$ npx @drisp/browser-mcp installOpen source · MIT licensed · Works with Claude, GPT-4o, Gemini, and any MCP-compatible agent.