Undetected browser automation MCP server - a stealth, anti-bot-resistant alternative to chrome-devtools-mcp for Claude, Cursor and AI agents. Powered by nodriver (bypasses Cloudflare/WebDriver detection). 65 tools, plus several isolated browsers at once so parallel agents never share a session.
- ✓Open-source license (MIT)
- ✓Actively maintained (<30d)
- ✓Clear description
- ✓Topics declared
- ✓Documented (README)
claude mcp add nodriver -- uvx nodriver-mcp{
"mcpServers": {
"nodriver": {
"command": "uvx",
"args": ["nodriver-mcp"]
}
}
}MCP Servers overview
<p align="center"> <img src="https://raw.githubusercontent.com/andresolbach/nodriver-mcp-server/main/assets/logo.png" alt="nodriver-mcp-server — undetected browser automation MCP server" width="130" height="130"> </p> # nodriver-mcp-server <!-- mcp-name: io.github.andresolbach/nodriver-mcp-server --> **An undetected, anti-bot-resistant browser automation MCP server** — a drop-in, stealth alternative to [`chrome-devtools-mcp`](https://github.com/ChromeDevTools/chrome-devtools-mcp) for AI agents like **Claude**, **Claude Code**, **Cursor**, **Windsurf**, and any [Model Context Protocol](https://modelcontextprotocol.io) client. Powered by [nodriver](https://github.com/ultrafunkamsterdam/nodriver) so your agent can browse, scrape, and automate real Chrome **without tripping Cloudflare, hCaptcha, or WebDriver fingerprint detection**. [](https://pypi.org/project/nodriver-mcp/) [](https://github.com/andresolbach/nodriver-mcp-server/actions/workflows/ci.yml)      > **Keywords:** MCP server · browser automation · undetected chromedriver · anti-bot · Cloudflare bypass · web scraping · Claude · Cursor · nodriver · chrome-devtools-mcp alternative · Playwright/Puppeteer alternative · AI agent tools. ## Is this the problem you have? If you drive a browser from an AI agent, you have probably run into one of these: - The page sits on **"Just a moment…"** or **"Checking your browser before accessing"** and never loads - A **"Verify you are human"** checkbox that reappears every single time you click it - **"Unusual Activity Detected"**, **"Access Denied"**, or a plain **HTTP 403** — from a site that opens perfectly in your normal browser - `navigator.webdriver` returns `true`, and the site quietly serves you different content because of it - The login works when you do it by hand, and fails the moment automation does the same steps - It all worked for weeks, then the site started returning an empty page or a captcha wall None of that is your script being wrong. It is anti-bot detection — Cloudflare, DataDome, PerimeterX, Akamai, hCaptcha — recognising the **automation stack itself**. It shows up with `chrome-devtools-mcp`, `playwright-mcp`, Puppeteer, Selenium and `browser-use` alike, because they all drive Chrome in ways that leave a detectable signature: a ChromeDriver binary, WebDriver markers, CDP artifacts. ## Why this fixes it [`nodriver`](https://github.com/ultrafunkamsterdam/nodriver) is the successor of `undetected-chromedriver`. It speaks **the CDP protocol directly** — no ChromeDriver binary, no Selenium/WebDriver markers — so `navigator.webdriver` reads `false` rather than `true`, and a session looks like a person using Chrome. This server exposes that through the **same tool surface as `chrome-devtools-mcp`** (65 tools), so your agent keeps a familiar API and simply stops getting blocked. Swapping is a config change, not a rewrite. **What it will not do**, so you can judge before installing: it does not solve image or text captchas for you, it cannot defeat every protection on every site, and it will not rescue a scraper that hammers a server. If a site blocks you for *what you do* rather than *what you are*, no driver fixes that. `cf_verify` handles the common Cloudflare checkbox challenge; it is not a captcha-solving service. ## Does it actually pass? Here is the evidence Claiming "undetected" is easy, so here is what the standard fingerprint suite reports when this server drives the page itself. Reproduce it in one line: point your agent at `https://bot.sannysoft.com` and take a snapshot. <p align="center"> <img src="https://raw.githubusercontent.com/andresolbach/nodriver-mcp-server/main/assets/proof/sannysoft.png" alt="bot.sannysoft.com results: all checks green" width="700"> </p> | Check | Result | |---|---| | `bot.sannysoft.com` — Intoli + fingerprint suite | **58 checks, 0 failed** | | `navigator.webdriver` | `false` — a boolean on `Navigator.prototype`, not an own property, exactly as in a normal browser | | `window.chrome` | present | | `navigator.plugins` | 5 | | `navigator.languages` | 4 entries | | User agent | no `Headless` token | **What this does and does not prove.** It shows the browser presents no automation artifacts to client-side fingerprinting, which is what these suites test and what most blocks key off. It does not prove any particular site will let you in: server-side signals such as IP reputation and request rate are outside what any driver controls, and captchas are not solved (see above). Measured on Chrome 151 / Windows 11, headful, with the default profile. ## Features - 🕵️ **Undetected by design** — `navigator.webdriver` reads `false`, exactly as in a browser a person is using, and there are no CDP or WebDriver artifacts to find. - ☁️ **Built-in Cloudflare challenge solver** (`cf_verify`, needs the `[cf]` extra). - 🖼️ **Frames are not a blind spot** — `list_frames` plus a `frame` argument on the readers, and `take_snapshot` splices each iframe's tree in under the element hosting it, so a payment field or consent wall inside one gets a uid and can be clicked and filled like anything else. - 🔍 **A network log that says what happened** — status, response headers, timing, transfer size, redirect hops and failures, plus WebSocket frames in both directions. A 500, a 404, a redirect and a DNS failure are different lines, not the same one. - 👥 **Several isolated browsers at once** — pass `browser: "agent-a"` to any tool and that name gets its own Chrome, in its own process, with its own cookies, tabs and uids. Parallel agents stop stealing each other's selected tab. Omit it and nothing changes: the default browser runs in the server process, exactly as before. [How it works](#several-agents-several-browsers) - 🧩 **65 tools** covering navigation, input, snapshots, screenshots, content/PDF export, network + console inspection, device emulation, cookies/storage, sessions, profiles, and performance tracing. - 🧠 **Schemas written for the agent, not just the compiler** — every parameter carries a description, fixed-value options are real enums, and each tool declares read-only/destructive hints. See [why this matters](#built-for-the-agent-that-calls-it). - 📄 **Compact accessibility-tree snapshots** (`take_snapshot`) — searchable page text with a uid per element. Measured on the Hacker News front page: **27 KB against 97 KB unfiltered, 72% smaller, with every link, URL and text preserved.** Same-origin URLs are printed relative to the page, which is lossless because the root node keeps the absolute one. That saving lands on every single agent step. - 🔗 **Attach to a browser you are already signed into** (`use_running_browser`) — drive your real Chrome profile over its debugging port instead of rebuilding logins in a fresh one. - 📱 **Device emulation** (Pixel 7, iPad) with correct UA / client hints. - ✅ **Actions that verify themselves** — `fill` reads the value back, `set_checked` reads the checked state back, and `click`, `press_key` and `type_text` report when no input event reached the page. A tool that cannot confirm what it did says so instead of reporting success. - 💾 **Session save/restore** — persist logins across runs. - 🧬 **Ephemeral by default, run many at once** — each session gets its own temp Chrome profile (auto-deleted), so Claude Desktop, Claude Code and VS Code can all drive nodriver **simultaneously without colliding**. Named **persistent profiles** are available on demand for reusable logins. - ⚡ **One-command setup** for 15+ MCP clients. ## Installation ```bash # Recommended: isolated install, won't touch your global Python environment uv tool install nodriver-mcp # or with pip pip install nodriver-mcp # or run it without installing anything uvx nodriver-mcp ``` Requires [uv](https://docs.astral.sh/uv/getting-started/installation/) for the first and third form. To track the development branch instead of a release: ```bash uv tool install "nodriver-mcp @ git+https://github.com/andresolbach/nodriver-mcp-server.git@main" ``` Also listed in the [official MCP Registry](https://registry.modelcontextprotocol.io) as `io.github.andresolbach/nodriver-mcp-server`, so clients and marketplaces that read the registry can find and install it directly. > Uses upstream [`nodriver`](https://pypi.org/project/nodriver/) `>=0.50.3`, which contains the Chrome 146+ CDP fixes (`sameParty` removed from `Cookie`, `privateNetworkRequestPolicy` → `localNetworkAccessRequestPolicy`) — **verified working against Chrome 151**. `pip install` also works, but `uv tool install` keeps it isolated. You'll also need a local installation of **Google Chrome** (auto-detected). ### Upgrade ```bash uv tool upgrade nodriver-mcp ``` ## Requirements & tested versions Every tool in this server was tested **end-to-end against Google Chrome 151** with **nodriver 0.50.3** on **Python 3.12.11 / Windows 11** (macOS and Linux are supported too). Because nodriver talks to Chrome directly over CDP and tracks upstream Chrome changes, it keeps working as Chrome auto-updates. | Component | Requirement | Verified version | |-----------|-------------|------------------| | Python | 3.12+ | 3.12.11 | | Google Chrome | any recent stable | 151.0.7922.174 | | Operating system | Windows / macOS / Linux | Windows 11 | | `nodriver` | >= 0.50.3 | 0.50.3 | | `mcp` (MCP SDK) | >= 1.26.0, < 2 | 1.26.0 | | `pillow` | >= 12.1.1 | 12.1.1 | | `tomli-w` | >= 1.0.0 | 1.2.0 | The pip packages/versions are
What people ask about nodriver-mcp-server
What is andresolbach/nodriver-mcp-server?
+
andresolbach/nodriver-mcp-server is mcp servers for the Claude AI ecosystem. Undetected browser automation MCP server - a stealth, anti-bot-resistant alternative to chrome-devtools-mcp for Claude, Cursor and AI agents. Powered by nodriver (bypasses Cloudflare/WebDriver detection). 65 tools, plus several isolated browsers at once so parallel agents never share a session. It has 3 GitHub stars and its last recorded update is dated 2026-08-25.
How do I install nodriver-mcp-server?
+
You can install nodriver-mcp-server by cloning the repository (https://github.com/andresolbach/nodriver-mcp-server) or following the README instructions on GitHub. ClaudeWave also provides quick install blocks on this page.
Is andresolbach/nodriver-mcp-server safe to use?
+
Our security agent has analyzed andresolbach/nodriver-mcp-server and assigned a Trust Score of 95/100 (tier: Verified). See the full breakdown of passed checks and flags on this page.
Who maintains andresolbach/nodriver-mcp-server?
+
andresolbach/nodriver-mcp-server is maintained by andresolbach. The last recorded GitHub activity is dated 2026-08-25, with 0 open issues.
Are there alternatives to nodriver-mcp-server?
+
Yes. On ClaudeWave you can browse similar mcp servers at /categories/mcp, sorted by popularity or recent activity.
Deploy nodriver-mcp-server 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/andresolbach-nodriver-mcp-server)<a href="https://claudewave.com/repo/andresolbach-nodriver-mcp-server"><img src="https://claudewave.com/api/badge/andresolbach-nodriver-mcp-server" alt="Featured on ClaudeWave: andresolbach/nodriver-mcp-server" 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.
Real-time global intelligence dashboard. AI-powered news aggregation, geopolitical monitoring, and infrastructure tracking in a unified situational awareness interface
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!