浏览器自动化MCP服务器

一个基于Model Context Protocol (MCP)的浏览器自动化服务器,提供PDF生成、截图、内容提取、性能审计等全面的浏览器自动化功能。

  • by Lizzard-Solutions
  • TypeScript
  • 本地部署
  • 14 星标
  • 更新于
在 GitHub 查看 Lizzard-Solutions/browserless-mcp

使用说明

无浏览器MCP服务器

用于Browserless.io浏览器自动化的模型上下文协议(MCP)服务器。该服务器通过MCP工具为无浏览器强大的浏览器自动化功能提供了一个全面的接口。

特性

  • PDF生成:使用自定义样式将网页或HTML内容转换为PDF
  • 截图:捕获整页或特定元素的屏幕截图
  • 内容提取:在JavaScript执行后获取渲染的HTML内容
  • 自定义函数:在浏览器上下文中执行JavaScript代码
  • 文件下载:处理文件下载和程序化文件创建
  • 页面导出:导出包含所有资源的网页
  • 绩效审计:运行Lighthouse绩效审计
  • 反检测:绕过机器人检测和防刮擦措施
  • 浏览器QL:执行GraphQL查询以实现高级自动化
  • WebSocket连接:为木偶师/剧作家建立联系
  • 健康监测:检查实例运行状况并获取指标
  • 会话管理:监视活动浏览器会话

安装

  1. 克隆存储库:
git clone https://github.com/Lizzard-Solutions/browserless-mcp.git
cd browserless-mcp
  1. 安装依赖项:
npm install
  1. 构建项目:
npm run build
  1. 复制示例环境文件:
cp env.example .env
  1. 编辑 .env 使用无浏览器配置:
BROWSERLESS_HOST=localhost
BROWSERLESS_PORT=3000
BROWSERLESS_TOKEN=your-secure-token-here
BROWSERLESS_PROTOCOL=http
BROWSERLESS_TIMEOUT=30000
BROWSERLESS_CONCURRENT=5

用法

启动MCP服务器

npm start

或用于开发:

npm run dev

与MCP客户端一起使用

服务器提供以下工具:

1.初始化无浏览器连接

{
  "name": "initialize_browserless",
  "arguments": {
    "host": "localhost",
    "port": 3000,
    "token": "your-token",
    "protocol": "http",
    "timeout": 30000,
    "concurrent": 5
  }
}

2.生成PDF

{
  "name": "generate_pdf",
  "arguments": {
    "url": "https://example.com",
    "options": {
      "format": "A4",
      "printBackground": true,
      "displayHeaderFooter": true,
      "margin": {
        "top": "20mm",
        "bottom": "10mm",
        "left": "10mm",
        "right": "10mm"
      }
    }
  }
}

3.拍摄屏幕截图

{
  "name": "take_screenshot",
  "arguments": {
    "url": "https://example.com",
    "options": {
      "type": "png",
      "fullPage": true,
      "quality": 90
    }
  }
}

4.提取内容

{
  "name": "get_content",
  "arguments": {
    "url": "https://example.com",
    "waitForSelector": {
      "selector": "#content-loaded",
      "timeout": 5000
    }
  }
}

5.执行自定义功能

{
  "name": "execute_function",
  "arguments": {
    "code": "export default async function ({ page }) { await page.goto('https://example.com'); const title = await page.title(); return { data: { title }, type: 'application/json' }; }",
    "context": {
      "customData": "value"
    }
  }
}

6.运行绩效审计

{
  "name": "run_performance_audit",
  "arguments": {
    "url": "https://example.com",
    "config": {
      "extends": "lighthouse:default",
      "settings": {
        "onlyCategories": ["performance", "accessibility"]
      }
    }
  }
}

7.绕过Bot检测

{
  "name": "unblock",
  "arguments": {
    "url": "https://protected-site.com",
    "content": true,
    "screenshot": true,
    "stealth": true,
    "blockAds": true
  }
}

8.执行BrowserQL查询

{
  "name": "execute_browserql",
  "arguments": {
    "query": "mutation { goto(url: \"https://example.com\") { status } click(selector: \"#button\") { success } screenshot { base64 } }",
    "variables": {}
  }
}

9.创建WebSocket连接

{
  "name": "create_websocket_connection",
  "arguments": {
    "browser": "chromium",
    "library": "puppeteer",
    "stealth": true,
    "viewport": {
      "width": 1920,
      "height": 1080
    }
  }
}

10.健康和监测

{
  "name": "get_health",
  "arguments": {}
}
{
  "name": "get_sessions",
  "arguments": {}
}
{
  "name": "get_metrics",
  "arguments": {}
}

