Model or dataset
LvcidPsyche/auto-browser avatar
LvcidPsyche/auto-browser

Auto Browser: An MCP-Native Browser Control Plane With Human Takeover and Signed Audit Trails

Give your AI agent a real browser, with a human in the loop. Open-source MCP-native browser agent.

792 stars133 forksPythonMIT

At a glance

What is it?
Auto Browser packages a Playwright browser as an MCP server, adding human takeover via noVNC, reusable auth profiles, and Ed25519-signed witness receipts. It targets authorized workflows where an agent needs a real browser and a person may need to step in.
Who is it for?
Adopt Auto Browser if you run MCP-based agent workflows that need a real browser, especially for internal dashboards, operator-assisted QA, or login-once workflows on brittle sites. Skip it if you need CAPTCHA solving, unauthorized scraping, or bypass tooling, which the project explicitly excludes.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 18 days ago.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 14, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

What Auto Browser Solves and Who It Serves

Auto Browser addresses a specific gap: LLM agents that need to operate a real browser, not just fetch HTML, while keeping a human in control. Many MCP servers offer browser tools, but they tend to be stateless and opaque. This project builds a control plane around Playwright, exposing it as an MCP server from day one, rather than bolting a browser adapter onto an existing agent framework. The intended users are operators and developers working with MCP clients like Claude Desktop or Cursor, plus direct REST callers who prefer curl-first control. The README lists good fits: internal dashboards, admin tools, operator-assisted QA, login-once account workflows, and brittle sites where a human may need to recover the flow. It explicitly excludes CAPTCHA solving, unauthorized scraping, and deceptive identity shaping, so the scope is authorized, internal automation, not adversarial web tasks.

The Mechanism: MCP Server, Playwright Sessions, and Human Takeover

The architecture centers on a controller that manages Playwright-backed sessions. Each session supports screenshots, DOM summaries, OCR excerpts, tab controls, downloads, and network inspection. The MCP surface is native: the browser is packaged as an MCP server, not an afterthought. Human takeover works through noVNC, which keeps the same live session visible in a browser tab, so a person can step in when the web gets brittle. The README's highest-signal demo flow is: create a session, log in manually if needed, save the session as a named auth profile, then open a new session from that profile to continue without reauth. That flow implies the controller persists session state, including cookies and local storage, in a way that can be reused. The system also includes approval gates, operator identity headers, audit events, and PII scrubbing, which suggest a policy layer between the agent's actions and the browser.

Getting It Running: Docker Compose, Environment, and MCP Bridges

The quickstart is straightforward: clone the repository, run docker compose up --build, and the stack comes up with default settings. Optionally, copy .env.example to .env and run make doctor, which checks local Docker access and permission to open localhost sockets. After startup, three surfaces are available: API docs at http://127.0.0.1:8000/docs, an operator dashboard at http://127.0.0.1:8000/dashboard, and visual takeover at http://127.0.0.1:6080/vnc.html?autoconnect=true&resize=scale. All published ports bind to 127.0.0.1 by default, which is a sensible security default for local-first deployment. For non-Docker use, the README mentions pip install auto-browser-client for the SDK, pip install auto-browser-langchain for LangChain/LangGraph/CrewAI adapters, and uvx auto-browser-mcp to run the MCP stdio bridge with zero setup. A Codespaces option provisions the stack automatically, with the dashboard and noVNC tabs ready in about 90 seconds.

Safety Rails: Approvals, PII Scrubbing, and Witness Receipts

The project's safety story is more than a list of features. It includes approval gates, operator identity headers, audit events, PII scrubbing, and protection profiles. The distinctive piece is the Witness receipt chain: each receipt is Ed25519-signed, and an exported bundle can be verified with scripts/verify_witness_bundle.py, which imports nothing from the project. That means a recipient can check the evidence without trusting or running the controller. The README also mentions an adversarial audit at docs/audits/2026-08-execution-audit.md, which found safety controls that reported success while doing nothing, with reproductions, fixes, and gates that close the class. This is an unusual admission: the project publicly documents a past failure in its own safety controls. That transparency is valuable, but it also means you should read that audit before relying on any specific control, because the README does not list which controls were affected or how to confirm the fixes in your deployment.

