Back to Directory/Automation & Workflow

io.github.baixianger/camoufox-mcp

Anti-detection browser automation with Camoufox - stealth Firefox for web scraping

Automation & WorkflowTypeScriptv1.0.0
<div align="center">

🦊 Camoufox MCP

Anti-detection browser automation for AI agents

npm version npm downloads License: MIT Node.js

MCP server for browser automation using Camoufox - an anti-detection Firefox browser.

</div>

Installation

bash
npx camoufox-mcp

Claude Desktop Configuration

Add to claude_desktop_config.json:

Basic:

json
{
  "mcpServers": {
    "camoufox": {
      "command": "npx",
      "args": ["camoufox-mcp"]
    }
  }
}

With Proxy (via env vars):

json
{
  "mcpServers": {
    "camoufox": {
      "command": "npx",
      "args": ["camoufox-mcp"],
      "env": {
        "PROXY_SERVER": "http://1.2.3.4:8080",
        "PROXY_USER": "username",
        "PROXY_PASS": "password"
      }
    }
  }
}

Then in ~/.config/camoufox-mcp/settings.json:

json
{
  "proxy": {
    "enabled": true,
    "server": "${PROXY_SERVER}",
    "username": "${PROXY_USER}",
    "password": "${PROXY_PASS}",
    "geoip": true
  }
}

Why Camoufox MCP?

FeatureCamoufox MCPChrome DevTools MCP
Anti-Detection
Bot detection bypassβœ… Built-in❌ Detected
Fingerprint randomizationβœ…βŒ
WebRTC leak protectionβœ…βŒ
Canvas fingerprint spoofingβœ…βŒ
Automation
Humanized cursor movementβœ… Realistic paths❌ Instant jumps
Click with human-like delaysβœ…βŒ
Proxy with GeoIP auto-configβœ… Timezone/locale❌ Manual
JavaScript Evaluation
MainWorld eval (__NUXT__, __NEXT_DATA__)βœ…βœ…
Isolated eval (async/await)βœ…βœ…
Session Management
Isolated browser sessionsβœ… Multiple contexts❌ Single context
Pre-authenticated sessionsβœ… Cookie/localStorage injection❌
Session state exportβœ… Save to JSON❌
Features
Cookie popup auto-dismissβœ… 50+ selectors❌
User action recordingβœ…βŒ
Network interceptionβœ…βœ…
Console captureβœ…βœ…
Performance tracingβŒβœ…
Browser
EngineFirefox (Gecko)Chrome (Chromium)
Auto-installβœ… ~150MBβœ…

Tools

Session Management

Sessions provide isolated browser contexts β€” each session has its own cookies, localStorage, and cache. Use sessions to run multiple authenticated profiles simultaneously.

ToolDescription
create_sessionCreate a new isolated session, optionally pre-loading cookies/localStorage from a JSON file
list_sessionsList all sessions with their page counts and metadata
save_sessionExport a session's cookies and localStorage to a JSON file
close_sessionClose a session and all its pages
list_context_filesList available context files registered in settings

Page Management

ToolDescription
new_pageCreate a new page, optionally in a specific session
list_pagesList all open pages with their session IDs
select_pageSet a page as active
close_pageClose a page

Navigation & Interaction

ToolDescription
navigate_pageNavigate to URL, back, forward, or reload
clickClick an element by UID
hoverHover over an element
fillFill a form field
fill_formFill multiple form fields at once
press_keyPress a key or key combination
dragDrag an element to another

Inspection

ToolDescription
take_snapshotText snapshot with interactive element UIDs
take_screenshotScreenshot of page or element
get_page_textExtract text content
evaluate_mainworldRun JS in page context (sync only)
evaluate_isolatedRun JS in isolated context (async OK)
get_framework_stateExtract Next.js/Nuxt.js state

Context Injection

ToolDescription
inject_contextInject cookies + localStorage from a JSON file into a session

Monitoring

ToolDescription
start_network_capture / stop_network_captureCapture network requests
get_network_logs / clear_network_logsView/clear captured requests
intercept_network / remove_interceptBlock or modify requests
start_console_capture / stop_console_captureCapture console messages
get_console_logs / clear_console_logsView/clear console messages
start_recording / stop_recording / get_recording_statusRecord user interactions

Utility

ToolDescription
dismiss_popupsAuto-dismiss cookie consent popups
wait_forWait for text or selector
wait_for_navigationWait for navigation to complete
reload_settingsReload settings from config
get_config_pathsShow config file paths
init_user_configInitialize user config directory

Sessions

Sessions enable running multiple authenticated profiles in parallel. Each session is an isolated browser context with its own cookies and localStorage.

text
Browser (single Camoufox instance)
  β”œβ”€β”€ Session "github" (cookies from github.json)
  β”‚     β”œβ”€β”€ Page: github.com
  β”‚     └── Page: github.com/repo
  β”œβ”€β”€ Session "linkedin" (cookies from linkedin.json)
  β”‚     └── Page: linkedin.com/feed
  └── Session "default" (no pre-loaded state)
        └── Page: example.com

Usage Examples

Create a session with pre-loaded authentication:

  1. create_session with contextPath: "github-cookies.json" β€” returns a sessionId
  2. new_page with url: "https://github.com" and the sessionId β€” opens GitHub already logged in

Run two accounts simultaneously:

  1. create_session with contextPath: "account1.json" β€” session A
  2. create_session with contextPath: "account2.json" β€” session B
  3. new_page in session A β€” logged in as account 1
  4. new_page in session B β€” logged in as account 2

Save session state for later:

  1. Log in manually in a session
  2. save_session with outputPath: "my-session.json" β€” exports cookies + localStorage
  3. Next time, create_session with contextPath: "my-session.json" β€” restored

Context File Format

Context files use Playwright's storageState format:

json
{
  "cookies": [
    {
      "name": "session_id",
      "value": "abc123",
      "domain": ".example.com",
      "path": "/",
      "expires": 1735689600,
      "httpOnly": true,
      "secure": true,
      "sameSite": "Lax"
    }
  ],
  "origins": [
    {
      "origin": "https://example.com",
      "localStorage": [
        { "name": "token", "value": "xyz789" }
      ]
    }
  ]
}

Registering Context Files in Settings

Add context file paths to settings.json to make them discoverable via list_context_files. Sessions are created lazily on demand β€” no memory is used until the agent calls create_session:

json
{
  "contextPaths": [
    "/path/to/github-cookies.json",
    "/path/to/linkedin-cookies.json"
  ]
}

The agent can then call list_context_files to see what's available, and create_session with the desired contextPath to load it when needed.

Settings

Create ~/.config/camoufox-mcp/settings.json:

json
{
  "browser": {
    "headless": false,
    "viewport": [1280, 1080],
    "timeout": 30000,
    "humanize": 0.5
  },
  "proxy": {
    "enabled": true,
    "server": "http://proxy.example.com:8080",
    "username": "user",
    "password": "pass",
    "geoip": true
  },
  "contextPaths": []
}

Proxy Examples

HTTP/HTTPS Proxy:

json
{ "proxy": { "enabled": true, "server": "http://1.2.3.4:8080" } }

SOCKS5 Proxy:

json
{ "proxy": { "enabled": true, "server": "socks5://1.2.3.4:1080" } }

With Authentication (using env vars):

json
{
  "proxy": {
    "enabled": true,
    "server": "${PROXY_SERVER}",
    "username": "${PROXY_USER}",
    "password": "${PROXY_PASS}",
    "geoip": true
  }
}

geoip: true auto-adjusts browser timezone/locale based on proxy IP location.

See More

License

MIT

Learn More