无浏览器设置

Docker设置

# Basic setup
docker run -p 3000:3000 ghcr.io/browserless/chromium

# With configuration
docker run \
  --rm \
  -p 3000:3000 \
  -e "CONCURRENT=10" \
  -e "TOKEN=your-secure-token" \
  ghcr.io/browserless/chromium

Docker Compose

version: '3.8'

services:
  browserless:
    image: ghcr.io/browserless/chromium:latest
    container_name: browserless
    restart: unless-stopped
    ports:
      - "3000:3000"
    environment:
      - TOKEN=your-secure-token-here
      - CONCURRENT=10
      - TIMEOUT=120000
      - HEALTH=true
      - CORS=true
    volumes:
      - ./data:/app/data
      - ./downloads:/app/downloads

高级示例

复杂的Web剪贴

{
  "name": "execute_function",
  "arguments": {
    "code": "export default async function ({ page }) { await page.goto('https://example.com'); await page.waitForSelector('.item'); const items = await page.evaluate(() => Array.from(document.querySelectorAll('.item')).map(el => ({ text: el.textContent, href: el.href }))); return { data: { items }, type: 'application/json' }; }"
  }
}

多步表单自动化

{
  "name": "execute_function",
  "arguments": {
    "code": "export default async function ({ page }) { await page.goto('https://example.com/form'); await page.type('#username', 'user@example.com'); await page.type('#password', 'password123'); await page.click('#submit'); await page.waitForNavigation(); const result = await page.evaluate(() => document.querySelector('.success-message').textContent); return { data: { result }, type: 'application/json' }; }"
  }
}

PDF报告生成

{
  "name": "generate_pdf",
  "arguments": {
    "html": "<!DOCTYPE html><html><head><style>body{font-family:Arial;margin:20px;} .header{background:#333;color:white;padding:20px;} .content{margin:20px 0;}</style></head><body><div class='header'><h1>Monthly Report</h1></div><div class='content'><h2>Summary</h2><p>This is a generated report with custom styling.</p></div></body></html>",
    "options": {
      "format": "A4",
      "printBackground": true,
      "displayHeaderFooter": true,
      "headerTemplate": "<div style='font-size:12px;'>Confidential Report</div>",
      "footerTemplate": "<div style='font-size:10px;'>Page <span class='pageNumber'></span></div>"
    }
  }
}

配置选项

环境变量

变量 默认值 描述
BROWSERLESS_HOST localhost 无浏览器主机
BROWSERLESS_PORT 3000 无浏览器端口
BROWSERLESS_TOKEN 必需 身份验证令牌
BROWSERLESS_PROTOCOL http 协议(http/https/ws/wss)
BROWSERLESS_TIMEOUT 30000 请求超时(毫秒)
BROWSERLESS_CONCURRENT 5 最大并发会话数

无浏览器配置

有关完整的无浏览器配置选项,请参阅 无浏览器API参考.

错误处理

MCP服务器为常见问题提供详细的错误消息:

  • 连接错误:检查主机、端口和令牌配置
  • 超时错误:增加加载缓慢页面的超时值
  • 身份验证错误:验证令牌是否正确以及是否具有适当的权限
  • 资源错误:检查并发会话限制和内存使用情况

发展

建筑

npm run build

测试

npm test

掉毛

npm run lint

格式化

npm run format

故障排除

常见问题

  1. 连接被拒绝

    • 确保无浏览器运行
    • 检查主机和端口配置
    • 验证防火墙设置
  2. 认证失败

    • 验证令牌是否正确
    • 检查令牌权限
    • 确保令牌未过期
  3. 超时错误

    • 增加超时值
    • 检查网络连接
    • 监控无浏览器资源使用情况
  4. 内存问题

    • 减少并发会话限制
    • 监控系统内存使用情况
    • 重新启动无浏览器实例

调试模式

启用调试日志记录:

DEBUG=browserless:* npm start

贡献

  1. 分叉存储库
  2. 创建要素分支
  3. 进行更改
  4. 添加测试
  5. 提交拉取请求

许可证

MIT许可证-有关详细信息,请参阅许可证文件。

支持

对于问题和疑问:

  1. 检查 无浏览器API参考
  2. 查看 无浏览器文档
  3. 在GitHub上打开一个问题

相关项目

仓库

  • GitHub: https://github.com/Lizzard-Solutions/browserless-mcp
  • 问题: https://github.com/Lizzard-Solutions/browserless-mcp/issues
  • 讨论: https://github.com/Lizzard-Solutions/browserless-mcp/discussions