Stealthy, LLM-drivable browser-control engine: a Python library + an 85-tool MCP server on stealth Chromium (CloakBrowser) with full Chrome DevTools Protocol - for Claude Code and any MCP client.
claude mcp add eyebrowse -- python -m eyebrowse{
"mcpServers": {
"eyebrowse": {
"command": "python",
"args": ["-m", "eyebrowse"]
}
}
}MCP Servers overview
<!-- mcp-name: io.github.Evil-Bane/eyebrowse -->
<div align="center">
# 👁️ EyeBrowse
### A stealthy, LLM-drivable browser engine — one codebase, two faces.
A **Python library** *and* an **MCP server** for driving a real, hard-to-detect browser, so
legitimate automation isn't false-flagged or IP-banned by Cloudflare, DataDome, Akamai, or
PerimeterX. Built on **CloakBrowser** — a stealth **Chromium** (Chrome/146) that's a Playwright
drop-in — so EyeBrowse gets the full **Chrome DevTools Protocol**: trusted cursorless clicks,
deep network inspection, MHTML, PDF, and native video.
[](https://github.com/Evil-Bane/eyebrowse/actions/workflows/ci.yml)
[](https://pypi.org/project/eyebrowse/)
[](https://www.python.org/)
[](LICENSE)
<br/>
[](docs/TOOLS.md)
[-4285F4.svg)](https://pypi.org/project/cloakbrowser/)
[](https://github.com/astral-sh/ruff)
[](CONTRIBUTING.md)

<sub>▶ Full-quality MP4: <a href="https://github.com/Evil-Bane/eyebrowse/blob/master/docs/demo.mp4">docs/demo.mp4</a> — an AI agent drives EyeBrowse over MCP: clears a Cloudflare check, then reads real docs (asyncio · httpx · MDN).</sub>
</div>
---
## Why EyeBrowse?
- 🥷 **Stealth by default** — engine-level fingerprint spoofing (`geoip` + `humanize` on out of the box, novel fingerprint per launch); `navigator.webdriver` masked; viewport auto-sized to the spoofed screen. No `puppeteer-extra` band-aids — the anti-detection is *compiled into the browser*.
- 🤖 **Built for LLMs** — pages are read as an **ARIA tree with `[ref=…]` handles**; the model acts by ref (`click`/`type`/`hover`), not by brittle CSS or raw pixels. Cross-origin iframes, shadow DOM, popups — handled.
- ⚡ **Chrome DevTools Protocol** — **trusted, cursorless clicks** by node ref (`Input.dispatchMouseEvent`), raw `Network`/`Performance`/`Emulation` access, **MHTML** snapshots, **PDF** export, and **native video** — all reachable as tools.
- 🧰 **Library *and* MCP from one codebase** — a clean Python API (`EyeBrowse` + `Session`), mirrored 1:1 by a thin **MCP server** (**85 `browser_*` tools**) for Claude Code and any MCP client.
- 🪟 **Never boxed in** — the curated high-level API doesn't hide Playwright: reach `session.page` / `.context` / `.browser` for anything it doesn't wrap.
- 🔋 **Batteries included** — multi-session, proxy + identity rotation, API-mode captcha solvers, native video, full **HAR** capture, and clean-markdown extraction.
> **Scope.** EyeBrowse is a low-level browser *engine* — it holds **no workflow logic**.
> Consumers decide *what* to do; the engine provides *what's possible*.
## Contents
[Quickstart](#quickstart) · [Install](#install) · [Features](#features) · [Compare](#how-eyebrowse-compares) · [Library](#use-as-a-library) · [MCP](#use-over-mcp) · [Proxy & identity](#proxy--identity-optional) · [Extraction](#extraction) · [Recording](#recording) · [How it works](#how-it-works) · [Caveats](#caveats) · [Tools](docs/TOOLS.md) · [License](#license)
## Quickstart
```bash
pip install eyebrowse
# The stealth-Chromium binary downloads automatically on first launch — nothing else to run.
```
```python
import asyncio
from eyebrowse import EyeBrowse
async def main():
eb = EyeBrowse() # stealth defaults: geoip · humanize
async with eb.session() as s:
await s.navigate("https://example.com")
print(await s.snapshot()) # ARIA tree with [ref=...] handles
await s.click("e6") # act on a ref from the snapshot
await eb.aclose()
asyncio.run(main())
```
…or wire it into **Claude Code** (or any MCP client) — see [Use over MCP](#use-over-mcp).
## Install
**From PyPI**
```bash
pip install eyebrowse # or: uv pip install eyebrowse
# CloakBrowser fetches its Chromium binary lazily on first launch — nothing to run.
pip install "eyebrowse[extract]" # optional: + Crawl4AI markdown extraction (heavier)
```
**From source (development)**
```bash
git clone https://github.com/Evil-Bane/eyebrowse && cd eyebrowse
uv sync # core engine (add --extra extract for Crawl4AI)
cp .env.example .env # only if you use a proxy / captcha keys
```
Python 3.12 (pinned `<3.13`). Engine: `cloakbrowser>=0.3` (stealth Chromium, Chrome/146), on
`playwright 1.60` and `mcp 1.27`.
## Features
| | |
|---|---|
| 🥷 **Stealth** | CloakBrowser's patched-Chromium fingerprint spoofing (novel `--fingerprint` per launch); `geoip` + `humanize` by default; `webdriver` masked; viewport matched to the spoofed screen. |
| 🤖 **LLM interaction** | `aria_snapshot(mode="ai")` → ARIA tree + `[ref]` handles; click / type / hover / select / drag / file-upload / dialogs / keyboard; coordinate mouse too. |
| ⚡ **CDP** | **trusted cursorless click** by ref, raw CDP (`Network` / `Performance` / `Emulation`), **MHTML** capture, **PDF** export. |
| 🪟 **Frames & DOM** | cross-origin iframe routing by ref, shadow-DOM piercing, popup/new-tab switching, `evaluate` inside any frame. |
| 🗂 **Multi-session** | independent stealth sessions, each with its own context / identity / proxy. |
| 🌐 **Network** | inspect requests/responses (incl. XHR/fetch bodies & WebSocket frames), block URLs, mock responses, go offline, full **HAR** export. |
| 💾 **State** | cookies, localStorage & sessionStorage (CRUD), `storage_state` save/reload. |
| 🪪 **Identity rotation** | fresh fingerprint + isolated profile + paired proxy; pluggable residential `ProxyProvider`. |
| 🧩 **Captcha** | pluggable **API-mode** solvers (CapSolver / 2Captcha / CapMonster / NextCaptcha) + TOTP — no browser extension. |
| 📄 **Extraction** | Crawl4AI `raw:` feed → clean, token-efficient **markdown** (no LLM, no API keys). |
| 🎥 **Capture** | screenshots, Playwright tracing, and **native video** (`.webm`). |
| ✅ **Verify & debug** | assertions, element highlighting, locator generation, geolocation/header emulation. |
Full per-tool reference: **[docs/TOOLS.md](docs/TOOLS.md)** (85 tools across 18 groups).
## How EyeBrowse compares
| | EyeBrowse | Playwright MCP | browser-use | playwright-stealth |
| :------------------------------------------------ | :----------------: | :-----------------: | :----------------: | :----------------: |
| Anti-detection **compiled into the browser** | ✅ | ❌ | ❌ | ⚠️ JS patches |
| LLM-native ARIA **`[ref]`** interaction model | ✅ | ✅ | ✅ | ❌ |
| Ships an **MCP server** | ✅ (85 tools) | ✅ | ⚠️ partial | ❌ |
| One codebase: Python **library *and* MCP** | ✅ | MCP-only | lib-only | lib-only |
| Full **CDP** (trusted clicks · network · MHTML · PDF · video) | ✅ | ⚠️ partial | ❌ | ⚠️ partial |
| **Captcha** (API-mode) + TOTP | ✅ | ❌ | ❌ | ❌ |
| **Proxy + identity rotation** built in | ✅ | ❌ | ⚠️ partial | ❌ |
| Cross-origin iframes · shadow DOM · popups | ✅ | ✅ | ⚠️ partial | n/a |
<sub>Fair-use note: each project targets a different niche — this compares them on the axes EyeBrowse optimizes for (stealth + LLM-drivable + one library/MCP codebase), not as an overall ranking.</sub>
## Use as a library
```python
import asyncio
from eyebrowse import EyeBrowse
async def main():
eb = EyeBrowse() # stealth defaults
try:
async with eb.session() as s: # a stealth session (auto-closed)
await s.navigate("https://example.com")
print(await s.snapshot()) # ARIA tree with [ref=...] handles
await s.click("e6") # act on a ref
await s.type("e8", "hello", submit=True)
png = await s.screenshot(full_page=True)
title = await s.page.title() # full Playwright power when you need it
finally:
await eb.aclose()
asyncio.run(main())
```
Run the included proof: `uv run python examples/direct_usage.py`.
## Use over MCP
EyeBrowse ships an MCP server (`eyebrowse-mcp`, FastMCP over stdio). Add it to any MCP client.
**Claude Code (CLI):**
```bash
claude mcp add eyebrowse -- eyebrowse-mcp
```
**Any MCP client (JSON config):**
```json
{
"mcpServers": {
"eyebrowse": {
"command": "eyebrowse-mcp"
}
}
}
```
Then drive the loop: `browser_navigate(url)` → read the snapshot → act by ref
(`browser_click` / `browser_type` / …). A default session is auto-created, so most tools just
work. Full list: **[docs/TOOLS.md](docs/TOOLS.md)**.
## Proxy & identity (optional)
Runs **proxyless by default** (`geoip` still aligns locale/timezone to your real IP). Add a proxy
only when you want one:
```python
await eb.new_session(proxy="http://user:pass@residential.example:8080")
await eb.rotate_What people ask about eyebrowse
What is Evil-Bane/eyebrowse?
+
Evil-Bane/eyebrowse is mcp servers for the Claude AI ecosystem. Stealthy, LLM-drivable browser-control engine: a Python library + an 85-tool MCP server on stealth Chromium (CloakBrowser) with full Chrome DevTools Protocol - for Claude Code and any MCP client. It has 0 GitHub stars and was last updated today.
How do I install eyebrowse?
+
You can install eyebrowse by cloning the repository (https://github.com/Evil-Bane/eyebrowse) or following the README instructions on GitHub. ClaudeWave also provides quick install blocks on this page.
Is Evil-Bane/eyebrowse safe to use?
+
Evil-Bane/eyebrowse has not been audited yet by our security agent. Review the original repository on GitHub before using it in production.
Who maintains Evil-Bane/eyebrowse?
+
Evil-Bane/eyebrowse is maintained by Evil-Bane. The last recorded GitHub activity is from today, with 0 open issues.
Are there alternatives to eyebrowse?
+
Yes. On ClaudeWave you can browse similar mcp servers at /categories/mcp, sorted by popularity or recent activity.
Deploy eyebrowse to your cloud
Ship this repo to production in minutes. Each platform spins up its own environment with editable env vars.
Maintain this repo? Add a badge to your README
Drop the badge into your GitHub README to show it's tracked on ClaudeWave. Each badge links back to this page and reflects the live Trust Score.
[](https://claudewave.com/repo/evil-bane-eyebrowse)<a href="https://claudewave.com/repo/evil-bane-eyebrowse"><img src="https://claudewave.com/api/badge/evil-bane-eyebrowse" alt="Featured on ClaudeWave: Evil-Bane/eyebrowse" width="320" height="64" /></a>More MCP Servers
Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.
User-friendly AI Interface (Supports Ollama, OpenAI API, ...)
An open-source AI agent that brings the power of Gemini directly into your terminal.
The fastest path to AI-powered full stack observability, even for lean teams.
🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl!
⭐AI-driven public opinion & trend monitor with multi-platform aggregation, RSS, and smart alerts.🎯 告别信息过载,你的 AI 舆情监控助手与热点筛选工具!聚合多平台热点 + RSS 订阅,支持关键词精准筛选。AI 智能筛选新闻 + AI 翻译 + AI 分析简报直推手机,也支持接入 MCP 架构,赋能 AI 自然语言对话分析、情感洞察与趋势预测等。支持 Docker ,数据本地/云端自持。集成微信/飞书/钉钉/Telegram/邮件/ntfy/bark/slack 等渠道智能推送。