Camoufox Playwright MCP
An MCP server that provides a stealth-enhanced Playwright browser automation engine with anti-detection features, enabling AI agents to navigate websites, interact with elements, and bypass anti-bot systems.
README
<div align="center">
🦊 Camoufox Playwright MCP
The Stealth, Anti-Detect Browser Automation Server for AI Agents
A Python-native port of Microsoft's official Playwright MCP server — supercharged with Camoufox's custom anti-detect browser engine.
Highlights • Quickstart • Client Setup • Why Camoufox? • Connection Modes • Configuration • Tool Reference • Divergences
</div>
⚡ Highlights
- 🥷 Stealth by Default: Uses Camoufox to mask
navigator.webdriver, spoof hardware concurrency, randomize canvas/WebGL/audio fingerprints, and bypass anti-bot shields (Cloudflare Turnstile, DataDome, Akamai, etc.). - 🎭 100% Official Tool Parity: Complete 1:1 drop-in replacement for
@playwright/mcp(browser_navigate,browser_click,browser_fill,browser_snapshot,browser_take_screenshot,browser_evaluate,browser_localstorage_*, etc.). - 🐍 Python-Native Code Generation: Emits clean Python Playwright code snippets instead of JavaScript strings:
await page.get_by_role("button", name="Submit").click() - 🔄 Dual Engine Flexibility: Run stealth
camoufoxby default, or switch seamlessly to standard Playwright engines (chromium,chrome,firefox,webkit), remote CDP endpoints, or browser extensions. - 🚀 Zero-Install with
uvx: Run on-demand in Claude Desktop, Cursor, Windsurf, Cline, OpenCode, or any MCP client without manual virtualenv management.
⚔️ Why Camoufox MCP vs Standard Playwright MCP?
When AI agents browse the web using standard automation servers, they are immediately flagged and blocked by Cloudflare Turnstile, DataDome, and anti-bot systems.
| Feature / Metric | Camoufox MCP (camoufox-playwright-mcp) |
Standard Playwright MCP (@playwright/mcp) |
|---|---|---|
| Default Engine | Camoufox Anti-Detect Firefox | Standard Chromium / Firefox |
navigator.webdriver |
false 🛡️ (Masked) |
true 🚨 (Detected) |
Bot Detection (bot.sannysoft.com) |
PASSED ✅ |
FAILED ❌ |
| Generated Code Snippets | Python Playwright (await page.click(...)) |
JavaScript Playwright |
| Unsafe Code Execution | Python Playwright Async | JavaScript |
| Hardware Fingerprinting | Spoofed / Humanized | Raw Host Leak |
| OS / Platform Spoofing | Configurable (Windows / macOS / Linux) | Host Environment |
| Tool Surface | Full Official Specification | Full Official Specification |
| Direct Execution | uvx camoufox-playwright-mcp |
npx @playwright/mcp |
🚀 Quickstart
Run On-Demand with uvx
No installation required:
# Run stealth Camoufox browser in headless mode (recommended for AI agents)
uvx camoufox-playwright-mcp --headless
# Run with visible browser window (headed mode)
uvx camoufox-playwright-mcp
# Switch to standard Chrome / Chromium
uvx camoufox-playwright-mcp --browser chrome --headless
# Enable storage & developer capabilities
uvx camoufox-playwright-mcp --headless --caps=storage,devtools,vision
💻 MCP Client Configuration
1. Claude Desktop
Add this to your claude_desktop_config.json:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"camoufox": {
"command": "uvx",
"args": [
"camoufox-playwright-mcp",
"--headless"
]
}
}
}
2. Cursor (~/.cursor/mcp.json)
Add to your Cursor MCP settings (Cursor Settings > MCP > Add New MCP Server):
{
"mcpServers": {
"camoufox": {
"command": "uvx",
"args": [
"camoufox-playwright-mcp",
"--headless"
]
}
}
}
3. Cline / Roo Code / Windsurf / Zed
{
"mcpServers": {
"browser": {
"command": "uvx",
"args": [
"camoufox-playwright-mcp",
"--headless"
]
}
}
}
4. OpenCode (opencode.json)
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"camoufox": {
"type": "local",
"command": ["uvx", "camoufox-playwright-mcp", "--headless"],
"enabled": true
}
}
}
🌐 Transports (stdio & Streamable HTTP)
By default, the server uses stdio transport.
Passing --port starts a Streamable HTTP server listening at /mcp:
uvx camoufox-playwright-mcp --headless --host 127.0.0.1 --port 8931
Client configuration for HTTP transport:
{
"mcpServers": {
"camoufox": {
"url": "http://127.0.0.1:8931/mcp"
}
}
}
🔌 Browser Modes & Connections
1. Persistent Profiles (Default)
By default, the server launches a persistent browser context using an auto-created profile under the user cache directory (~/.cache/camoufox-playwright-mcp/), preserving session state, logins, and cookies across runs:
# Explicit persistent profile directory
uvx camoufox-playwright-mcp --user-data-dir ~/.config/my-browser-profile
2. Isolated Ephemeral Sessions
Use --isolated to run with a temporary, in-memory context that leaves no trace on disk:
uvx camoufox-playwright-mcp --isolated --headless
3. Connect to Existing Browser over CDP
Connect to an existing Chromium / Chrome instance started with --remote-debugging-port=9222:
uvx camoufox-playwright-mcp --cdp-endpoint http://localhost:9222
4. Connect to Bound Playwright Endpoint
Connect to a remote Playwright browser server:
uvx camoufox-playwright-mcp --endpoint ws://localhost:3000
5. Playwright Browser Extension Relay
Attach directly to your existing Chrome or Edge browser tabs via the Playwright Browser Extension:
uvx --from 'camoufox-playwright-mcp[extension]' camoufox-playwright-mcp --extension
🥷 Stealth & Anti-Detect Configuration
When running with --browser camoufox (default), Camoufox applies advanced stealth configurations. You can customize anti-detect parameters via a JSON configuration file (--config config.json):
{
"browser": {
"provider": "camoufox",
"camoufoxOptions": {
"geoip": true,
"humanize": true,
"os": "windows",
"block_images": false,
"fonts": ["Arial", "Calibri", "Times New Roman"]
}
}
}
Key Camoufox Options
| Option | Type | Description |
|---|---|---|
geoip |
bool |
Automatically match timezone, locale, and geolocation to your IP or proxy. |
humanize |
bool |
Add natural, human-like mouse movements and keyboard typing delays. |
os |
str |
Target OS to emulate ("windows", "macos", "linux"). |
block_images |
bool |
Block images to optimize network bandwidth and speed up scraping. |
webrtc_ip |
str |
Spoof WebRTC local IP address to prevent real IP leaks. |
⚙️ Configuration (JSON & INI)
Configuration is merged with the following precedence (highest priority last):
- Built-in defaults (
browser: camoufox,action timeout: 5000ms,output: file). - JSON or INI configuration file (via
--configorCAMOUFOX_MCP_CONFIG). - Environment variables (
CAMOUFOX_MCP_*orPLAYWRIGHT_MCP_*). - Explicit CLI arguments.
INI Configuration Example (camoufox.ini)
capabilities = storage,devtools,vision
console.level = info
timeouts.action = 8000
timeouts.navigation = 45000
browser.contextOptions.viewport = 1280x720
Load with:
uvx camoufox-playwright-mcp --config camoufox.ini
🌐 Environment Variables
All CLI flags can be set via environment variables:
| Variable | Description |
|---|---|
CAMOUFOX_MCP_BROWSER |
Default browser (camoufox, chrome, chromium, firefox, webkit) |
CAMOUFOX_MCP_HEADLESS |
Set to true or 1 for headless mode |
CAMOUFOX_MCP_ISOLATED |
Set to true to use ephemeral isolated contexts |
CAMOUFOX_MCP_PROXY_SERVER |
Proxy server URL |
CAMOUFOX_MCP_CAPS |
Comma-separated list of capabilities (storage, devtools, vision, pdf) |
CAMOUFOX_MCP_OUTPUT_DIR |
Output directory for artifacts (screenshots, downloads) |
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:
Navigation & Interaction
browser_navigate: Navigate to any URL with automatic wait-for-load.browser_click: Click elements using locators, coordinates, or semantic text.browser_fill: Fill input fields with anti-detection typing simulation.browser_hover,browser_type,browser_press_key: Natural mouse and keyboard interactions.browser_file_upload: Upload files to file input elements.browser_drag,browser_drop: Perform drag-and-drop operations.
Inspection & Output
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_console_messages: Retrieve console logs and error streams.
Storage & State (Enable with --caps storage)
browser_localstorage_list,browser_localstorage_get,browser_localstorage_set,browser_localstorage_delete,browser_localstorage_clearbrowser_sessionstorage_list,browser_sessionstorage_get,browser_sessionstorage_set,browser_sessionstorage_delete,browser_sessionstorage_clearbrowser_cookies: Get, set, and clear cookies.browser_storage_state,browser_set_storage_state: Save and restore full storage state files.
Tabs & Network
browser_tabs: Manage multiple tabs (list, switch, create, close).browser_network: Manage routing and network interception.browser_handle_dialog: Accept or dismiss JavaScript alerts, confirms, and prompts.
🔬 Intentional Python Divergences & Limitations
This server is designed to follow the official Playwright MCP public contract while providing a Python-native experience:
- Python Code Generation: Upstream
@playwright/mcpgenerates JavaScript snippets; this server generates native Python Playwright snippets (await page.get_by_role(...).click()). browser_run_code_unsafe: Executes asynchronous Python Playwright code directly against the activepageinstance.browser.initPage: Accepts Python-native modules defininginit_page(page)ordefault(page).browser_annotate: Intentionally omitted (upstream relies on a Node.js dashboard daemon).browser_pdf_save: PDF generation is supported when running Headless Chromium engines (--browser chromium --headless).
🧪 Testing & Conformance
Run local test and quality gates:
# Lint checks
uv run ruff check .
# Type checking (strict mypy across all source and test files)
uv run mypy src tests
# Unit and integration test suite
uv run pytest
Run upstream TypeScript Playwright MCP conformance suite:
cd tests/conformance/upstream
npm ci
npx playwright test --workers=10
📄 License
Apache License 2.0. See LICENSE for details.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。