无浏览器MCP服务器
用于Browserless.io浏览器自动化的模型上下文协议(MCP)服务器。该服务器通过MCP工具为无浏览器强大的浏览器自动化功能提供了一个全面的接口。
特性
- PDF生成:使用自定义样式将网页或HTML内容转换为PDF
- 截图:捕获整页或特定元素的屏幕截图
- 内容提取:在JavaScript执行后获取渲染的HTML内容
- 自定义函数:在浏览器上下文中执行JavaScript代码
- 文件下载:处理文件下载和程序化文件创建
- 页面导出:导出包含所有资源的网页
- 绩效审计:运行Lighthouse绩效审计
- 反检测:绕过机器人检测和防刮擦措施
- 浏览器QL:执行GraphQL查询以实现高级自动化
- WebSocket连接:为木偶师/剧作家建立联系
- 健康监测:检查实例运行状况并获取指标
- 会话管理:监视活动浏览器会话
安装
- 克隆存储库:
git clone https://github.com/Lizzard-Solutions/browserless-mcp.git
cd browserless-mcp- 安装依赖项:
npm install- 构建项目:
npm run build- 复制示例环境文件:
cp env.example .env- 编辑
.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/chromiumDocker 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": "body{font-family:Arial;margin:20px;} .header{background:#333;color:white;padding:20px;} .content{margin:20px 0;}
Monthly Report
Summary
This is a generated report with custom styling.
",
"options": {
"format": "A4",
"printBackground": true,
"displayHeaderFooter": true,
"headerTemplate": "
Confidential Report
",
"footerTemplate": "
Page
"
}
}
}配置选项
环境变量
| 变量 | 默认值 | 描述 |
|---|---|---|
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故障排除
常见问题
- 连接被拒绝
- 确保无浏览器运行 - 检查主机和端口配置 - 验证防火墙设置
- 认证失败
- 验证令牌是否正确 - 检查令牌权限 - 确保令牌未过期
- 超时错误
- 增加超时值 - 检查网络连接 - 监控无浏览器资源使用情况
- 内存问题
- 减少并发会话限制 - 监控系统内存使用情况 - 重新启动无浏览器实例
调试模式
启用调试日志记录:
DEBUG=browserless:* npm start贡献
- 分叉存储库
- 创建要素分支
- 进行更改
- 添加测试
- 提交拉取请求
许可证
MIT许可证-有关详细信息,请参阅许可证文件。
支持
对于问题和疑问:
相关项目
仓库
- GitHub: https://github.com/Lizzard-Solutions/browserless-mcp
- 问题: https://github.com/Lizzard-Solutions/browserless-mcp/issues
- 讨论: https://github.com/Lizzard-Solutions/browserless-mcp/discussions
