{"slug": "neobrowser-an-mcp-server-that-drives-real-chrome-with-your-logged-in-sessions", "title": "NeoBrowser: An MCP server that drives real Chrome with your logged-in sessions", "summary": "NeoBrowser, an open-source MCP server that drives a real Google Chrome browser with logged-in sessions, has been released as a Rust rewrite with a ~4 MB static binary. It passes bot.sannysoft with a genuine fingerprint, reuses real user profiles to avoid login walls, and detects CAPTCHAs and bot walls, handing control back to the user. The tool is available via a one-line installer for macOS/Linux and Windows binaries on GitHub.", "body_md": "**Your AI drives a real Chrome with your real logged-in sessions — it wins the fingerprint game (passes bot.sannysoft with a genuine fingerprint), moves the mouse like a human, and lands already authenticated, so it isn't flagged like a stock headless bot.** An MCP server for AI models to use the web the way you do.\n\nIt doesn't pretend to be invisible: when a site throws an interactive challenge (reCAPTCHA, Turnstile) NeoBrowser **detects** it and hands control back with a real-session or human path — that honesty is what makes it dependable.\n\nMost browser tools for LLMs launch a fresh, fingerprintable headless browser with no cookies, so the model hits login walls and bot checks constantly. NeoBrowser drives the **real Google Chrome binary** and can reuse **your actual logged-in profile**, so the model lands already authenticated and looks like a genuine user — because it *is* one.\n\n```\n// Add to your MCP client (Claude Code, Claude Desktop, Cursor, …)\n{ \"mcpServers\": { \"neobrowser\": { \"command\": \"neobrowser\" } } }\n```\n\nRust rewrite: a single ~4 MB static binary, no runtime to install. (The original Python implementation lives on in this repo as a test oracle — see\n\n[Development].)\n\n```\n# One line (macOS / Linux):\ncurl -fsSL https://raw.githubusercontent.com/pitiflautico/neobrowser/main/install.sh | sh\n\n# Or from source (needs the Rust toolchain):\ngit clone https://github.com/pitiflautico/neobrowser && cd neobrowser/rust\ncargo build --release        # -> target/release/neobrowser\n\nneobrowser doctor            # verify Chrome is found + a live CDP smoke test\n```\n\nWindows binaries are on the [Releases](https://github.com/pitiflautico/neobrowser/releases) page. Requires Google Chrome (or Chromium); auto-discovered on macOS/Linux/Windows, override with `NEOBROWSER_CHROME_BIN`\n\n.\n\n*Real run: login, file upload and a bot-detector check against live sites (~14 s).*\n\n```\npython3 rust/scripts/demo.py     # drives a real login, file upload, and a bot-detector check\n```\n\nReal output against live sites:\n\n```\n✓ Open a real login page             Navigated to .../login\n✓ Fill the username / password       ok\n✓ Click Login (real isTrusted click) ok\n✓ Read the result → logged in        You logged into a secure area!\n✓ Attach a real image file           ok\n✓ Submit the upload                  ok\n✓ Server confirms the file           neobrowser_demo.png\n✓ Check the stealth tells            {\"webdriver\":\"hidden (passed)\",\"chrome_runtime\":true,\"headless_ua\":false}\n```\n\n| NeoBrowser | Playwright MCP / Puppeteer | browser-use | |\n|---|---|---|---|\nDrives the real Chrome binary |\n✅ | ||\nReuses your real logged-in sessions (no API keys, no re-login) |\n✅ | ❌ | ❌ |\nStealth by default — passes bot.sannysoft with a genuine fingerprint |\n✅ | ❌ | partial |\nSemantic element finding (accessibility tree + heuristics + optional LLM) |\n✅ | ❌ selectors | ✅ |\nMulti-source search that routes around bot walls |\n✅ | ❌ | ❌ |\n| Single static binary, zero runtime deps | ✅ | ❌ Node + browsers | ❌ |\n| Talks CDP directly (no Selenium/WebDriver) | ✅ | — | — |\n\n**Real-session browsing**— optionally decrypt + inject cookies from your real Chrome profile (opt-in; macOS Keychain / Linux secret-service / Windows DPAPI). Session-identity cookies for Google/LinkedIn/Microsoft are excluded so your real browser isn't logged out.**Stealth-hardened, genuinely**— real Chrome,`navigator.webdriver`\n\nsuppressed, real-version User-Agent matching its Client Hints,**real GPU WebGL**(not spoofed). The philosophy is consistency, not piling on fakes. Verified live against bot.sannysoft.** Bot-wall aware**—`navigate`\n\ndetects bot walls, CAPTCHAs, consent gates, rate-limits and login gates on any site and tells the model how to react.**Multi-source search**— text (DuckDuckGo + Google), images (Bing + Google), videos (YouTube + Google): walled sources are skipped, results merged. No single site is a hard dependency.**Real multi-tab**—`new_tab`\n\n/`list_tabs`\n\n/`switch_tab`\n\n/`close_tab`\n\n, all sharing one Chrome.**43 tools**— navigate, click, type, fill/submit forms, upload/download, read, extract tables, screenshot, scroll, console/network logs, performance metrics, record/replay playbooks, web/image/video search, login, and more.**Robust core**— one isolated CDP connection per tab (tokio), typed timeouts, self-healing recovery from dead tabs / restarted Chrome, and no orphaned Chrome processes.\n\n— full reference for all 43 tools (params + descriptions). Regenerate with[docs/TOOLS.md](/pitiflautico/neobrowser/blob/main/docs/TOOLS.md)`neobrowser tools --markdown`\n\n; introspect live with`neobrowser tools`\n\n.— architecture, build/test, and conventions for contributors and AI agents.[AGENTS.md](/pitiflautico/neobrowser/blob/main/AGENTS.md)- The MCP\n`initialize`\n\nresponse ships an`instructions`\n\nfield so the model gets a usage primer automatically.\n\nA reproducible harness ([ bench/](/pitiflautico/neobrowser/blob/main/bench)) drives browser tools through a shared\ntask matrix. It includes a\n\n**neutral 2-way comparison vs Playwright MCP**(\n\n`python3 bench/compare.py`\n\n) with a common layer — nothing tuned to make either win.\nHonest first-run findings: both pass the shared functional tasks; **Playwright MCP is faster**(NeoBrowser pays for forcing frames so deferred content renders), while\n\n**NeoBrowser adds session persistence and first-class bot-wall detection** Playwright MCP lacks. On adversarial pages\n\n**both were walled equally**(single IP) — no \"evades better\" claim; that needs residential proxies + repeated runs. Metrics separate\n\n`task_execution_success`\n\nfrom `destination_access_success`\n\nso a detected wall never\ninflates the score. See [bench/README.md](/pitiflautico/neobrowser/blob/main/bench/README.md)and\n\n`bench/compare.md`\n\n.Register it with any MCP client, then ask your model to browse. Example tool calls:\n\n```\nnavigate   { \"url\": \"https://example.com\" }\nfind       { \"intent\": \"search box\" }        → returns a backendNodeId\ntype       { \"text\": \"hello world\" }\nscreenshot { \"format\": \"png\" }                → returned as an image\nread       {}                                 → visible page text\n```\n\nBy default NeoBrowser runs its own headless Chrome under a dedicated profile. To reuse your real logged-in sessions, set `NEOBROWSER_REAL_PROFILE`\n\n(see below).\n\nSet `NEOBROWSER_REAL_PROFILE`\n\nto the Chrome profile folder whose sessions you want (e.g. `\"Default\"`\n\n, `\"Profile 1\"`\n\n). NeoBrowser decrypts that profile's cookies via the OS keychain and injects them, so the agent starts authenticated:\n\n```\n{ \"mcpServers\": { \"neobrowser\": {\n  \"command\": \"neobrowser\",\n  \"env\": { \"NEOBROWSER_REAL_PROFILE\": \"Default\" }\n} } }\n```\n\nOr attach to a Chrome you already have open (started with `--remote-debugging-port=9222`\n\n): set `NEOBROWSER_ATTACH_PORT=9222`\n\n. In attach mode NeoBrowser never patches or kills your real browser.\n\nModern bot detection (Cloudflare, DataDome, …) mostly looks for **inconsistencies** — a spoofed UA that doesn't match Client Hints, a `HeadlessChrome`\n\ntoken, software WebGL, `navigator.webdriver === true`\n\n. NeoBrowser is **genuinely consistent** rather than piling on spoofs:\n\n- Runs the\n**real Chrome binary**(real TLS, real fonts, real everything). `navigator.webdriver`\n\nforced`undefined`\n\n; anti-throttle + focus emulation keep the headless compositor live so content actually renders.- UA rewritten to the\n**real installed Chrome version** via the launch flag, so genuine Client Hints stay consistent. - No\n`--disable-gpu`\n\n, so WebGL reports the**real GPU**. - JS patches for\n`plugins`\n\n,`languages`\n\n, and the permissions/`Notification`\n\nmismatch — only on tabs NeoBrowser owns, never on an attached real Chrome.\n\nBeyond the fingerprint, input is **behaviorally human**: clicks move the cursor to the target along a multi-step path with human-cadence pauses (not a teleport-then-click), and typing can be per-key with realistic timing — the signals behavioral systems watch for.\n\nVerified live: passes bot.sannysoft's WebDriver, Chrome, plugins and WebGL checks with the host's genuine fingerprint. **CI installs Chrome and runs these checks against a real browser on every push**; the full bot.sannysoft run is an on-demand test (`cargo test --test stealth_verify -- --ignored`\n\n).\n\nWhat no tool can promise is defeating *interactive challenges* — reCAPTCHA, Turnstile, or behavioral/reputation systems (DataDome) can still put up a wall, and a fresh cookie-less profile is itself a signal. NeoBrowser's edge there is a warm real profile plus **detecting** the wall (`navigate`\n\nflags it) so the model reacts instead of hammering it.\n\n| Env var | Default | Purpose |\n|---|---|---|\n`NEOBROWSER_REAL_PROFILE` |\n(unset) |\nReal Chrome profile folder to pull sessions from |\n`NEOBROWSER_PROFILE` |\n`default` |\nWhich Ghost profile this session uses. Chrome locks a profile exclusively, so give concurrent sessions different names to keep them from colliding |\n`NEOBROWSER_ATTACH_PORT` |\n(unset) |\nAttach to an already-running Chrome on this debug port |\n`NEOBROWSER_CHROME_BIN` |\n(auto) |\nPath to the Chrome/Chromium binary |\n`NEOBROWSER_HOME` |\n`~/.neobrowser` |\nWhere profiles, cookies, sessions, playbooks, downloads live |\n`NEOBROWSER_PROXY` |\n(unset) |\nUpstream proxy (`http://…` or `socks5://…` ) |\n`NEOBROWSER_DISABLE_GPU` |\n(unset) |\nForce software rendering (GPU-less CI hosts only) |\n`ANTHROPIC_API_KEY` |\n(unset) |\nEnables the optional LLM fallback in `find` (your key, your cost; off by default) |\n\nReal-session mode reads cookies from your Chrome profile and injects them into an automated browser. Treat it like any credential:\n\n- It is\n**opt-in**— nothing touches your real profile unless you set`NEOBROWSER_REAL_PROFILE`\n\n. - Cookie/session files are written under\n`~/.neobrowser`\n\nwith`0600`\n\npermissions. - Server-side fetches (\n`browse`\n\n,`download`\n\n) are**SSRF-guarded** to public http(s) only. - The\n`login`\n\ntool refuses non-`https`\n\nURLs and never logs credentials. - Anything an AI browses with your session acts\n**as you**. Point it only at sites and tasks you'd be comfortable doing yourself. This is a tool for automating*your own*accounts and workflows — not for evading access controls on services you don't own.\n\n```\n# Rust (primary):\ncd rust && cargo test          # unit + one live-Chrome integration test (self-skips without Chrome)\ncargo test --test stealth_verify -- --ignored   # real bot.sannysoft detector\n\n# Python (legacy implementation, kept as a differential-testing oracle):\npip install -e \".[dev]\" && python -m pytest -q\n```\n\nMIT © Daniel Perez Pinazo", "url": "https://wpnews.pro/news/neobrowser-an-mcp-server-that-drives-real-chrome-with-your-logged-in-sessions", "canonical_source": "https://github.com/pitiflautico/neobrowser", "published_at": "2026-08-18 13:25:54+00:00", "updated_at": "2026-08-18 13:41:31.791012+00:00", "lang": "en", "topics": ["ai-tools", "ai-agents", "developer-tools"], "entities": ["NeoBrowser", "Google Chrome", "Playwright MCP", "Puppeteer", "browser-use", "GitHub", "Claude Code", "Claude Desktop"], "alternates": {"html": "https://wpnews.pro/news/neobrowser-an-mcp-server-that-drives-real-chrome-with-your-logged-in-sessions", "markdown": "https://wpnews.pro/news/neobrowser-an-mcp-server-that-drives-real-chrome-with-your-logged-in-sessions.md", "text": "https://wpnews.pro/news/neobrowser-an-mcp-server-that-drives-real-chrome-with-your-logged-in-sessions.txt", "jsonld": "https://wpnews.pro/news/neobrowser-an-mcp-server-that-drives-real-chrome-with-your-logged-in-sessions.jsonld"}}