MCP.Market

Eyebrowse MCP server

by Evil-Bane·io.github.Evil-Bane/eyebrowse·v0.3.10·1 stars

Stealthy, LLM-drivable browser engine — a Python library + 85-tool MCP server on stealth Chromium.

B82/100grade B
What users say
No reviews yet
Be the first
Safety scan
B82/100

full report

Adoption
New

1 stars30 downloads/wk

Reviews

Write one

Nobody has reviewed Eyebrowse yet.

If you have run it, two minutes of your experience saves the next person an afternoon.

Eyebrowse tools (85, 9 write)

write = sends, deletes, buys or posts

Read from the package source without running it. The installed server may list more.

  • browser_block_urls

    Abort requests matching glob patterns (e.g. '**/*.png', '**/ads/**'). Useful to save proxy bandwidth or strip trackers/images.

  • browser_capture_mhtml

    Save the full page as a single-file MHTML archive (iframes + shadow DOM + external resources + inline styles) via CDP Page.captureSnapshot — captures the exact page state for debugging/forensics. Chromium only. Returns the saved file path.

  • browser_cdp_click

    Click an element by its [ref=...] using a TRUSTED, cursorless CDP input event.

  • browser_cdp_sendwrite action

    Send a raw Chrome DevTools Protocol command and return its result.

  • browser_clear_highlightswrite action

    Remove all highlight outlines added via browser_highlight.

  • browser_click

    Click an element by its snapshot ref (e.g. 'e12' or 'f1e36' for iframe elements). Returns a fresh snapshot.

  • browser_close_session

    Close a session and free its browser.

  • browser_console_messages

    Return console messages collected on the current page (type + text).

  • browser_cookie_clearwrite action

    Remove all cookies in the context.

  • browser_cookie_deletewrite action

    Delete the cookie with the given name.

  • browser_cookie_get

    Get a single cookie by name (or null if absent).

  • browser_cookie_list

    List cookies in the context (optionally filtered to a url).

  • browser_cookie_set

    Set a cookie. Provide either url, or domain+path.

  • browser_drag

    Drag one element onto another (by refs). Returns a snapshot.

  • browser_evaluate

    Evaluate a JS expression or function in the page and return the result.

  • browser_extract

    Extract the current page as clean, token-efficient markdown (no LLM involved).

  • browser_file_uploadwrite action

    Set files on a file <input> by ref (absolute paths). Returns a snapshot.

  • browser_fill_form

    Fill multiple fields at once. Each field: {ref, value, submit?, clear?}.

  • browser_find

    Find VISIBLE interactive elements whose text / placeholder / label / type contains `query` — the escape hatch when browser_snapshot is all 'generic' (no usable [ref=eN]). Returns a list of matches, each with a css selector you act on via the ref slot, e.g. browser_click(ref="css=...") or browser_type(ref="css=...", text=...). Example: browser_find("verification code") -> the OTP input + its css re

  • browser_generate_locator

    Return a stable CSS selector for an element (by ref) for use in code/tests.

  • browser_grant_permissions

    Pre-grant browser permissions so the native prompt never blocks the flow.

  • browser_handle_dialog

    Accept or dismiss an open JS dialog (alert/confirm/prompt). prompt_text fills a prompt() before accepting. Dialogs stay open until handled.

  • browser_har_export

    Finalize and return the HAR file path for a recording session.

  • browser_highlight

    Draw a magenta outline around an element (by ref) — handy before a screenshot.

  • browser_hover

    Hover over an element by ref. Returns a snapshot.

  • browser_keyboard_type

    Type text into the currently focused element — no ref needed.

  • browser_list_sessions

    List all open sessions with their current url, tab count, and identity.

  • browser_localstorage_clear

    Clear all localStorage for the current origin.

  • browser_localstorage_get

    Get a localStorage value by key (null if absent).

  • browser_localstorage_list

    List all localStorage key/value pairs for the current origin.

  • browser_localstorage_removewrite action

    Remove a localStorage key.

  • browser_localstorage_set

    Set a localStorage key to a value.

  • browser_mock_url

    Fulfill requests matching a glob pattern with a canned response (response mocking / fault injection). Cleared by browser_unblock_urls.

  • browser_mouse_click

    Click at absolute coordinates (x, y). button: left|right|middle; clicks for multi-click.

  • browser_mouse_down

    Press a mouse button down (at the current position).

  • browser_mouse_drag

    Drag from (x1, y1) to (x2, y2) with the left button held.

  • browser_mouse_move

    Move the mouse to absolute page coordinates (x, y).

  • browser_mouse_up

    Release a mouse button (at the current position).

  • browser_mouse_wheel

    Scroll the mouse wheel by (delta_x, delta_y) pixels.

  • browser_navigate

    Navigate to a URL. Returns the page's ARIA snapshot (with [ref=...] handles).

  • browser_navigate_back

    Go back one entry in history. Returns the new page's ARIA snapshot.

  • browser_navigate_forward

    Go forward one entry in history. Returns the new page's ARIA snapshot.

  • browser_network_request

    Get one request's full detail: request + response headers, and response body (auto-captured for XHR/fetch resource types — body may still be populating for very recent requests). Match by list index or url substring (most recent match).

  • browser_network_requests

    List network requests seen this session (method, url, status, resource_type). Optionally filter by resource_type (e.g. 'xhr', 'fetch', 'document') or url substring. For full details including headers and body, use browser_network_request.

  • browser_new_identity

    Start a fresh browser identity in a new session: a novel fingerprint (randomized OS + screen) with isolated storage, optionally paired with a proxy. Proxyless by default; pass proxy_url ('http://user:pass@host:port') or proxy_server[+username/password] to pair an IP. persistent=True mints a reusable profile dir. Returns the new session info.

  • browser_new_sessionwrite action

    Create a new stealth browser session and make it current. Returns its id.

  • browser_pdf_save

    Save the current page as a PDF file. Chromium only. Returns the saved file path.

  • browser_press_key

    Press a keyboard key (e.g. 'Enter', 'Escape', 'ArrowDown', 'Tab'). Returns a snapshot.

  • browser_reload

    Reload the current page. Returns the page's ARIA snapshot.

  • browser_resize

    Resize the page viewport (e.g. 1920x1080). Affects layout and screenshot size.

  • browser_screenshot
  • browser_scroll

    Scroll the page by pixels in a direction, or scroll an element into view.

  • browser_scroll_to_bottom

    Scroll to the very bottom of the page, pausing to let lazy content load.

  • browser_select_combobox

    Pick `value` from a CUSTOM / searchable dropdown or combobox (country & country-code pickers, styled listboxes) where browser_select_option times out. Opens the trigger `ref`, types `value` to filter, commits the highlighted option by keyboard (ArrowDown+Enter), then VERIFIES the committed value and falls back to clicking the option by visible text. Filter by the COUNTRY NAME (e.g. 'Germany'), not

  • browser_select_option

    Select option(s) in a NATIVE <select> by ref (match by value OR visible label). Self- verifies and, on a no-match, returns the available option labels. For a CUSTOM / searchable dropdown (styled div, role=combobox/listbox — most country-code pickers) this will not work — use browser_select_combobox instead. Returns the committed option + a snapshot.

  • browser_sessionstorage_clear

    Clear all sessionStorage for the current origin.

  • browser_sessionstorage_get

    Get a sessionStorage value by key (null if absent).

  • browser_sessionstorage_list

    List all sessionStorage key/value pairs for the current origin.

  • browser_sessionstorage_removewrite action

    Remove a sessionStorage key.

  • browser_sessionstorage_set

    Set a sessionStorage key to a value.

  • browser_set_extra_headers

    Set extra HTTP headers sent with every request in this session.

  • browser_set_geolocation

    Override the geolocation the page reads (note: geoip already aligns geo to the IP).

  • browser_set_input

    Set `value` on a FRAMEWORK-CONTROLLED input (React/Vue) via the native value setter + input/change events. Use this when browser_type / fill silently leaves the field EMPTY (controlled components re-derive value from state and ignore plain typing — e.g. some OTP and masked phone inputs). Returns the resulting value + a snapshot.

  • browser_set_offline

    Toggle the context's network offline/online (to test offline behavior).

  • browser_set_proxy

    Pin a proxy as the default for subsequent sessions/identities. (Proxies are bound at launch, so existing sessions are unaffected.)

  • browser_snapshot

    Capture the page's ARIA accessibility tree with [ref=...] handles.

  • browser_snapshot_frame

    Snapshot a specific child frame directly. Use when browser_snapshot returns an iframe node with empty/collapsed children — snapshotting the frame is reliable (works for same-origin AND cross-origin frames).

  • browser_solve_captcha

    Solve a captcha on the current page and inject the token (no extension).

  • browser_start_tracing

    Start a Playwright trace (screenshots + DOM snapshots) for later inspection.

  • browser_stop_tracing

    Stop tracing and write a trace.zip (open with `playwright show-trace`). Returns the path.

  • browser_storage_state

    Save cookies + localStorage to a JSON file. Reload it later via browser_new_session(storage_state=path). Returns the file path.

  • browser_switch_to_popup

    Switch the active page to the most recently opened popup or new tab.

  • browser_tabs

    Manage tabs. action: list | new | select | close (index for select/close, url optional for new). Returns the resulting tab list.

  • browser_totp_generate

    Generate a TOTP (time-based one-time password) from a base32 shared secret.

  • browser_type

    Type text into a field by ref (top-frame or iframe ref like 'f1e20'). submit=True presses Enter after. Returns a snapshot.

  • browser_type_otp

    Enter an OTP/verification `code` into the field at `ref`, handling MULTI-BOX widgets (one <input maxlength=1> per digit that auto-advances) by distributing the digits across the boxes via the React-tracked setter — instead of typing the whole code into box 1 (which lands the digits in the wrong boxes). Works on a single field too. Returns {boxes, value} (read it back) + a snapshot. After this, sti

  • browser_unblock_urlswrite action

    Remove all URL routes added via browser_block_urls or browser_mock_url.

  • browser_verify_element_hidden

    Assert an element (by ref) is hidden/absent. Returns {ok, ...}.

  • browser_verify_element_visible

    Assert an element (by ref) is visible. Returns {ok, ...}.

  • browser_verify_text_visible

    Assert some visible text appears on the page. Returns {ok, ...}.

  • browser_verify_value

    Assert an input/element (by ref) has the expected value. Returns {ok, ...}.

  • browser_video_path

    Path to this session's native video recording (Chromium only).

  • browser_wait_for

    Wait for a condition then return a fresh snapshot. Pass exactly one condition:

  • browser_wait_for_download

    Wait for a file download to complete and return its saved path.

  • browser_ws_messages

    Return all WebSocket connections opened this session and their messages.

