Self-hosted Chrome for AI agents, with a live noVNC view a human can take over.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
We haven't yet run this listing's install command through our automated sandbox check. This isn't a red flag β we're steadily working through the catalog.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
Self-hosted Chrome for AI agents.
Your agent drives one real browser session β and you can watch it happen, and step in.
Quickstart Β· API Β· MCP Β· Security model Β· Node client Β· Python client Β· Contributing Β· Changelog
An 18-second recorded demonstration. The agent signs in, reaches a 2FA prompt it has no way to
answer, and stops. A human types the code into the displayed session, then the
agent continues.
Capture provenance, checksums, and independently verifiable limits are documented.
Β Β·Β How this was recorded
Most browser tooling for agents hands the model a browser you cannot see. When it misreads a page or stalls on a login, all you get is a transcript and a guess.
Agent Browser runs one headed Chrome session. Your agent drives it through a small JSON API, and a live view of that same session sits open in front of you. When the agent gets stuck, you take over in the window it is already using β then hand it back.
Start the runtime:
Then reach it however you like:
One command, on Docker Engine for Linux with Compose v2. It builds from the source checkout and starts Xvfb, x11vnc, noVNC, and the API β the stack that owns a single headed Chrome session. Both user-facing listeners bind to numeric loopback.
Once health responds, open the live view at
127.0.0.1:6080/vnc.html and check the API from another terminal:
Ctrl+C stops it.
The first build takes several minutes. It installs the hash-locked Python environment, then uses Patchright to install the current Google Chrome Stable package. The exact browser version is captured with each accepted image, so rebuilding the same source later may pick up a newer Stable.
Linux host networking is deliberate. It keeps the unauthenticated v0.x noVNC surface on numeric loopback. Docker Desktop and remote-host deployment are outside this quickstart.
With the runtime healthy and curl plus jq installed. Local loopback needs no bearer token by
design β read the authority contract before you change the
deployment shape.
What that did: session/create started one headed Chrome session and returned its UUID plus the
local view URL. navigate validated the destination, pinned the allowed addresses, and changed the
page on the shared display. snapshot returned bounded text, accessibility state, viewport
metadata, counters, and a PNG of that same page. At no point did the API and the human view create
competing browsers β they met at one owned session.
The same flow ships as examples/curl.sh.
Any MCP client β Claude Code, Claude Desktop, Cursor, Windsurf β can drive the session while you watch, and take over when it gets stuck.
Already have the Python client? aether-browser mcp serves the same nine tools.
Nine tools β browser_open Β· browser_navigate Β· browser_read Β· browser_click Β·
browser_type Β· browser_press Β· browser_scroll Β· browser_status Β· browser_close
browser_open hands back the live view URL, and every response after it repeats that URL, so you
always know where to look. On connect, the server tells the model to stop and ask for a takeover at
a login, a payment, or a 2FA prompt rather than guessing β the loop in the recording above.
Setup and limits: docs/MCP.md.
The same API from Node, with types and cleanup you cannot forget:
withSession always ends the session, including when your callback throws, so a crash cannot leave
the single slot occupied. No runtime dependencies, and it runs anywhere that can reach the server.
It carries a small CLI too: npx aether-browser doctor tells you what is missing before a first
run, and up builds and starts the runtime on a Linux host.
The same client, same name, same commands, released version for version with the npm package:
The session context manager always ends the session, including when the body raises. No runtime
dependencies β the transport is urllib from the standard library β ships type hints, and runs on
Python 3.10 or newer, anywhere that can reach the server. Same CLI as the npm package:
aether-browser doctor, up, status, open, down.
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/agent-browser)<a href="https://allmcps.com/mcp/agent-browser"><img src="https://allmcps.com/api/badge/agent-browser?style=directory" alt="Agent Browser on AllMCPs" /></a>