【技术文档摘要】
该项目旨在通过模型上下文协议(MCP)和Selenium使AI代理能够执行网页使用、浏览器自动化、抓取和自动化操作。
此MCP的特殊功能是它可以处理多个代理访问多个浏览器窗口。无需启动多个Docker镜像、虚拟机或计算机来拥有多个抓取代理。并且仍然可以在所有代理之间使用一个单一的浏览器配置文件。每个代理将有自己的窗口,并且它们不会相互干扰。
这使得处理多个代理变得无缝:只需启动您想要的任意数量的代理,它就会正常工作! 使用两个Claude Code实例、一个Codex CLI实例、一个Gemini CLI实例和一个fast-agent实例——所有都在一台计算机上,所有都使用相同的浏览器配置文件,并且所有都在某种程度上并行运行。
我们的使命是让AI代理在最少的人类监督下完成任何网络任务——所有这些都基于自然语言指令。
MCP_MAX_SNAPSHOT_CHARS环境变量来管理最大页面大小。iframe_selector。为了可靠性,浏览器上下文会在每次工具调用后重置。对于iframe工作流,在每个click_element、fill_text或debug_element调用中重复iframe选择器参数。.env文件中指向Chrome Beta可执行文件,如下所述。请参阅modelcontextprotocol.io上的MCP文档。
请注意,您需要在MCP配置文件指向的Python环境中安装所有依赖项。例如,如果您指向的是python或python3可执行文件,则会指向全局Python环境。通常,最好指向虚拟环境,如:
/Users/yourname/code/mcp_browser_use/.venv/bin/python
如果您已将此存储库克隆到本地的code文件夹中,您的MCP配置文件应如下所示:
{
"mcpServers": {
"mcp_browser_use": {
"command": "/Users/janspoerer/code/mcp_browser_use/.venv/bin/python",
"args": [
"/Users/janspoerer/code/mcp_browser_use/mcp_browser_use"
]
}
}
}
并且它将位于(在macOS中):/Users/janspoerer/Library/Application Support/Claude/claude_desktop_config.json。
请参阅requirements.txt以了解您需要安装哪些依赖项。
重新启动Claude以查看JSON配置是否有效。如果出现问题,Claude将引导您查看MCP的错误日志。
如果设置成功,您将在Claude的“新建聊天”窗口右下角看到一个小锤子图标。锤子旁边将是MCP提供的函数数量。
点击锤子查看可用工具。
重要: 在项目根目录的.mcp.json文件中定义所有环境变量,而不是在.env文件中。这确保了单一事实来源且无冲突。
在.mcp.json文件的env部分添加环境变量:
{
"mcpServers": {
"mcp_browser_use": {
"type": "stdio",
"command": "/path/to/.venv/bin/python",
"args": ["-m", "mcp_browser_use"],
"env": {
"BETA_PROFILE_NAME": "SeleniumProfile",
"BETA_EXECUTABLE_PATH": "/Applications/Google Chrome Beta.app/Contents/MacOS/Google Chrome Beta",
"BETA_PROFILE_USER_DATA_DIR": "/Users/yourname/Library/Application Support/Google/Chrome Beta",
"CHROME_REMOTE_DEBUG_PORT": "9225",
"MCP_HEADLESS": "0",
"MCP_ENABLE_EXTENSIONS": "1",
"MAX_SNAPSHOT_CHARS": "1_0000"
}
}
}
}
Windows示例:
"env": {
"BETA_PROFILE_NAME": "SeleniumProfile",
"BETA_EXECUTABLE_PATH": "C:\\Program Files\\Google\\Chrome Beta\\Application\\chrome.exe",
"BETA_PROFILE_USER_DATA_DIR": "C:\\Users\\yourname\\AppData\\Local\\Google\\Chrome Beta\\User Data",
"CHROME_REMOTE_DEBUG_PORT": "9225",
"MCP_HEADLESS": "0",
"MCP_ENABLE_EXTENSIONS": "1"
}
| 变量 | 描述 | 示例 |
|---|---|---|
BETA_PROFILE_NAME | 要使用的Chrome配置文件名称 | "SeleniumProfile" |
BETA_EXECUTABLE_PATH | Chrome Beta可执行文件的路径 | 见上面的示例 |
BETA_PROFILE_USER_DATA_DIR | Chrome Beta用户数据目录 | 见上面的示例 |
CHROME_REMOTE_DEBUG_PORT | Chrome远程调试端口 | "9225" |
MCP_HEADLESS | 是否以无头模式运行(0=否,1=是) | "0" |
MCP_ENABLE_EXTENSIONS | 是否启用Chrome扩展(0=否,1=是) | "1" |
MAX_SNAPSHOT_CHARS | 最大HTML快照大小 | "10000" |
使用Chrome Beta(或Canary)可以避免与您的常规Chrome浏览器发生冲突:
"SeleniumProfile"(不是"Default")检查浏览器是否正在运行,通过在主浏览器(非自动化浏览器)中访问以下URL:
http://127.0.0.1:9223/json/version
如果浏览器正在运行,它将显示类似以下内容:
{
"Browser": "Chrome/140.0.7339.24",
"Protocol-Version": "1.3",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36",
"V8-Version": "14.0.365.3",
"WebKit-Version": "537.36 (@f8765868e23d9ee5209061fc999f6495c525cd13)",
"webSocketDebuggerUrl": "ws://127.0.0.1:9223/devtools/browser/d8f511eb-947c-4eb1-833d-917212a92394"
}
此MCP使用基于文件的锁定机制来协调多个代理访问同一浏览器配置文件。所有锁文件都存储在项目根目录下的tmp/mcp_locks/中,便于检查。
操作锁(<hash>.softlock.json 和 <hash>.softlock.mutex)
MCP_ACTION_LOCK_TTL配置)MCP_ACTION_LOCK_WAIT配置)窗口注册表(<hash>.window_registry.json)
MCP_WINDOW_REGISTRY_STALE_SECS配置)启动互斥(<hash>.startup.mutex)
文件格式: <hash>是从您的Chrome配置文件的user_data_dir和profile_name派生的SHA-256哈希,确保跨进程稳定标识。
您可以使用这些环境变量自定义锁行为:
# 锁目录(默认:<project_root>/tmp/mcp_locks/)
MCP_BROWSER_LOCK_DIR=/path/to/locks
# 操作锁TTL(秒,默认:30)
MCP_ACTION_LOCK_TTL=30
# 操作锁最大等待时间(秒,默认:60)
MCP_ACTION_LOCK_WAIT=60
# 窗口注册表过时阈值(秒,默认:300)
MCP_WINDOW_REGISTRY_STALE_SECS=300
# 文件互斥过时阈值(秒,默认:60)
MCP_FILE_MUTEX_STALE_SECS=60
当代理开始浏览器会话时,它会自动:
这确保了崩溃或终止的代理不会留下僵尸浏览器窗口。
我们不希望使用pytest-asyncio。
pip install -e ".[test]"