Public scan report

scanner v0.1.9 · 2026-09-26 · same rubric, same numbers if you re-run it

no findings
  • Code scan40 source files scanned25/25
  • –Live reliabilityno gateway calls yet and no remote to proben/a
  • –Tool poisoningtools not inspected (local package is not executed); not countedn/a
  • Auth qualitylocal package, no credentials required12/15
  • Maintenancelast push 100 days ago8/15
  • Maintainer identityregistry namespace matches repository owner; GitHub account older than a year8/10
Overall 82/100. Components that don't apply are left out of the denominator. Any critical finding is an F.RubricAppeal a findingJSON

How Eyebrowse compares

Against every graded Scraping and browsing MCP server, from our own scans and uptime checks. Updated after each scan run.

Safety score
82/100
higher than 58% of 866 Scraping and browsing servers
Tools
85
the typical Scraping and browsing server has 6
Tools that change things
11%
typical: 0%. Fewer write tools means less an agent can break
GitHub stars
1
more than 50% of 583 Scraping and browsing servers
Downloads a week
30
more than 10% of 309 Scraping and browsing servers with a package

What its tools let an agent do: 76 read · 9 change

Install Eyebrowse in Claude Code, Cursor or VS Code

claude mcp add eyebrowse -- uvx eyebrowse
Add to Cursor

