MCP Camoufox
The most feature-rich stealth browser MCP server. 133 tools for full browser control powered by Camoufox — a Firefox fork with C++ level anti-detection that bypasses Cloudflare, bot detection, and anti-automation.
One command. No Python. No manual setup. Everything auto-installs.
claude mcp add camoufox -- npx -y mcp-camoufox@latest
What Can It Do?
- Login to Google, ChatGPT, GitHub — without getting blocked
- Fill forms, click buttons, type text, upload files
- Manage cookies, localStorage, sessions across visits
- Take screenshots, export PDFs, capture network traffic
- Work with multiple tabs, iframes, dialogs
- Execute JavaScript, inspect elements, scroll pages
- Scrape structured data (job listings, products) with auto-detected selectors
- All while being undetectable by anti-bot systems
Comparison
Competitor figures checked 19 Aug 2026: camofox-mcp counted by running tools/list against v1.15.0 from npm (it is npx-installable — an earlier version of this table wrongly said otherwise); the others are taken from their own READMEs.
Proven on Real Sites
🎯 Cloudflare Turnstile → Success via click_turnstile()
click_turnstile() auto-detects the widget via 6 selector fallback (iframe[src*=challenges.cloudflare.com], [data-sitekey], .cf-turnstile, …), computes checkbox position (offset_x=30 from widget left), and clicks with a 3-step Bezier-like approach — combined with Camoufox's native humanize + disable_coop for cross-origin iframe click.
Scope: works on Interactive Turnstile (visible iframe widget). Managed Challenge interstitials ("Just a moment...") render the widget in shadow DOM — not supported here; use sister project mcp-stealth-chrome (Chrome+CDP) for those. Real-world bypass success also depends on IP reputation and browser fingerprint — code alone doesn't guarantee it.
🧪 bot.sannysoft.com → Firefox Fingerprint Pass
User Agent reports Firefox/135.0, WebDriver missing, WebDriver Advanced passed, Permissions prompt, Plugins length 5 passed, Languages en-US,en, WebGL Intel HD Graphics — all green. ("Chrome: missing" is expected — Camoufox spoofs Firefox, not Chrome.)
🔍 browserscan.net/bot-detection → All Categories Normal
WebDriver, User-Agent, CDP, Navigator — every detection category returns "Normal". Camoufox's C++-level Firefox patches leave zero automation signals.
Setup
One command for Claude Code:
claude mcp add camoufox -- npx -y mcp-camoufox@latest
Every other client takes the same server block — only the config file differs:
{
"mcpServers": {
"camoufox": {
"command": "npx",
"args": ["-y", "mcp-camoufox@latest"]
}
}
}
Two clients need a different shape:
// OpenCode — ~/.config/opencode/opencode.json ("local", not "stdio"; command is one array)
{ "mcp": { "camoufox": { "type": "local", "command": ["npx", "-y", "mcp-camoufox@latest"], "enabled": true } } }
// Trae — ~/.trae/mcp.json (mcpServers is an ARRAY)
{ "mcpServers": [ { "name": "camoufox", "command": ["npx", "-y", "mcp-camoufox@latest"] } ] }
Requirements
Node.js 18+ is the only prerequisite (node --version). The Camoufox browser binary (~80 MB)
downloads itself on first launch — nothing else to install.
On Windows the same one-liner works; there is no standalone .exe because this is a Node package.
The browser lands in %LOCALAPPDATA%\camoufox, profile/screenshots/sessions in
%USERPROFILE%\.camoufox-mcp\, and output paths accept either C:\path\file.json or C:/path/file.json.
That's all. Camoufox browser binary (~80MB) downloads automatically on first launch.
All 133 Tools
Grouped by area. → Full reference, every tool and parameter
32 categories, 133 tools. The full table lives in docs/TOOLS.md so this page stays readable — nothing was dropped, and a script checks both against the running server's tool registry.
Examples
Read a page without launching anything. The browser costs seconds and ~400 MB; most fetches don't
need a DOM. smart_fetch only starts one if the response looks anti-bot blocked.
scrape_markdown(url="https://example.com/docs") # clean markdown, no browser
smart_fetch(url="https://shop.example.com/item/42") # escalates only if blocked
http_request(url="https://api.example.com/v1/me") # reuses the browser's cookies
Log in, then hit the API cheaply. Log in once with the browser, then stay browserless.
browser_launch(url="https://app.example.com/login")
smart_fill(fields_json='{"Email":"[email protected]","Password":"secret"}', submit_label="Sign in")
wait_for_change() # returns when the page really reacts
http_request(url="https://app.example.com/api/orders") # same session, no browser work
Fill a form without a snapshot. smart_fill matches by label; form_introspect tells you what a
form wants and why it is rejecting a submit.
form_introspect() # labels, types, required, validation state
smart_fill(fields_json='{"Customer name":"Rina","E-mail address":"[email protected]"}')
Find out why a click did nothing — before spending the click.
assert_clickable(selector="#submit")
# FAIL: covered by div.overlay — that element would receive the click
Run a whole sequence in one call. Resumable: a failure tells you the index to restart from.
workflow_run(steps=[
{tool: "navigate", args: {url: "https://example.com"}},
{tool: "smart_fill", args: {fields_json: '{"Search":"camoufox"}'}},
{tool: "click_text", args: {text: "Search", within: "@dialog"}},
{tool: "wait_for_change", args: {}}
])
Search through an engine you control (self-hosted SearXNG, or Brave/Tavily/Exa with a key).
search(query="firefox tls fingerprint", endpoint="http://127.0.0.1:8899")
scrape_markdown(url="<a url from the results>")
How It Works
AI Agent (Claude, Cursor, Windsurf, VS Code)
|
| MCP Protocol (stdio JSON-RPC)
v
mcp-camoufox (Node.js)
|
| Playwright API (Juggler protocol, NOT CDP)
v
Camoufox (Patched Firefox binary)
|
| C++ anti-fingerprint patches
v
Website (Cloudflare, bot detection — bypassed)
Why stealth works
- Juggler protocol instead of CDP — sites detecting Chrome DevTools Protocol cannot detect Camoufox
- C++ level patches — fingerprint spoofing at browser engine level, not JavaScript injection
- GeoIP auto-detection — timezone, locale, geolocation match your real IP
- Human-like behavior — optional
humanizemode for realistic mouse movements
Why sessions persist
Browser profile stored at ~/.camoufox-mcp/profile/. Cookies, localStorage, IndexedDB survive across sessions. Login once, stay logged in.
Why refs work better
browser_snapshot tags elements with data-mcp-ref attributes. This is:
- More token-efficient than sending full HTML
- More reliable than CSS selectors that break when sites update
- Clickable via
click(ref="e5")— no selector gymnastics
Data Storage
Reset everything: rm -rf ~/.camoufox-mcp/ — or call the reset_profile tool (browser must be closed first).
Switching between accounts on the same domain
The default profile persists across browser_close calls, so the next login on the same domain inherits cookies + session — sometimes redirecting to the wrong account. Two options:
**browser_launch(fresh_profile=true)**— uses a temp profile dir that's removed onbrowser_close. Best for one-off logins.**reset_profile**(browser must be closed) — wipes the shared profile entirely.
Troubleshooting
License
MIT