Observations, Presets, and the Cost of Reading a Page

A notable design choice is the text observation preset, introduced in v1.5.0. Instead of taking a screenshot and running OCR, the text preset returns the accessibility outline, extracted text, and interactables, with no screenshot and no OCR. This is the cheapest way for an agent to read a page, and you can set PERCEPTION_PRESET_DEFAULT=text to make it a deployment-wide default. That is a practical answer to the pixel cost problem, but it trades away visual context. A page that renders critical information only in images or complex layouts will not be fully captured by the text preset. The README also shows browser.find_elements now accepts a query (plain text or regex, case-insensitive) instead of a CSS selector, returning matches with surrounding context. That is useful for checking one value without a full observe, but it implies the agent must know what to search for, which is not always the case in exploratory browsing.

Limitations and Failure Modes

The most obvious limitation is the explicit exclusion of CAPTCHA solving and unauthorized scraping. If your workflow hits CAPTCHAs, Auto Browser will not help you bypass them, and the project's stance is that it should not. Another limitation: the README mentions that the controller and browser-node Playwright versions must match exactly, and CI enforces this parity. That is a maintenance burden: a single-side bump can cause crash-loops in compose deployments. The audit finding about safety controls that reported success while doing nothing is a real failure mode, even if fixed, because it shows that the system's self-reported status cannot be taken at face value without external verification. The witness verification script is the mitigation, but it only works if you actually run it on every exported bundle. The README also notes that fork state exports are encrypted at rest and shadow-browse state never touches disk, which is good, but it also implies that shadow-browsing is a feature with state that could leak if not handled correctly.

Alternatives and the MCP-Native Difference

The obvious alternative is to use a general-purpose browser automation library like Playwright or Puppeteer directly, with your own MCP wrapper. That approach gives you full control over the session lifecycle and no dependency on a third-party control plane, but you would have to build the approval gates, PII scrubbing, auth profiles, and witness receipts yourself. Auto Browser packages those as a product surface, which is the core trade-off: you trade architectural freedom for a ready-made safety and audit layer. Another alternative is a cloud-based browser service, but those typically do not give you local-first deployment or the same level of human takeover via noVNC. The MCP-native design is the differentiator: many browser tools are MCP servers that expose a few tools, but Auto Browser treats the browser as a first-class MCP resource with a dashboard and a REST API. That means you can use it from any MCP client, not just a specific agent framework, and you can also call it directly via REST for curl-first control.

Maintenance, Upgrades, and License Implications

The project is under active development, with releases v1.7.0, v1.6.1, and v1.6.0 in August 2026, and a CHANGELOG.md that tracks the full history. The README highlights changes since v1.3.0: browser_manager.py was refactored into a pure facade and composition root, fork state exports are encrypted at rest, and download capture tasks can no longer be garbage-collected mid-flight. These are internal robustness improvements, not just feature additions. The CI gates include dependency audits, fixture evals, client tests, Python wheel builds, and an 80% controller coverage gate on Python 3.11 and 3.14. That suggests a mature testing culture, but it also means upgrades require keeping the controller and browser-node Playwright versions in lockstep, which is a concrete maintenance cost. The license is MIT, so you can use, modify, and redistribute the code freely, including in commercial products, with attribution. The README notes that releases publish to PyPI via trusted publishing (OIDC), which is a secure supply-chain practice. For a production deployment, you should plan to monitor the CHANGELOG for Playwright version bumps and run the witness verification script as part of your own audit process.

Editorial conclusion

Adopt Auto Browser if you run MCP-based agent workflows that need a real browser, especially for internal dashboards, operator-assisted QA, or login-once workflows on brittle sites. Skip it if you need CAPTCHA solving, unauthorized scraping, or bypass tooling, which the project explicitly excludes. Before production use, verify the witness verification script's independence, review the documented audit findings and the fixes that close the reported safety-control class, and confirm the Playwright version parity between the pip controller and npm browser-node, as CI enforces it. Make a specific choice: run the Docker Compose stack locally, set PERCEPTION_PRESET_DEFAULT=text to save pixels, and test the auth profile flow against your target site before trusting agent autonomy.

Official sources

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
Community notes

Community notes