# Mcp Camoufox

> MCP server for stealth browser automation via Camoufox — 79 tools, npx install, anti-bot stealth

- **Type:** MCP server
- **Install:** `agentstack add mcp-robithyusuf-mcp-camoufox`
- **Verified:** Pending review
- **Seller:** [RobithYusuf](https://agentstack.voostack.com/s/robithyusuf)
- **Installs:** 0
- **Category:** [Web & Browser](https://agentstack.voostack.com/c/web-and-browser)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [RobithYusuf](https://github.com/RobithYusuf)
- **Source:** https://github.com/RobithYusuf/mcp-camoufox

## Install

```sh
agentstack add mcp-robithyusuf-mcp-camoufox
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# MCP Camoufox

[](https://www.npmjs.com/package/mcp-camoufox)
[](https://www.npmjs.com/package/mcp-camoufox)
[](https://opensource.org/licenses/MIT)
[](https://nodejs.org)

The most feature-rich stealth browser MCP server. **102 tools** for full browser control powered by [Camoufox](https://github.com/daijro/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.**

```bash
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

| 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 |
| **[mcp-camoufox](https://github.com/RobithYusuf/mcp-camoufox)** | **102** | **Yes** | **Yes** | **Yes** |

## Proven on Real Sites

| Site | Challenge | Result |
|------|-----------|--------|
| `2captcha.com/demo/cloudflare-turnstile` | Cloudflare Turnstile widget | ✅ **"Success!"** via `click_turnstile()` tool ([proof](docs/images/turnstile.jpg)) |
| `bot.sannysoft.com` | Firefox fingerprint tests | ✅ All green ([proof](docs/images/sannysoft.jpg)) |
| `browserscan.net/bot-detection` | WebDriver/UA/CDP/Navigator | ✅ All categories "Normal" ([proof](docs/images/browserscan.jpg)) |

### 🎯 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](https://github.com/RobithYusuf/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

Claude Code

**Global** (available in all projects):
```bash
claude mcp add camoufox --scope user -- npx -y mcp-camoufox@latest
```

**Project only** (current project):
```bash
claude mcp add camoufox -- npx -y mcp-camoufox@latest
```

Claude Desktop

**Global** — add to config file:
- **macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`
- **Windows:** `%APPDATA%\Claude\claude_desktop_config.json`
- **Linux:** `~/.config/Claude/claude_desktop_config.json`

```json
{
  "mcpServers": {
    "camoufox": {
      "command": "npx",
      "args": ["-y", "mcp-camoufox@latest"]
    }
  }
}
```

> Claude Desktop is always global — no project-level config.

Cursor

**Global** — Preferences > Features > MCP, or `~/.cursor/mcp.json`:

**Project** — `.cursor/mcp.json` in project root:

```json
{
  "mcpServers": {
    "camoufox": {
      "command": "npx",
      "args": ["-y", "mcp-camoufox@latest"]
    }
  }
}
```

Windsurf

**Global** — `~/.windsurf/mcp.json`:

**Project** — `.windsurf/mcp.json` in project root:

```json
{
  "servers": {
    "camoufox": {
      "command": "npx",
      "args": ["-y", "mcp-camoufox@latest"]
    }
  }
}
```

VS Code (Continue / Cline / Kilo Code)

**Global** — VS Code settings or `~/.continue/config.json`:

**Project** — `.vscode/mcp.json` in project root:

```json
{
  "mcpServers": {
    "camoufox": {
      "command": "npx",
      "args": ["-y", "mcp-camoufox@latest"]
    }
  }
}
```

Factory (Droid)

**Global** — `~/.factory/mcp.json`:

**Project** — `.factory/mcp.json` in project root:

```json
{
  "mcpServers": {
    "camoufox": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "mcp-camoufox@latest"],
      "disabled": false
    }
  }
}
```

Or via CLI:
```bash
droid mcp add camoufox "npx -y mcp-camoufox@latest"
```

OpenCode

**Global** — `~/.config/opencode/opencode.json`:

**Project** — `opencode.json` in project root:

```json
{
  "mcp": {
    "camoufox": {
      "type": "local",
      "command": ["npx", "-y", "mcp-camoufox@latest"],
      "enabled": true
    }
  }
}
```

> Note: OpenCode uses `"type": "local"` (not `"stdio"`) and `command` as a single array.

Trae (ByteDance)

**Global** — `~/.trae/mcp.json`:

**Project** — `.trae/mcp.json` in project root:

```json
{
  "mcpServers": [
    {
      "name": "camoufox",
      "command": ["npx", "-y", "mcp-camoufox@latest"]
    }
  ]
}
```

> Note: Trae uses an **array** format for `mcpServers`, not an object.

Antigravity (Google)

**Global** — `~/.gemini/antigravity/mcp_config.json`:

```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+ | `node --version` |

That's all. Camoufox browser binary (~80MB) downloads automatically on first launch.

## All 102 Tools

### Browser Lifecycle (2)

| Tool | Description |
|------|-------------|
| `browser_launch` | Launch stealth browser. Options: `url`, `headless`, `humanize`, `geoip`, `locale`, `width`, `height` |
| `browser_close` | Close browser. Cookies preserved in profile. |

### Navigation (4)

| Tool | Description |
|------|-------------|
| `navigate` | Go to URL. Options: `wait_until` (domcontentloaded/load/networkidle), `timeout` |
| `go_back` | Back in history |
| `go_forward` | Forward in history |
| `reload` | Reload page |

### DOM & Content (6)

| Tool | Description |
|------|-------------|
| `browser_snapshot` | Get interactive elements with ref IDs. **Call after every navigation.** On large pages narrow with `roles=["button","textbox"]` or paginate with `offset`/`limit` — refs stay stable. |
| `screenshot` | Capture viewport or full page. Options: `name`, `full_page` |
| `get_text` | Text from page or selector (max 5000 chars) |
| `get_html` | HTML from page or selector (max 10000 chars) |
| `get_url` | Current URL + title |
| `save_pdf` | Export page as PDF |

### Element Interaction (9)

| Tool | Description |
|------|-------------|
| `click` | Click by ref ID. Auto JS-fallback for overlays. Options: `button`, `dblclick` |
| `click_text` | Click by visible text. Options: `exact` |
| `click_role` | Click by ARIA role + name |
| `hover` | Hover over element |
| `fill` | Fill input/textarea (clears first) |
| `select_option` | Select from dropdown |
| `check` / `uncheck` | Toggle checkbox/radio |
| `upload_file` | Upload file to input |

### Keyboard (2)

| Tool | Description |
|------|-------------|
| `type_text` | Type char by char. Options: `delay`. For OTP, masked inputs, date pickers. |
| `press_key` | Key or combo: `Enter`, `Escape`, `Tab`, `Control+a`, `Meta+c` |

### Mouse XY (4)

| Tool | Description |
|------|-------------|
| `mouse_click_xy` | Click at exact coordinates. Optional `steps` (0=instant, 15-30=human-like pre-movement) |
| `mouse_move` | Move cursor to coordinates. Optional `steps` for interpolated path |
| `click_turnstile` | Auto-find + humanized click on Cloudflare Turnstile widget. Params: `offset_x` (default 30), `offset_y`, `wait_render_ms`. Works on Interactive Turnstile (visible iframe widget). Not for Managed Challenge interstitials. |
| `drag_and_drop` | Drag between two elements |

### Wait (4)

| Tool | Description |
|------|-------------|
| `wait_for` | Wait for selector or text (visible/hidden/attached/detached) |
| `wait_for_navigation` | Wait for page load |
| `wait_for_url` | Wait for URL pattern match |
| `wait_for_response` | Wait for network response pattern |

### Tabs (4)

| Tool | Description |
|------|-------------|
| `tab_list` | List all tabs. Pages the site opens itself (`window.open` / `target=_blank`, e.g. OAuth popups) are auto-tracked and appear here too. |
| `tab_new` | Open new tab |
| `tab_select` | Switch tab by `index` or `url_contains` (first tab whose URL matches) |
| `tab_close` | Close tab by `index` (-1 = active) or `url_contains` |

### Cookies (3)

| Tool | Description |
|------|-------------|
| `cookie_list` | List cookies. Options: `domain` filter |
| `cookie_set` | Set cookie |
| `cookie_delete` | Delete by name/domain. Empty = clear all. |

### Local Storage (3)

| Tool | Description |
|------|-------------|
| `localstorage_get` | Get all or specific key |
| `localstorage_set` | Set key-value |
| `localstorage_clear` | Clear all |

### Session Storage (2)

| Tool | Description |
|------|-------------|
| `sessionstorage_get` | Get all or specific key |
| `sessionstorage_set` | Set key-value |

### JavaScript (2)

| Tool | Description |
|------|-------------|
| `evaluate` | Run JS in page context |
| `inject_init_script` | Inject script that runs on every page load |

### Element Inspection (4)

| Tool | Description |
|------|-------------|
| `inspect_element` | Full element info: tag, attributes, box, styles |
| `get_attribute` | Get specific attribute |
| `query_selector_all` | Query multiple elements by CSS selector |
| `get_links` | Get all links with URL + text. Options: `filter` |

### Frames (2)

| Tool | Description |
|------|-------------|
| `list_frames` | List all frames/iframes |
| `frame_evaluate` | Run JS inside a frame |

### Batch Operations (4)

| Tool | Description |
|------|-------------|
| `batch_actions` | Multiple actions in one call (click, fill, type, press, wait) |
| `fill_form` | Fill multiple fields + optional submit |
| `login_classic` | Composite login for email→password forms (Google/Microsoft/generic). Auto email→Next→password→submit, optional TOTP 2FA (`totp_secret` or `totp_code`). Collapses 5–8 calls into one. |
| `navigate_and_snapshot` | Navigate + snapshot in one call |

### Viewport (2)

| Tool | Description |
|------|-------------|
| `get_viewport_size` | Get width x height |
| `set_viewport_size` | Set dimensions |

### Scroll (1)

| Tool | Description |
|------|-------------|
| `scroll` | Scroll up/down/left/right by pixel amount |

### Dialog (1)

| Tool | Description |
|------|-------------|
| `dialog_handle` | Pre-set accept/dismiss for next alert/confirm/prompt |

### Accessibility (1)

| Tool | Description |
|------|-------------|
| `accessibility_snapshot` | Accessibility tree for LLM understanding |

### Console & Network (5)

| Tool | Description |
|------|-------------|
| `console_start` / `console_get` | Capture and retrieve browser console messages. Capture spans **all tabs** and follows newly opened tabs/popups (re-calling `console_start` resets cleanly — no listener stacking). |
| `network_start` / `network_get` | Capture network requests across **all tabs** (follows tab switches + popups). `network_start(capture_bodies=true)` also records request/response headers + text bodies. `network_get(filter=...)` narrows by URL substring; each row shows an `#id`. |
| `network_get_detail` | Full request + response (headers + text body) for one captured request by `#id` or `url` substring. Needs `capture_bodies=true`. Replaces the `evaluate()`+`fetch()` workaround for inspecting API payloads. |

### Compound (reduce round-trips) (4)

| Tool | Description |
|------|-------------|
| `wait_and_snapshot` | Wait for selector/text + return snapshot in one call |
| `back_and_snapshot` | Navigate back + return snapshot |
| `reload_and_snapshot` | Reload page + return snapshot |
| `click_and_snapshot` | Click + wait + return snapshot. Perfect for buttons that trigger navigation. |

### Smart Selectors (skip snapshot) (3)

| Tool | Description |
|------|-------------|
| `find_by_text` | Find element by visible text, returns ref. Skip `browser_snapshot` when you know exact text. |
| `find_by_label` | Find input by label text, returns ref. |
| `find_by_placeholder` | Find input by placeholder, returns ref. |

### Session Portability (5)

| Tool | Description |
|------|-------------|
| `cookie_export` | Export all cookies as JSON (for transfer) |
| `cookie_import` | Import cookies from JSON (restore session) |
| `storage_state_save` | Save cookies + localStorage + sessionStorage to JSON file. Reload to skip login/CF. |
| `storage_state_load` | Restore session from JSON (cookies + storage). Use `navigate_to` param to apply localStorage. |
| `auth_capture` | Convenience: save current session to `~/.camoufox-mcp/sessions/.json` |

### Humanize / Anti-Bot (4)

| Tool | Description |
|------|-------------|
| `humanize_click` | 3-step Bezier mouse approach + small jitter before click. Use for CF/DataDome pages. |
| `humanize_type` | Gaussian-distributed keystroke delays (mean 80ms, sigma 30ms). Mimics human rhythm. |
| `mouse_drift` | Random mouse movements over duration — builds mouse history before action. |
| `mouse_record` / `mouse_replay` | Capture human mouse path then replay (anti-bot gold). |

### Session Warmup & Detection (2)

| Tool | Description |
|------|-------------|
| `session_warmup` | Visit Google/Wikipedia (random) before targeting protected site. Helps IP scoring. |
| `detect_anti_bot` | Heuristic detection of CF/DataDome/Akamai/PerimeterX/Imperva/reCAPTCHA/hCaptcha. |

### Assertions (3)

| Tool | Description |
|------|-------------|
| `assert_element_visible` | PASS/FAIL — element exists and is visible |
| `assert_text_present` | PASS/FAIL — text substring on page |
| `assert_url_matches` | PASS/FAIL — URL matches pattern (substring or regex) |

### Workflow Helpers (3)

| Tool | Description |
|------|-------------|
| `click_and_wait` | Click + wait for navigation/selector atomically (fewer roundtrips) |
| `wait_for_network_idle` | Wait until no in-flight requests for N ms (better than fixed timeouts for SPAs) |
| `describe_page` | Compact LLM-friendly summary (title, h1, buttons, links, forms) — cheaper than `browser_snapshot` |

### Scraping & Extraction (4)

| Tool | Description |
|------|-------------|
| `detect_content_pattern` | Auto-detect repeated content (cards, listings) and suggest CSS selectors. **Run this before `extract_structured`.** |
| `extract_structured` | Extract data from repeated elements as clean JSON. Auto-deduplicates, filters empties, `direct_text_only` prevents field mixing. |
| `extract_table` | Extract HTML table as JSON array with auto-detected headers |
| `scrape_page` | Smart scraper: auto-extract main content (strips nav/footer), links, meta, headings. Smart truncation at paragraph boundary. |

### Debug (4)

| Tool | Description |
|------|-------------|
| `server_status` | Health check: browser status, tabs, URL

…

## Source & license

This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [RobithYusuf](https://github.com/RobithYusuf)
- **Source:** [RobithYusuf/mcp-camoufox](https://github.com/RobithYusuf/mcp-camoufox)
- **License:** MIT

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: flagged — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/mcp-robithyusuf-mcp-camoufox
- Seller: https://agentstack.voostack.com/s/robithyusuf
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