What the publisher says

From the Eyebrowse repository's README, as published. We do not edit it. Read it on GitHub

<!-- mcp-name: io.github.Evil-Bane/eyebrowse -->

👁️ 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.

-4285F4.svg)

▶ Full-quality MP4: docs/demo.mp4 — an AI agent drives EyeBrowse over MCP: clears a Cloudflare check, then reads real docs (asyncio · httpx · MDN).

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 · Install · Features · Compare · Library · MCP · Proxy & identity · Extraction · Recording · How it works · Caveats · Tools · License

Quickstart

pip install eyebrowse
# The stealth-Chromium binary downloads automatically on first launch — nothing else to run.
import asyncio
from eyebrowse import EyeBrowse

Shortened. The full README is on GitHub.

Nothing above is checked by us. What we check is on the safety report.

Eyebrowse: common questions

Is Eyebrowse MCP server safe?
Mostly: it is graded B (82/100). Read the Eyebrowse safety report
How do I install Eyebrowse?
It runs on your machine. Copy the Claude Code, Cursor, VS Code or Claude Desktop config from the install section.
Does Eyebrowse need an API key?
Not as far as the registry entry and our scan can tell: no credentials are declared or required.
Is Eyebrowse maintained?
The last commit was 139 days ago (2026-06-18). The latest release is v0.3.10.
What can I use instead of Eyebrowse?
Servers from other publishers that do the same job: Ghostfox MCP server, Stealthy Auto Browse MCP server and SeleniumBase MCP server.
How does Eyebrowse compare with other Scraping and browsing MCP servers?
safety score 82/100 (higher than 58% of 866 Scraping and browsing servers); tools 85 (the typical Scraping and browsing server has 6); tools that change things 11% (typical: 0%. Fewer write tools means less an agent can break). Full comparison.

Alternatives to Eyebrowse

Same job from other publishers: the closest match first, then the best rated.

  • Ghostfox
    Self-hosted stealth browser for AI agents: Firefox engine + Rust MCP runtime.
    A
  • Stealthy Auto Browse
    Self-hosted MCP server for stealth browser automation with human-like OS-level input.
    A
  • SeleniumBase MCP
    Stealthy browser automation, testing, and web-scraping via CDP Mode.
    A
  • Browser Use
    Browser agents and stealth cloud browsers for AI: run web tasks, fill forms, extract data.
    A
  • CloakBrowser MCP
    Playwright MCP-compatible browser automation bridge for CloakBrowser Chromium.
    B