MCP Camoufox
MCP Camoufox
The most feature-rich stealth browser MCP server. 69 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@latestWhat 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
MCP Server | Tools | Stealth | npx Install | Persistent Session |
Chrome DevTools MCP | 30+ | No | Built-in | Yes |
whit3rabbit/camoufox-mcp | 1 | Yes | Yes | No |
redf0x1/camofox-mcp | 45 | Yes | No (clone) | Yes |
Sekinal/camoufox-mcp | 49 | Yes | No (clone) | Yes |
Playwright CLI | 60+ | No | Yes | Yes |
69 | Yes | Yes | Yes |
Setup
Global (available in all projects):
claude mcp add camoufox --scope user -- npx -y mcp-camoufox@latestProject only (current project):
claude mcp add camoufox -- npx -y mcp-camoufox@latestGlobal — add to config file:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.jsonLinux:
~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"camoufox": {
"command": "npx",
"args": ["-y", "mcp-camoufox@latest"]
}
}
}Claude Desktop is always global — no project-level config.
Global — Preferences > Features > MCP, or ~/.cursor/mcp.json:
Project — .cursor/mcp.json in project root:
{
"mcpServers": {
"camoufox": {
"command": "npx",
"args": ["-y", "mcp-camoufox@latest"]
}
}
}Global — ~/.windsurf/mcp.json:
Project — .windsurf/mcp.json in project root:
{
"servers": {
"camoufox": {
"command": "npx",
"args": ["-y", "mcp-camoufox@latest"]
}
}
}Global — VS Code settings or ~/.continue/config.json:
Project — .vscode/mcp.json in project root:
{
"mcpServers": {
"camoufox": {
"command": "npx",
"args": ["-y", "mcp-camoufox@latest"]
}
}
}Global — ~/.factory/mcp.json:
Project — .factory/mcp.json in project root:
{
"mcpServers": {
"camoufox": {
"type": "stdio",
"command": "npx",
"args": ["-y", "mcp-camoufox@latest"],
"disabled": false
}
}
}Or via CLI:
droid mcp add camoufox "npx -y mcp-camoufox@latest"Global — ~/.config/opencode/opencode.json:
Project — opencode.json in project root:
{
"mcp": {
"camoufox": {
"type": "local",
"command": ["npx", "-y", "mcp-camoufox@latest"],
"enabled": true
}
}
}Note: OpenCode uses
"type": "local"(not"stdio") andcommandas a single array.
Global — ~/.trae/mcp.json:
Project — .trae/mcp.json in project root:
{
"mcpServers": [
{
"name": "camoufox",
"command": ["npx", "-y", "mcp-camoufox@latest"]
}
]
}Note: Trae uses an array format for
mcpServers, not an object.
Global — ~/.gemini/antigravity/mcp_config.json:
{
"mcpServers": {
"camoufox": {
"command": "npx",
"args": ["-y", "mcp-camoufox@latest"]
}
}
}Or via UI: Agent Panel > ... > MCP Servers > Manage MCP Servers > View raw config.
Antigravity is global only — no project-level MCP config.
Requirements
Requirement | Version | Check |
Node.js | 18+ |
|
That's all. Camoufox browser binary (~80MB) downloads automatically on first launch.
All 69 Tools
Browser Lifecycle (2)
Tool | Description |
| Launch stealth browser. Options: |
| Close browser. Cookies preserved in profile. |
Navigation (4)
Tool | Description |
| Go to URL. Options: |
| Back in history |
| Forward in history |
| Reload page |
DOM & Content (6)
Tool | Description |
| Get interactive elements with ref IDs. Call after every navigation. |
| Capture viewport or full page. Options: |
| Text from page or selector (max 5000 chars) |
| HTML from page or selector (max 10000 chars) |
| Current URL + title |
| Export page as PDF |
Element Interaction (9)
Tool | Description |
| Click by ref ID. Auto JS-fallback for overlays. Options: |
| Click by visible text. Options: |
| Click by ARIA role + name |
| Hover over element |
| Fill input/textarea (clears first) |
| Select from dropdown |
| Toggle checkbox/radio |
| Upload file to input |
Keyboard (2)
Tool | Description |
| Type char by char. Options: |
| Key or combo: |
Mouse XY (3)
Tool | Description |
| Click at exact coordinates |
| Move cursor to coordinates |
| Drag between two elements |
Wait (4)
Tool | Description |
| Wait for selector or text (visible/hidden/attached/detached) |
| Wait for page load |
| Wait for URL pattern match |
| Wait for network response pattern |
Tabs (4)
Tool | Description |
| List all tabs |
| Open new tab |
| Switch tab |
| Close tab |
Cookies (3)
Tool | Description |
| List cookies. Options: |
| Set cookie |
| Delete by name/domain. Empty = clear all. |
Local Storage (3)
Tool | Description |
| Get all or specific key |
| Set key-value |
| Clear all |
Session Storage (2)
Tool | Description |
| Get all or specific key |
| Set key-value |
JavaScript (2)
Tool | Description |
| Run JS in page context |
| Inject script that runs on every page load |
Element Inspection (4)
Tool | Description |
| Full element info: tag, attributes, box, styles |
| Get specific attribute |
| Query multiple elements by CSS selector |
| Get all links with URL + text. Options: |
Frames (2)
Tool | Description |
| List all frames/iframes |
| Run JS inside a frame |
Batch Operations (3)
Tool | Description |
| Multiple actions in one call (click, fill, type, press, wait) |
| Fill multiple fields + optional submit |
| Navigate + snapshot in one call |
Viewport (2)
Tool | Description |
| Get width x height |
| Set dimensions |
Scroll (1)
Tool | Description |
| Scroll up/down/left/right by pixel amount |
Dialog (1)
Tool | Description |
| Pre-set accept/dismiss for next alert/confirm/prompt |
Accessibility (1)
Tool | Description |
| Accessibility tree for LLM understanding |
Console & Network (4)
Tool | Description |
| Capture and retrieve browser console messages |
| Capture and retrieve network requests |
Scraping & Extraction (4)
Tool | Description |
| Auto-detect repeated content (cards, listings) and suggest CSS selectors. |
| Extract data from repeated elements as clean JSON. Auto-deduplicates, filters empties, |
| Extract HTML table as JSON array with auto-detected headers |
| Smart scraper: auto-extract main content (strips nav/footer), links, meta, headings. Smart truncation at paragraph boundary. |
Debug (3)
Tool | Description |
| Health check: browser status, tabs, URL |
| JS errors from page |
| Export network traffic as HAR file |
Examples
Login to a website
browser_launch(url="https://accounts.google.com", headless=false)
browser_snapshot() # see email input
fill(ref="e1", value="user@gmail.com") # fill email
click(ref="e4") # click Next
wait_for(selector='input[type="password"]') # wait for password page
browser_snapshot()
fill(ref="e2", value="mypassword") # fill password
click(ref="e4") # click NextFill a form in one call
fill_form(
fields=[
{ref: "e3", value: "John Doe"},
{ref: "e5", value: "john@example.com"},
{ref: "e7", value: "Hello world"}
],
submit_ref="e10"
)Batch multiple actions
batch_actions(actions=[
{type: "click", ref: "e5"},
{type: "wait", timeout: 1000},
{type: "fill", ref: "e8", value: "search query"},
{type: "press", key: "Enter"}
])Search Google
browser_launch(url="https://google.com")
browser_snapshot()
click(ref="e5") # search box
type_text(text="mcp-camoufox npm")
press_key(key="Enter")Multi-tab research
browser_launch(url="https://github.com")
tab_new(url="https://stackoverflow.com")
tab_list()
tab_select(index=0)Wait for API response
click(ref="e10")
wait_for_response(url_pattern="/api/data")
browser_snapshot()Inspect elements
inspect_element(ref="e5")
get_links(filter="github.com")
query_selector_all(selector=".product-card")Work with iframes
list_frames()
frame_evaluate(frame_index=1, expression="document.title")Scrape job listings (structured)
browser_launch(url="https://glints.com/id/opportunities/jobs/explore")
detect_content_pattern() # auto-suggest selectors
extract_structured(
container_selector=".job-card", # from detect_content_pattern
fields=[
{name: "title", selector: "h3"},
{name: "company", selector: ".company-name"},
{name: "location", selector: ".location"},
{name: "url", selector: "a", attribute: "href"}
]
)Scrape page content (smart)
scrape_page(only_main_content=true, max_text_length=8000)
# Returns: title, url, meta, text (truncated at paragraph boundary),
# links, headings, truncated flag, total_text_lengthManage storage
localstorage_get()
localstorage_set(key="token", value="abc123")
cookie_list(domain="example.com")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
Path | Contents |
| Browser profile (cookies, localStorage, cache) |
| Screenshots, PDFs, HAR exports |
Reset everything: rm -rf ~/.camoufox-mcp/
Troubleshooting
Problem | Fix |
"Browser not running" | Call |
Click blocked by overlay | Auto JS-fallback handles it. Or |
Stale refs after navigation | Call |
Window too large |
|
First launch slow | Downloading Camoufox binary (~80MB). Happens once. |
Huge snapshot output | Normal for big pages. Use |
iframe not accessible | Use |
CAPTCHA appears | Cannot auto-solve. Use |
License
MIT
Built by RobithYusuf
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/RobithYusuf/mcp-camoufox'
If you have feedback or need assistance with the MCP directory API, please join our Discord server