🦊 迷彩MCP
AI代理的反检测浏览器自动化
](https://npmjs.org/package/camoufox-mcp) ](https://npmjs.org/package/camoufox-mcp)  ](https://nodejs.org/)
用于浏览器自动化的MCP服务器 迷彩 -反检测Firefox浏览器。
安装
npx camoufox-mcpClaude桌面配置
增添 claude_desktop_config.json:
基础:
{
"mcpServers": {
"camoufox": {
"command": "npx",
"args": ["camoufox-mcp"]
}
}
}使用代理(通过env变量):
{
"mcpServers": {
"camoufox": {
"command": "npx",
"args": ["camoufox-mcp"],
"env": {
"PROXY_SERVER": "http://1.2.3.4:8080",
"PROXY_USER": "username",
"PROXY_PASS": "password"
}
}
}
}然后在 ~/.config/camoufox-mcp/settings.json:
{
"proxy": {
"enabled": true,
"server": "${PROXY_SERVER}",
"username": "${PROXY_USER}",
"password": "${PROXY_PASS}",
"geoip": true
}
}为什么选择迷彩MCP?
| 功能 | 迷彩MCP | Chrome DevTools MCP |
|---|---|---|
| 反检测 | ||
| 机器人检测旁路 | ✅ 内置 | ❌ 检测到 |
| 指纹随机化 | ✅ | ❌ |
| WebRTC泄漏保护 | ✅ | ❌ |
| 画布指纹欺骗 | ✅ | ❌ |
| 自动化 | ||
| 人性化光标移动 | ✅ 现实路径 | ❌ 瞬间跳跃 |
| 像人类一样延迟点击 | ✅ | ❌ |
| 具有GeoIP自动配置的代理 | ✅ 时区/地区 | ❌ 手册 |
| JavaScript评估 | ||
主流世界评估(__NUXT__, __NEXT_DATA__) | ✅ | ✅ |
| 隔离eval(异步/等待) | ✅ | ✅ |
| 会话管理 | ||
| 孤立的浏览器会话 | ✅ 多个上下文 | ❌ 单一上下文 |
| 预认证会话 | ✅ Cookie/本地存储注入 | ❌ |
| 会话状态导出 | ✅ 保存为JSON | ❌ |
| 特性 | ||
| Cookie弹出自动关闭 | ✅ 50+选择器 | ❌ |
| 用户操作记录 | ✅ | ❌ |
| 网络拦截 | ✅ | ✅ |
| 控制台捕获 | ✅ | ✅ |
| 性能跟踪 | ❌ | ✅ |
| 浏览器 | ||
| 引擎 | 火狐(Gecko) | Chrome(Chromium) |
| 自动安装 | ✅ ~150MB | ✅ |
工具
会话管理
会话提供独立的浏览器上下文——每个会话都有自己的Cookie、本地存储和缓存。使用会话同时运行多个经过身份验证的配置文件。
| 工具 | 说明 |
|---|---|
create_session | 创建一个新的隔离会话,可选地从JSON文件预加载cookie/localStorage |
list_sessions | 列出所有会话及其页数和元数据 |
save_session | 将会话的Cookie和localStorage导出到JSON文件 |
close_session | 关闭会话及其所有页面 |
list_context_files | 列出在设置中注册的可用上下文文件 |
页面管理
| 工具 | 说明 |
|---|---|
new_page | 在特定会话中创建新页面(可选) |
list_pages | 列出所有打开的页面及其会话ID |
select_page | 将页面设置为活动状态 |
close_page | 关闭页面 |
导航与交互
| 工具 | 说明 |
|---|---|
navigate_page | 导航到URL、后退、前进或重新加载 |
click | 按UID单击元素 |
hover | 将鼠标悬停在元素上 |
fill | 填写表单字段 |
fill_form | 一次填写多个表单字段 |
press_key | 按一个键或组合键 |
drag | 将一个元素拖动到另一个元素 |
检查
| 工具 | 说明 |
|---|---|
take_snapshot | 带有交互式元素UID的文本快照 |
take_screenshot | 页面或元素的屏幕截图 |
get_page_text | 提取文本内容 |
evaluate_mainworld | 在页面上下文中运行JS(仅同步) |
evaluate_isolated | 在隔离上下文中运行JS(异步OK) |
get_framework_state | 提取Next.js/Nuxt.js状态 |
上下文注入
| 工具 | 说明 |
|---|---|
inject_context | 将Cookie+本地存储从JSON文件注入会话 |
监控
| 工具 | 说明 |
|---|---|
start_network_capture / stop_network_capture | 捕获网络请求 |
get_network_logs / clear_network_logs | 查看/清除捕获的请求 |
intercept_network / remove_intercept | 阻止或修改请求 |
start_console_capture / stop_console_capture | 捕获控制台消息 |
get_console_logs / clear_console_logs | 查看/清除控制台消息 |
start_recording / stop_recording / get_recording_status | 记录用户交互 |
效用
| 工具 | 说明 |
|---|---|
dismiss_popups | 自动解除cookie同意弹出窗口 |
wait_for | 等待文本或选择器 |
wait_for_navigation | 等待导航完成 |
reload_settings | 从配置中重新加载设置 |
get_config_paths | 显示配置文件路径 |
init_user_config | 初始化用户配置目录 |
会话
会话允许并行运行多个经过身份验证的配置文件。每个会话都是一个独立的浏览器上下文,具有自己的Cookie和localStorage。
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使用示例
使用预加载的身份验证创建会话:
create_session随着contextPath: "github-cookies.json"--返回asessionIdnew_page随着url: "https://github.com"和那个sessionId--打开已登录的GitHub
同时运行两个帐户:
create_session随着contextPath: "account1.json"--会话Acreate_session随着contextPath: "account2.json"--会议Bnew_page在会话A中--以帐户1登录new_page在会话B中--以帐户2登录
保存会话状态以备后用:
- 在会话中手动登录
save_session随着outputPath: "my-session.json"--导出Cookie+本地存储- 下一次,
create_session随着contextPath: "my-session.json"--已恢复
上下文文件格式
上下文文件使用 剧作家的storageState格式:
{
"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" }
]
}
]
}在设置中注册上下文文件
将上下文文件路径添加到 settings.json 通过以下方式使其可被发现 list_context_files。会话已创建 懒洋洋地按要求 --在代理调用之前,不会使用内存 create_session:
{
"contextPaths": [
"/path/to/github-cookies.json",
"/path/to/linkedin-cookies.json"
]
}然后,代理人可以致电 list_context_files 看看有什么可用的,以及 create_session 与所需 contextPath 在需要时加载它。
设置
创建 ~/.config/camoufox-mcp/settings.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": []
}代理示例
HTTP/HTTPS代理:
{ "proxy": { "enabled": true, "server": "http://1.2.3.4:8080" } }SOCKS5代理:
{ "proxy": { "enabled": true, "server": "socks5://1.2.3.4:1080" } }使用身份验证(使用env变量):
{
"proxy": {
"enabled": true,
"server": "${PROXY_SERVER}",
"username": "${PROXY_USER}",
"password": "${PROXY_PASS}",
"geoip": true
}
}geoip: true 根据代理IP位置自动调整浏览器时区/区域设置。查看更多
- 迷彩 -反检测Firefox浏览器
- camofox js -JavaScript/TypeScript绑定
许可证
麻省理工学院
