zendriver-mcp¶
Undetectable browser automation for LLM agents, spoken over MCP.
zendriver-mcp is an MCP server that gives
your coding agent (Claude, Cursor, Gemini, Copilot) a real Chrome browser it
can actually use on the real web - behind Cloudflare, behind login walls, on
pages that detect and block WebDriver.
It's built on Zendriver, which speaks
the Chrome DevTools Protocol directly instead of going through WebDriver. No
navigator.webdriver flag, no headless telltales, a fingerprint that looks
like ordinary Chrome.
On that foundation, zendriver-mcp layers everything an agent needs to get
work done: a token-efficient DOM walker, an accessibility tree with stable
uids, performance traces, Lighthouse audits, heap snapshots, human-like input,
device emulation, cookie round-tripping, request interception, and more -
96 tools across 22 modules.
Why¶
Most browser-automation MCP servers lean on Puppeteer or Playwright, which
means WebDriver, which means navigator.webdriver === true and a shopping
list of headless telltales Cloudflare / Akamai / PerimeterX know by heart.
Agents that try to work on the real web hit bot walls immediately.
zendriver-mcp starts from the opposite direction:
- CDP instead of WebDriver, so the fingerprint stays clean.
- Human-like input primitives (bezier mouse paths, gaussian typing) for sites that look at how you click, not just whether you do.
- Cookie round-tripping so you log in once and reuse the session.
- A Cloudflare Turnstile solver for the last-mile interactive challenge.
Quick start¶
Getting started Tool reference
Published on PyPI and the
MCP Registry
as io.github.bituq/zendriver-mcp.
uvx zendriver-mcp # zero-setup, re-resolves every run
uv tool install zendriver-mcp # install once, invoke many
pipx install zendriver-mcp
pip install zendriver-mcp
Hook it up to Claude Desktop / Code in one JSON block:
Highlights¶
bypass_cloudflaresolves Turnstile challengesset_user_agent,set_locale,set_timezone,set_geolocationhuman_clickuses bezier mouse pathshuman_typeuses gaussian inter-keystroke timing
start_trace/stop_traceproduce DevTools-loadable JSONtake_heap_snapshotproduces standard.heapsnapshotrun_lighthousereuses the already-running browserset_cpu_throttle,set_network_conditions,set_viewport
export_cookies/import_cookieswork on HTTP-only cookiesblock_urls,set_extra_headers,bypass_service_workergrant_permissions,reset_permissionsconfigure_proxyrestarts with a--proxy-serverarg
get_interaction_tree- 96% fewer tokens than raw HTMLget_accessibility_snapshot- stable uids that survive re-rendersstart_screencast->export_screencast_mp4via ffmpegmock_response/fail_requestsviaFetch.enable
Recipes¶
Step-by-step walkthroughs for common workflows:
- Scrape behind a login, once
- Beat Cloudflare Turnstile
- Performance audit an authenticated flow
- Mock an API response to test the UI
License¶
MIT. The original 49-tool foundation and the token-optimised DOM walker come from ShubhamChoulkar/Zendriver-MCP.