Puppeter Swarm MCP
用于浏览器自动化的MCP服务器 选项卡池 支持使用Puppeteer。
特性
- 显式浏览器控件:通过按需启动和关闭浏览器
launch/close工具 - 选项卡池:同时管理多个浏览器选项卡
- 自动释放:空闲超时后自动释放标签页(默认值:5分钟)
- 自动恢复:自动恢复崩溃的选项卡
- 可配置的:通过CLI参数设置选项卡计数和无头模式
安装
选项1:从npm安装
npm install -g puppeteer-swarm-mcp或者直接使用npx运行:
npx puppeteer-swarm-mcp选项2:从源代码安装
git clone https://github.com/greatSumini/puppeteer-swarm-mcp.git
cd puppeteer-swarm-mcp
npm install
npm run build用法
# Default: 5 tabs, headless=false
puppeteer-swarm-mcp
# Custom tab count
puppeteer-swarm-mcp --tabs=10
# Headless mode
puppeteer-swarm-mcp --headless
# Combined options
puppeteer-swarm-mcp --tabs=10 --headless环境变量
TAB_COUNT=10 HEADLESS=true puppeteer-swarm-mcpMCP客户端集成
Puppeter Swarm MCP可以与支持模型上下文协议(MCP)的各种AI编码助手和IDE集成。
需求
- Node.js>=v18.0.0
- 兼容MCP的客户端(Claude Code、Cursor、VS Code、Windsurf等)
Install in Claude Code
运行此命令:
claude mcp add puppeteer-swarm -- npx -y puppeteer-swarm-mcp --tabs=5 --headless或者使用自定义选项:
claude mcp add puppeteer-swarm -- npx -y puppeteer-swarm-mcp --tabs=10Install in Cursor
首选 Settings -> Cursor Settings -> MCP -> Add new global MCP server
将以下配置添加到您的 ~/.cursor/mcp.json 文件:
{
"mcpServers": {
"puppeteer-swarm": {
"command": "npx",
"args": ["-y", "puppeteer-swarm-mcp", "--tabs=5", "--headless"]
}
}
}Install in Claude Desktop
将以下内容添加到您的Claude Desktop配置文件中:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - 窗户:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"puppeteer-swarm": {
"command": "npx",
"args": ["-y", "puppeteer-swarm-mcp", "--tabs=5", "--headless"]
}
}
}Install in VS Code
将此添加到您的VS Code MCP配置文件中。看 VS代码MCP文档 了解更多信息。
"mcp": {
"servers": {
"puppeteer-swarm": {
"type": "stdio",
"command": "npx",
"args": ["-y", "puppeteer-swarm-mcp", "--tabs=5", "--headless"]
}
}
}Install in Windsurf
将此添加到您的Windsurf MCP配置文件中:
{
"mcpServers": {
"puppeteer-swarm": {
"command": "npx",
"args": ["-y", "puppeteer-swarm-mcp", "--tabs=5", "--headless"]
}
}
}Install in Cline
- 打开 克莱恩
- 点击汉堡菜单图标(☰)进入 MCP服务器 章节
- 选择 远程服务器 标签
- 点击 编辑配置 按钮
- 添加木偶师群
mcpServers:
{
"mcpServers": {
"puppeteer-swarm": {
"command": "npx",
"args": ["-y", "puppeteer-swarm-mcp", "--tabs=5", "--headless"]
}
}
}Install in Zed
将此添加到您的Zed settings.json:
{
"context_servers": {
"puppeteer-swarm": {
"source": "custom",
"command": "npx",
"args": ["-y", "puppeteer-swarm-mcp", "--tabs=5", "--headless"]
}
}
}可用工具
发射
初始化浏览器和选项卡池。 必须在使用任何其他浏览器工具之前调用。
参数:无
退货:
{
"message": "브라우저가 성공적으로 시작되었습니다.",
"config": {
"tabCount": 5,
"headless": false,
"idleTimeout": 300000
}
}______________________________________________________________________
关闭
关闭浏览器和所有选项卡。
参数:无
退货:
{
"message": "브라우저가 종료되었습니다."
}______________________________________________________________________
get_tool_status
获取选项卡池的当前状态。之前可以打电话 launch 检查初始化状态。
参数:无
退货 (发射后):
{
"initialized": true,
"total": 5,
"idle": 3,
"busy": 2
}退货 (发射前):
{
"initialized": false,
"message": "브라우저가 초기화되지 않았습니다. 먼저 'launch' 도구를 호출하세요."
}______________________________________________________________________
导航
分配一个空闲选项卡并导航到URL。
参数:
| 名称 | 类型 | 必填 | 描述 |
|---|---|---|---|
url | string | 是 | 要导航到的URL |
waitUntil | string | 否 | 等待条件(load, domcontentloaded, networkidle0, networkidle2) |
退货:
{
"tabId": "tab-1",
"url": "https://example.com",
"title": "Example Domain"
}______________________________________________________________________
get_content
从页面中提取HTML或文本内容。
参数:
| 名称 | 类型 | 必填 | 描述 |
|---|---|---|---|
tabId | string | 是 | 目标选项卡ID |
type | string | 否 | 提取格式(html, text).违约: text |
退货:
{
"content": "..."
}______________________________________________________________________
截图
捕获页面截图。
参数:
| 名称 | 类型 | 必填 | 描述 |
|---|---|---|---|
tabId | string | 是 | 目标选项卡ID |
fullPage | boolean | 否 | 捕获整页。违约: false |
退货:图像内容(base64 PNG)
______________________________________________________________________
点击
通过CSS选择器单击元素。
参数:
| 名称 | 类型 | 必填 | 描述 |
|---|---|---|---|
tabId | string | 是 | 目标选项卡ID |
selector | string | 是 | CSS选择器 |
退货:
{
"success": true
}______________________________________________________________________
类型
在输入框中键入文本。
参数:
| 名称 | 类型 | 必填 | 描述 |
|---|---|---|---|
tabId | string | 是 | 目标选项卡ID |
selector | string | 是 | CSS选择器 |
text | string | 是 | 要键入的文本 |
退货:
{
"success": true
}______________________________________________________________________
评估
在页面上下文中执行JavaScript。
参数:
| 名称 | 类型 | 必填 | 描述 |
|---|---|---|---|
tabId | string | 是 | 目标选项卡ID |
script | string | 是 | 要执行的JavaScript代码 |
退货:
{
"result": "..."
}______________________________________________________________________
wait_for_selector
等待元素出现在DOM中。
参数:
| 名称 | 类型 | 必填 | 描述 |
|---|---|---|---|
tabId | string | 是 | 目标选项卡ID |
selector | string | 是 | CSS选择器 |
timeout | number | No | 超时(毫秒)。默认值: 30000 |
退货:
{
"success": true
}______________________________________________________________________
release_tab
释放一个标签回到空闲状态。
参数:
| 名称 | 类型 | 必填 | 描述 |
|---|---|---|---|
tabId | string | 是 | 要释放的选项卡ID |
退货:
{
"success": true
}工作流示例
1. launch()
-> Initialize browser and tab pool
2. navigate({ url: "https://example.com" })
-> Returns { tabId: "tab-1", ... }
3. get_content({ tabId: "tab-1", type: "text" })
-> Returns page content
4. click({ tabId: "tab-1", selector: "button.submit" })
-> Click a button
5. release_tab({ tabId: "tab-1" })
-> Release the tab for reuse
6. close()
-> Close browser when done (optional)备注:浏览器不会自动启动。你必须打电话 launch 在使用任何浏览器工具之前。日志记录
日志存储在 logs/ 目录:
- 文件模式:
mcp-puppeteer-YYYY-MM-DD.log - 每日轮换,每个文件最大20MB
- 自动压缩功能可保留14天
许可证
MIT许可证-请参阅 许可证 文件以获取详细信息。
作者
崔素民 -
