Camoufox Playwright MCP
An official-parity Playwright Model Context Protocol (MCP) server supercharged with Camoufox — the stealth, anti-detect browser engine designed to bypass anti-bot systems, Cloudflare Turnstile, DataDome, and advanced browser fingerprinting out of the box.
Highlights
- 🥷 Stealth by Default: Powered by Camoufox's custom anti-detect browser engine with hardware spoofing, humanized cursor movements, and GeoIP alignment.
- 🎭 100% Official Playwright MCP Parity: Full tool parity with the official TypeScript Playwright MCP (
browser_navigate,browser_click,browser_fill,browser_snapshot,browser_take_screenshot,browser_evaluate, etc.). - 🔄 Dual Engine Flexibility: Run with stealth
camoufoxby default, or seamlessly switch to standard Playwright browsers (chromium,chrome,firefox,webkit) or custom CDP endpoints. - ⚡ Zero Install via
uvx: Run instantly in Claude Desktop, Cursor, Cline, Windsurf, or any MCP client without manual setup.
Quickstart
1. Run On-The-Fly with uvx
No prior installation needed:
# Run stealth Camoufox browser in headless mode (recommended for AI agents)
uvx camoufox-playwright-mcp --headless
# Or run with standard Chrome
uvx camoufox-playwright-mcp --browser chrome
2. Client Configurations
Claude Desktop
Add this to your claude_desktop_config.json:
{
"mcpServers": {
"camoufox": {
"command": "uvx",
"args": [
"camoufox-playwright-mcp",
"--headless"
]
}
}
}
Cursor (~/.cursor/mcp.json)
{
"mcpServers": {
"camoufox": {
"command": "uvx",
"args": ["camoufox-playwright-mcp", "--headless"]
}
}
}
Windsurf / Cline / OpenCode / Zed
{
"mcpServers": {
"browser": {
"command": "uvx",
"args": [
"camoufox-playwright-mcp",
"--headless"
]
}
}
}
Installation
You can also install camoufox-playwright-mcp into your virtual environment:
Using uv
uv add camoufox-playwright-mcp
Using pip
pip install camoufox-playwright-mcp
Installing Browser Binaries
Fetch the Camoufox browser binary:
camoufox-playwright-mcp install-browser
To install standard Playwright browsers as well:
camoufox-playwright-mcp install-browser chromium firefox webkit
# or install all
camoufox-playwright-mcp install-browser all
CLI Reference
usage: camoufox-playwright-mcp [-h] [--browser BROWSER] [--headless] [--isolated]
[--user-data-dir USER_DATA_DIR] [--proxy-server PROXY_SERVER]
[--cdp-endpoint CDP_ENDPOINT] [--port PORT] ...
Common Flags
| Option | Description |
|---|---|
--browser |
Browser to use: camoufox (default), chrome, chromium, firefox, webkit. |
--headless |
Run browser in headless mode. |
--isolated |
Create fresh, temporary browser context instead of persistent profile. |
--user-data-dir |
Custom directory path for browser profile storage. |
--proxy-server |
Proxy server URL (e.g. http://user:pass@proxy.example.com:8080). |
--proxy-bypass |
Comma-separated list of domains to bypass the proxy. |
--timeout-action |
Action timeout in milliseconds (default: 5000). |
--timeout-navigation |
Navigation timeout in milliseconds (default: 60000). |
--output-dir |
Directory for saved snapshots, screenshots, and logs. |
--output-mode |
Return artifacts inline or by file reference (file or stdout). |
--port |
Port to listen on for HTTP/SSE transport (runs stdio transport if omitted). |
Commands
camoufox-playwright-mcp install-browser: Downloads Camoufox and/or Playwright browser binaries.
Camoufox Stealth & Anti-Detect Options
When running with --browser camoufox (default), Camoufox applies advanced stealth configurations. You can provide deeper configurations via a JSON config file (--config config.json):
{
"browser": {
"provider": "camoufox",
"camoufoxOptions": {
"geoip": true,
"humanize": true,
"os": "windows",
"block_images": false
}
}
}
Environment Variables
All CLI flags can be configured via environment variables:
| Variable | Description |
|---|---|
CAMOUFOX_MCP_BROWSER |
Default browser (camoufox, chrome, chromium, etc.) |
CAMOUFOX_MCP_HEADLESS |
Set to true or 1 for headless mode |
CAMOUFOX_MCP_ISOLATED |
Set to true to use isolated contexts |
CAMOUFOX_MCP_PROXY_SERVER |
Proxy server URL |
CAMOUFOX_MCP_OUTPUT_DIR |
Output directory for artifacts |
CAMOUFOX_MCP_CONFIG |
Path to JSON/INI configuration file |
(Note: PLAYWRIGHT_MCP_* variables are also supported for backward compatibility).
Available MCP Tools
Full 1:1 match with official Playwright MCP specifications:
browser_navigate: Navigate to a specified URL.browser_click: Click on elements using locators, coordinates, or text.browser_fill: Fill input fields with anti-detection keystrokes.browser_snapshot: Capture full accessibility and semantic tree snapshots.browser_take_screenshot: Capture full-page or element screenshots.browser_evaluate: Safely evaluate JavaScript within the page context.browser_hover,browser_press_key,browser_type: Mouse & keyboard interactions.browser_tabs: Manage multiple browser tabs and windows.browser_cookies: Get, set, and clear cookies.browser_network: Manage routes and network interception.
License
Apache License 2.0. See LICENSE for details.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file camoufox_playwright_mcp-0.1.0.tar.gz.
File metadata
- Download URL: camoufox_playwright_mcp-0.1.0.tar.gz
- Upload date:
- Size: 79.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2525006fc6f54716ed258ecb34cff56574fe11444b9c1284481894d79c3fd0b8
|
|
| MD5 |
83eea4af22c98e4b779217fbfaadd1bc
|
|
| BLAKE2b-256 |
3e9fc2643123adf7db63e3353126cbd6612ef54cb48e567dbe47edf789d43dfd
|
Provenance
The following attestation bundles were made for camoufox_playwright_mcp-0.1.0.tar.gz:
Publisher:
publish.yml on chandu-cpz/camoufox-playwright-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
camoufox_playwright_mcp-0.1.0.tar.gz -
Subject digest:
2525006fc6f54716ed258ecb34cff56574fe11444b9c1284481894d79c3fd0b8 - Sigstore transparency entry: 2500601559
- Sigstore integration time:
-
Permalink:
chandu-cpz/camoufox-playwright-mcp@d66dc92bd763d9b24bb05965ec2879a856970f0e -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/chandu-cpz
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@d66dc92bd763d9b24bb05965ec2879a856970f0e -
Trigger Event:
push
-
Statement type:
File details
Details for the file camoufox_playwright_mcp-0.1.0-py3-none-any.whl.
File metadata
- Download URL: camoufox_playwright_mcp-0.1.0-py3-none-any.whl
- Upload date:
- Size: 103.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
297b5482dca833d25ac601cfd100ff0d86d15caf59886427cd3343a3f98553bb
|
|
| MD5 |
8efe8d542f18dd1a8b46b1bfd20ee12c
|
|
| BLAKE2b-256 |
2b245a13163a8a75280e1edad33f1285ac72e22772a9f7ea3485108f5287d637
|
Provenance
The following attestation bundles were made for camoufox_playwright_mcp-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on chandu-cpz/camoufox-playwright-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
camoufox_playwright_mcp-0.1.0-py3-none-any.whl -
Subject digest:
297b5482dca833d25ac601cfd100ff0d86d15caf59886427cd3343a3f98553bb - Sigstore transparency entry: 2500601568
- Sigstore integration time:
-
Permalink:
chandu-cpz/camoufox-playwright-mcp@d66dc92bd763d9b24bb05965ec2879a856970f0e -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/chandu-cpz
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@d66dc92bd763d9b24bb05965ec2879a856970f0e -
Trigger Event:
push
-
Statement type: