SuperAPI AI Directory

nodriver-mcp-server

Undetected Chrome automation via nodriver for anti-bot protected sites: accessibility snapshots, input automation, network inspection and persistent sessions.

Open website

About this tool

Purpose

nodriver-mcp-server is a browser automation MCP server for AI agents, positioned as a stealthy, anti-anti-scraping alternative to chrome-devtools-mcp. It is suitable for Claude, Claude Code, Cursor, Windsurf, and any client that supports the Model Context Protocol. Its core goal is to enable agents to browse, scrape, and automate real Chrome without triggering Cloudflare, hCaptcha, or WebDriver fingerprint detection.

Main Capabilities

  • Stealthy driver: Based on nodriver (the successor to undetected-chromedriver), it uses the CDP protocol directly, produces no ChromeDriver binary, Selenium/WebDriver markers, or CDP traces, and navigator.webdriver reads as false.
  • Built-in Cloudflare challenge handling: The cf_verify tool can handle common Cloudflare checkbox challenges (requires the [cf] extra dependency), but it is not a captcha-solving service.
  • 70 tools: Covering navigation, input, snapshots, screenshots, content/PDF export, network and console inspection, device emulation, cookies/storage, sessions, profiles, performance tracing, and more.
  • Accessibility tree snapshots: take_snapshot generates compact, searchable page text, with each element carrying a uid. Measured on the Hacker News homepage at 27 KB, a 72% reduction compared to the unfiltered 97 KB, while preserving all links, URLs, and text.
  • Network logs: Records status, response headers, DevTools-style timing breakdown (DNS, connection, TLS, time to first byte, download), the script and line number that initiated the request, transfer size, redirect hops and failures, as well as WebSocket frames and server-sent events.
  • Response body capture: capture_bodies writes to disk immediately when responses arrive, covering all tabs, workers, and service workers, avoiding loss caused by Chrome buffering or subsequent navigation; search_bodies can find where a value first appearsin which response and by which request it was sent back.
  • Passive security review: audit_security checks security headers (including real CSP analysis: nonce, strict-dynamic, multiple policies), CORS, TLS and certificates, cookie flags, responses that a CDN may incorrectly serve, first-party and third-party page communication, and lists what the Chrome Issues panel reports. inspect_storage inventories localStorage, sessionStorage, IndexedDB, Cache Storage, and service workers, and decodes discovered tokens. export_har exports HAR files for use with Burp, ZAP, or DevTools.
  • Multiple isolated browsers: Specify a name for each tool via the browser parameter; each name gets an independent Chrome process, profile, cookies, tabs, and uid, so parallel agents do not interfere with each other. The default browser runs within the server process, producing no extra overhead. Up to 12 browsers can be open simultaneously (including the default), with each additional browser using about 200 MB of memory and taking about 1 second to start.
  • Attach to an already logged-in browser: use_running_browser can drive your already logged-in real Chrome profile through the debugging port, avoiding the need to rebuild logins.
  • Device emulation: Supports devices such as Pixel 7 and iPad, with correct UA / client hints.
  • Self-verifying operations: fill reads back the value, set_checked reads back the checked state, and click, press_key, and type_text report when no input events reach the page.
  • Session save/restore: Persist logins across runs.
  • Temporary profiles: By default, each session uses an independent temporary Chrome profile (automatically deleted), so Claude Desktop, Claude Code, and VS Code can drive nodriver simultaneously without conflicts. Named persistent profiles can be created as needed to reuse logins.
  • One-click setup: Supports 15+ MCP clients.

Usage

Installation requires uv (for the first and third forms). pip insta can also be usedll, but uv tool install is recommended to keep it isolated. Requires a local installation of Google Chrome (auto-detected).

Paste the following into your MCP client configuration (works for claude_desktop_config.json, ~/.claude.json, .cursor/mcp.json, .mcp.json, etc.):

{
  "mcpServers": {
    "nodriver": {
      "command": "uvx",
      "args": ["nodriver-mcp-server"]
    }
  }
}

Environment variables: by default the browser starts clean, suppresses the Google Translate popup, and blocks externally installed Chrome extensions. It can be re-enabled via environment variables or the runtime set_browser_flags tool, which can also set other Chrome launch flags via the extra_args parameter (such as --lang=de-DE, --window-size=1280,800). The browser automatically recovers after Chrome closes or crashes.

Chrome launches at about:blank rather than the new tab page, so the new tab page's own Google requests do not appear in list_network_requests, and new_page reuses that blank launch tab.

manage_extensions can manage extensions at runtime: list lists installed extensions and their status; on/off is the main switch (--disable-extensions), restarts Chrome, and overrides unpacked extensions; load/unload loads or unloads unpacked extensions from a folder. To use extensions permanently, switch to a persistent profile, install once from the Chrome Web Store in that browser, and enable the extensions. Unpacked extensions require Chromium or Chrome for Testing, because official Chrome builds removed --load-extension after v137, and as of Chrome 151 it cannot be restored. NODRIVER_BROWSER_PATH can be pointed at Chromium / Chrome for Testing.

Multi-agent multi-browser: each tool accepts an optional browser parameter; a name that does not exist is created on the fly. Each name is a separate Chrome in a separate process, with its own profile, cookies, tabs, snapshot uids, and console/network capture. The default name "default" runs within the server process and incurs no extra overhead. Two callers sharing the same name still share the same Chrome; isolation is per browser, not per caller.

Persistent profiles: list_profiles lists persistent profiles and shows the active one; create_profile(name, activate=false) creates a reusable profile; use_profile(name) switches to a persistent profile ("" / "temp" returns to temporary); use_temp_profile switches back to a new temporary profile; delete_profile(name) deletes a persistent profile. Persistent profiles are located at ~/.nodriver-mcp/profiles/<name>. A fixed profile can also be forced globally via the NODRIVER_USER_DATA_DIR environment variable.

Attaching to an already logged-in browser: first start Chrome yourself (with a debugging port), then attach at runtime via use_running_browser(port=9222), or set NODRIVER_BROWSER_URL=http://127.0.0.1:9222 Prepend. During appending, the server will not close browsers that it did not start.

Use Cases

  • AI agents need to access websites protected against scraping by Cloudflare, DataDome, PerimeterX, Akamai, hCaptcha, etc.
  • Web scraping and automation, without wanting to be detected as an automated tool.
  • Need to run multiple agents in parallel, each with its own independent browser session.
  • Need to reuse a logged-in Chrome profile for automated operations.
  • Scenarios requiring network inspection, security review, storage inventory, or HAR export.

Limitations

  • Does not solve image or text CAPTCHAs.
  • Cannot defeat all protections on all websites.
  • Cannot save scrapers that place a high load on the server; if a website blocks you because of behavior rather than identity, no driver can solve it.
  • cf_verify only handles the common Cloudflare checkbox challenge, and is not a CAPTCHA-solving service.
  • Loading unpacked extensions requires Chromium or Chrome for Testing; official Chrome builds do not support it.
  • Each additional browser uses about 200 MB of memory, and at most 12 can be open at the same time.
  • Requires Google Chrome to be installed locally.
  • Uses upstream nodriver >=0.50.3, includes Chrome 146+ CDP fixes, verified on Chrome 151.

Tested Versions

All tools have been tested end-to-end against Google Chrome 151, nodriver 0.50.3, Python 3.12.11 / Windows 11 (macOS and Linux are also supported). The pip package/version is also listed in requirements.txt, but uv tool install is recommended for a fully pinned, reproducible installation.