
Security News
Attackers Are Hunting High-Impact Node.js Maintainers in a Coordinated Social Engineering Campaign
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.
camofox-mcp
Advanced tools
Anti-detection browser MCP server for AI agents — navigate, interact, and automate the web without getting blocked
The anti-detection browser MCP server for AI agents. Navigate, interact, and automate the web without getting blocked.
New to CamoFox? Skip the docs — paste this prompt into your AI agent and it’ll verify your setup end-to-end.
How it works (TL;DR)
Your AI Agent ──(MCP)──> camofox-mcp ──(REST)──> camofox-browser ──> Camoufox (anti-detection Firefox)
CamoFox has 2 components — you need both running:
camofox-browser is the headless browser server (anti-detection)camofox-mcp is the MCP bridge your AI agent connects toAI agents using Playwright get blocked constantly. CAPTCHAs, fingerprint detection, IP bans — the web fights back against automation.
CamoFox MCP wraps the CamoFox Browser Server as an MCP server, giving your AI agent:
offset with truncation metadata to continue reading contentserver_status includes consecutiveFailures and activeOps| Feature | CamoFox MCP | Playwright MCP |
|---|---|---|
| Anti-detection fingerprinting | ✅ | ❌ |
| Passes bot detection tests | ✅ | ❌ |
| Search engine macros (14 engines) | ✅ | ❌ |
| Accessibility snapshots | ✅ | ✅ |
| Cookie import/export | ✅ | Limited |
| Headless support | ✅ | ✅ |
| Setup complexity | Medium | Easy |
| Token efficiency | High | High |
| Feature | CamoFox MCP | whit3rabbit/camoufox-mcp | baixianger/camoufox-mcp |
|---|---|---|---|
| Tools | 43 | 1 | 33 |
| Architecture | REST API client | Direct browser | Direct browser |
| Session persistence | ✅ | ❌ (destroyed per request) | ✅ |
| Token efficiency | High (snapshots) | Low (raw HTML) | High (snapshots) |
| Search macros | ✅ (14 engines) | ❌ | ❌ |
| CSS selector fallback | ✅ | ❌ | ❌ |
| Active maintenance | ✅ | ❌ (stale 8mo) | ✅ |
| Press key support | ✅ | ❌ | ✅ |
npx setupnpx, or build from source)Pick ONE option below.
1) Start CamoFox Browser
docker run -d -p 9377:9377 --name camofox-browser ghcr.io/redf0x1/camofox-browser:latest
2) Verify it’s running
curl http://localhost:9377/health
3) Add MCP config to your editor (see configs below)
4) Paste the verification prompt into your AI agent (see below)
1) Start CamoFox Browser (keep this terminal open)
npx camofox-browser@latest
2) In another terminal, verify:
curl http://localhost:9377/health
3) Add MCP config to your editor (see configs below)
4) Paste the verification prompt into your AI agent
1) Clone and start CamoFox Browser
git clone https://github.com/redf0x1/camofox-browser.git
cd camofox-browser && npm install && npm run build && npm start
2) Clone and build CamoFox MCP
git clone https://github.com/redf0x1/camofox-mcp.git
cd camofox-mcp && npm install && npm run build
3) Add MCP config (see configs below — use node path instead of npx)
4) Paste the verification prompt
.vscode/mcp.json (in your workspace root){
"servers": {
"camofox": {
"type": "stdio",
"command": "npx",
"args": ["-y", "camofox-mcp@latest"],
"env": {
"CAMOFOX_URL": "http://localhost:9377"
}
}
}
}
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.json~/.config/Claude/claude_desktop_config.json{
"mcpServers": {
"camofox": {
"command": "npx",
"args": ["-y", "camofox-mcp@latest"],
"env": {
"CAMOFOX_URL": "http://localhost:9377"
}
}
}
}
Note: Claude Desktop uses "mcpServers" not "servers".
~/.cursor/mcp.json{
"mcpServers": {
"camofox": {
"command": "npx",
"args": ["-y", "camofox-mcp@latest"],
"env": {
"CAMOFOX_URL": "http://localhost:9377"
}
}
}
}
node instead of npx){
"servers": {
"camofox": {
"type": "stdio",
"command": "node",
"args": ["/absolute/path/to/camofox-mcp/dist/index.js"],
"env": {
"CAMOFOX_URL": "http://localhost:9377"
}
}
}
}
Note: This example is for VS Code. For Claude Desktop or Cursor, use "mcpServers" instead of "servers".
After configuring your MCP client, restart your editor. Then paste this prompt into your AI agent:
Verify my CamoFox MCP setup. Run these checks and report results:
1) Call `server_status` — is the browser server connected?
2) If connected: `create_tab` with url `https://example.com`
3) `navigate_and_snapshot` on that tab (wait for text: "Example Domain")
4) `list_profiles` to confirm profile storage is accessible
5) `close_tab` for the test tab
If any step fails, diagnose the issue and suggest a fix.
Report: ✅ pass or ❌ fail for each step, plus overall status.
Prerequisites: You must configure your MCP client first (Step 2 above). The AI agent can do everything else.
Manual verification (optional):
curl http://localhost:9377/health
# Expected: {"ok":true,"browserConnected":true}
# Standalone (connect to an existing CamoFox browser server running on the host)
docker run -i --rm -e CAMOFOX_URL=http://host.docker.internal:9377 ghcr.io/redf0x1/camofox-mcp:latest
# Browser only (recommended): starts the CamoFox browser server in the background
docker compose up -d
# MCP (stdio): start the browser with compose, then launch the MCP container on-demand
# Option A: plain docker (attach stdin; uses the compose network)
docker run -i --rm --network=camofox-mcp_default -e CAMOFOX_URL=http://camofox-browser:9377 ghcr.io/redf0x1/camofox-mcp:latest
# Option B: compose run (no TTY; attaches stdin/stdout for JSON-RPC)
docker compose run --rm -T camofox-mcp
Note: docker compose up -d detaches and does not provide stdin, so it can only be used to run the browser service.
Your MCP client should launch the MCP container separately (using docker run -i ... or docker compose run -T ...).
{
"servers": {
"camofox": {
"type": "stdio",
"command": "docker",
"args": ["run", "-i", "--rm", "-e", "CAMOFOX_URL=http://host.docker.internal:9377", "ghcr.io/redf0x1/camofox-mcp:latest"]
}
}
}
{
"mcpServers": {
"camofox": {
"command": "docker",
"args": ["run", "-i", "--rm", "-e", "CAMOFOX_URL=http://host.docker.internal:9377", "ghcr.io/redf0x1/camofox-mcp:latest"],
"type": "stdio"
}
}
}
IMPORTANT: Do NOT use -t flag — TTY corrupts the JSON-RPC stdio stream.
CamoFox MCP now supports Streamable HTTP transport for integration with OpenClaw and other HTTP-based MCP clients.
# Start in HTTP mode
CAMOFOX_TRANSPORT=http npx camofox-mcp
# Or with CLI flags
npx camofox-mcp --transport http --http-port 3000
# With custom settings
CAMOFOX_TRANSPORT=http CAMOFOX_HTTP_PORT=8080 CAMOFOX_HTTP_HOST=0.0.0.0 npx camofox-mcp
| Variable | CLI Flag | Default | Description |
|---|---|---|---|
CAMOFOX_TRANSPORT | --transport | stdio | Transport mode: stdio or http |
CAMOFOX_HTTP_PORT | --http-port | 3000 | HTTP server port |
CAMOFOX_HTTP_HOST | --http-host | 127.0.0.1 | HTTP server bind address |
CAMOFOX_HTTP_RATE_LIMIT | --http-rate-limit | 60 | Max requests per minute |
127.0.0.1 (localhost only)--http-host 0.0.0.0 (ensure proper firewall/auth)CAMOFOX_API_KEY for CamoFox Browser authenticationCamoFox MCP integrates with OpenClaw via HTTP transport, providing anti-detection browser automation as an MCP tool server.
Add to your OpenClaw mcpServers configuration:
{
"mcpServers": {
"camofox": {
"url": "http://localhost:3000/mcp"
}
}
}
Then start CamoFox MCP in HTTP mode:
CAMOFOX_TRANSPORT=http CAMOFOX_API_KEY=your-key npx camofox-mcp
npx @filiksyos/mcptoskill http://localhost:3000/mcp
Use http://localhost:3000/mcp as a direct MCP server URL in OpenClaw settings.
OpenClaw's built-in browser uses standard headless Chrome which is easily detected by anti-bot systems. CamoFox provides:
| Tool | Description |
|---|---|
create_tab | Create a new tab with anti-detection fingerprinting |
close_tab | Close a tab and release resources |
list_tabs | List all open tabs with URLs and titles |
| Tool | Description |
|---|---|
list_presets | List all available geo presets supported by the connected CamoFox browser server |
create_tab supports optional regional configuration via a named preset, plus per-field overrides:
preset — preset name (e.g., japan, vietnam, uk)locale — BCP-47 locale (e.g., ja-JP)timezoneId — IANA timezone (e.g., Asia/Tokyo)geolocation — { latitude, longitude }viewport — { width, height }Resolution order: preset defaults → individual field overrides → server defaults.
Built-in presets (when supported by your camofox-browser server):
| Preset | Locale | Timezone | Location |
|---|---|---|---|
us-east | en-US | America/New_York | New York |
us-west | en-US | America/Los_Angeles | Los Angeles |
japan | ja-JP | Asia/Tokyo | Tokyo |
uk | en-GB | Europe/London | London |
germany | de-DE | Europe/Berlin | Berlin |
vietnam | vi-VN | Asia/Ho_Chi_Minh | Ho Chi Minh City |
singapore | en-SG | Asia/Singapore | Singapore |
australia | en-AU | Australia/Sydney | Sydney |
Example:
{
"userId": "agent1",
"url": "https://example.com",
"preset": "japan",
"viewport": { "width": 1920, "height": 1080 }
}
Tip: call list_presets to discover what presets the connected server supports (including any custom preset file configured server-side).
| Tool | Description |
|---|---|
navigate | Navigate to a URL, waits for page load |
go_back | Browser back button |
go_forward | Browser forward button |
refresh | Reload current page |
| Tool | Description |
|---|---|
click | Click element by ref (from snapshot) or CSS selector |
type_text | Type text into input fields by ref or CSS selector. Supports unlimited text length; for text >= 400 chars, automatically uses JavaScript injection and requires selector instead of ref. If the JS fallback is auth-restricted, set CAMOFOX_API_KEY |
camofox_press_key | Press keyboard keys (Enter, Tab, Escape, etc.) |
scroll | Scroll page up or down by pixel amount |
camofox_scroll_element | Scroll inside a container element (modal, sidebar, scrollable div) |
camofox_hover | Hover over an element to trigger tooltips, dropdowns, or hover states |
camofox_wait_for | Wait for page readiness after navigation or dynamic updates |
camofox_evaluate_js | Execute JavaScript in page context (may require API key) |
| Tool | Description |
|---|---|
fill_form | Fill multiple form fields in one call, with optional submit click |
type_and_submit | Type into a field and press a key (default: Enter) |
navigate_and_snapshot | Navigate to a URL, wait for readiness, and return a snapshot |
scroll_and_snapshot | Scroll then capture a fresh snapshot |
camofox_scroll_element_and_snapshot | Scroll inside a container element, then take a snapshot |
batch_click | Click multiple elements sequentially with per-click results |
| Tool | Description |
|---|---|
snapshot | Get accessibility tree — PRIMARY way to read pages. Token-efficient, supports offset pagination for large pages |
screenshot | Take visual screenshot as base64 PNG |
get_links | Get all hyperlinks with URLs and text |
youtube_transcript | Extract transcript from a YouTube video with language selection |
camofox_get_page_html | Retrieve the live rendered DOM HTML via JavaScript. Useful when snapshot refs miss dynamically rendered SPA/custom-component content. Requires CAMOFOX_API_KEY |
camofox_wait_for_text | Wait for specific text to appear on the page |
camofox_wait_for_selector | Poll until a CSS selector matches an element, with configurable timeout. Useful for SPA hydration and async content loading. Requires CAMOFOX_API_KEY |
| Tool | Description |
|---|---|
web_search | Search via 14 engines: Google, YouTube, Amazon, Bing, DuckDuckGo, Reddit, GitHub, StackOverflow, Wikipedia, Twitter, LinkedIn, Facebook, Instagram, TikTok |
| Tool | Description |
|---|---|
import_cookies | Import cookies for authenticated sessions |
get_stats | Get session statistics and performance metrics |
camofox_close_session | Close all browser tabs for a user session |
toggle_display | Toggle browser display mode between headed/headless/virtual (restarts browser context; tabs invalidated, cookies/auth persist) |
| Tool | Description |
|---|---|
save_profile | Save cookies from an active tab to a named on-disk profile |
load_profile | Load a saved profile's cookies into an active tab (restores login sessions) |
list_profiles | List saved profiles with metadata (cookie count, save date, description) |
delete_profile | Delete a saved profile from disk |
| Tool | Description |
|---|---|
server_status | Check CamoFox server health and connection |
Session Profiles let you persist authenticated browser state across MCP restarts by saving/loading cookies to/from disk.
save_profile — export cookies from an active tab and save them under a profile nameload_profile — load a saved profile into an active tab (imports cookies)list_profiles — list all saved profiles and metadatadelete_profile — delete a saved profile permanentlyCAMOFOX_PROFILES_DIR — directory used to store profiles (default: ~/.camofox-mcp/profiles/)CAMOFOX_AUTO_SAVE — enable auto-save/auto-load of an "auto profile" (default: true). Set to false to disable.By default, CamoFox MCP will persist sessions automatically:
close_tab and camofox_close_session, cookies are exported and saved to _auto_{userId} (best-effort; 5-second timeout).create_tab, if _auto_{userId} exists, it is loaded automatically (best-effort; 5-second timeout).Note: auto-load imports cookies, which may require CAMOFOX_API_KEY if the CamoFox browser server enforces authentication. For local setups, auto-load works without a key.
create_tabsave_profile (from the logged-in tab)create_tabload_profilenavigate — you should already be authenticatedMount a volume so profiles survive container restarts:
docker run -i --rm \
-e CAMOFOX_URL=http://host.docker.internal:9377 \
-v "$HOME/.camofox-mcp/profiles:/root/.camofox-mcp/profiles" \
ghcr.io/redf0x1/camofox-mcp:latest
The API key is optional. All 43 tools work without a key when the CamoFox browser server doesn't enforce authentication (the default for local setups).
If your CamoFox browser server has authentication enabled, these tools need a matching key:
import_cookiescamofox_evaluate_jsload_profile (imports cookies)create_tab)Without a matching key, these tools return a clear "API key required" error with setup instructions.
The key is a shared secret between both servers and must match exactly:
AI Agent -> (MCP tool call) -> CamoFox MCP (sends CAMOFOX_API_KEY) -> (HTTP) -> CamoFox Browser Server (validates key)
1) Start CamoFox Browser Server with a key (exact flags may vary by camofox-browser version):
export CAMOFOX_API_KEY="your_shared_secret"
./camofox-browser
Or (if supported by your camofox-browser build):
./camofox-browser --api-key "your_shared_secret"
2) Configure your MCP client to pass the same key:
{
"servers": {
"camofox": {
"type": "stdio",
"command": "npx",
"args": ["-y", "camofox-mcp@latest"],
"env": {
"CAMOFOX_URL": "http://localhost:9377",
"CAMOFOX_API_KEY": "your_shared_secret"
}
}
}
}
Note: This example is for VS Code. For Claude Desktop or Cursor, use "mcpServers" instead of "servers".
All tools work when the CamoFox browser server doesn't require authentication (default for local/Docker setups).
If the browser server does enforce auth and no key is set, cookie import, profile load, and JS evaluation return a clear error: "CamoFox server requires authentication. Set CAMOFOX_API_KEY environment variable."
⚠️ Key mismatch between MCP and browser server → affected tools return "Forbidden". Ensure the same key is set on both servers.
| Variable | Default | Description |
|---|---|---|
CAMOFOX_URL | http://localhost:9377 | CamoFox server URL |
CAMOFOX_TIMEOUT | 30000 | Request timeout in ms |
CAMOFOX_API_KEY | — | Shared secret for authenticated operations. Only needed if the CamoFox browser server enforces auth |
CAMOFOX_PROFILES_DIR | ~/.camofox-mcp/profiles | Directory to store persistent session profiles |
CAMOFOX_AUTO_SAVE | true | Auto-save on close + auto-load on create via _auto_{userId} |
CAMOFOX_DEFAULT_USER_ID | default | Default userId for new tabs when none specified |
CAMOFOX_TAB_TTL_MS | 1800000 | Tab TTL in milliseconds (30min). Set to 0 to disable auto-eviction |
CAMOFOX_MAX_TABS | 100 | Maximum tracked tabs |
CAMOFOX_VISITED_URLS_LIMIT | 50 | Max URLs to keep in tab history |
CAMOFOX_SWEEP_INTERVAL_MS | 60000 | Sweep interval in milliseconds (1min) |
AI Agent (Claude, GPT, etc.)
│
│ MCP Protocol (stdio)
▼
┌─────────────────┐
│ CamoFox MCP │ ← This package
│ (TypeScript) │
└────────┬────────┘
│
│ REST API (HTTP)
▼
┌─────────────────┐
│ CamoFox Server │ ← Anti-detection browser
│ (Port 9377) │
└────────┬────────┘
│
│ Browser Engine
▼
┌─────────────────┐
│ Camoufox │ ← Firefox-based, fingerprint spoofing
│ (Firefox) │
└─────────────────┘
create_tab, navigate, snapshot)CamoFox (via Camoufox) provides:
| Project | Description |
|---|---|
| CamoFox Browser Server | Anti-detection browser server (required) |
| Camoufox | Firefox fork with C++ fingerprint spoofing |
Quick troubleshoot (paste into your AI agent):
Something isn't working with my CamoFox setup. Please diagnose:
1) Call `server_status` — check browser server connection
2) If connected, try `create_tab` and navigate to any URL
3) If that works, try `import_cookies` with a simple test cookie
4) Report what's working and what's failing
5) Suggest specific fixes for any issues found
server_status fails) -> CamoFox Browser Server is not running or CAMOFOX_URL is wrong. Verify with:
curl http://localhost:9377/health
import_cookies / profile load / camofox_evaluate_js -> API key mismatch. Ensure the same CAMOFOX_API_KEY is set on both servers.CAMOFOX_API_KEY on both servers (see API Key Setup).CAMOFOX_API_KEY if the browser server enforces auth. Also confirm CAMOFOX_AUTO_SAVE is not set to false.server_status, then try the Quick Start smoke test.Contributions are welcome! Please open an issue or submit a PR.
CamoFox MCP forwards URLs to the CamoFox Browser Server for navigation. This is core functionality — the browser visits whatever URL you provide.
In trusted environments (local development, single-user): No special precautions needed.
In shared/cloud environments: Be aware that the browser can access any URL reachable from its host, including internal network services. Consider:
When CAMOFOX_API_KEY is set, all sensitive operations (cookie import/export, JavaScript evaluation) require authentication. Always set an API key in production environments.
Session profiles are stored locally at ~/.camofox-mcp/profiles/ with restricted file permissions (0o600). Profiles contain cookies which may include authentication tokens — treat them as sensitive data.
FAQs
Anti-detection browser MCP server for AI agents — navigate, interact, and automate the web without getting blocked
We found that camofox-mcp demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.