这是一个用于Browserless.io浏览器自动化的Model Context Protocol (MCP)服务器。该服务器通过MCP工具提供了一个全面的接口,以访问Browserless的强大浏览器自动化功能。
git clone https://github.com/Lizzard-Solutions/browserless-mcp.git
cd browserless-mcp
npm install
npm run build
cp env.example .env
.env文件以配置Browserless:BROWSERLESS_HOST=localhost
BROWSERLESS_PORT=3000
BROWSERLESS_TOKEN=your-secure-token-here
BROWSERLESS_PROTOCOL=http
BROWSERLESS_TIMEOUT=30000
BROWSERLESS_CONCURRENT=5
npm start
或者在开发模式下启动:
npm run dev
服务器提供了以下工具:
{
"name": "initialize_browserless",
"arguments": {
"host": "localhost",
"port": 3000,
"token": "your-token",
"protocol": "http",
"timeout": 30000,
"concurrent": 5
}
}
{
"name": "generate_pdf",
"arguments": {
"url": "https://example.com",
"options": {
"format": "A4",
"printBackground": true,
"displayHeaderFooter": true,
"margin": {
"top": "20mm",
"bottom": "10mm",
"left": "10mm",
"right": "10mm"
}
}
}
}
{
"name": "take_screenshot",
"arguments": {
"url": "https://example.com",
"options": {
"type": "png",
"fullPage": true,
"quality": 90
}
}
}
{
"name": "get_content",
"arguments": {
"url": "https://example.com",
"waitForSelector": {
"selector": "#content-loaded",
"timeout": 5000
}
}
}
{
"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"
}
}
}
{
"name": "run_performance_audit",
"arguments": {
"url": "https://example.com",
"config": {
"extends": "lighthouse:default",
"settings": {
"onlyCategories": ["performance", "accessibility"]
}
}
}
}
{
"name": "unblock",
"arguments": {
"url": "https://protected-site.com",
"content": true,
"screenshot": true,
"stealth": true,
"blockAds": true
}
}
{
"name": "execute_browserql",
"arguments": {
"query": "mutation { goto(url: \"https://example.com\") { status } click(selector: \"#button\") { success } screenshot { base64 } }",
"variables": {}
}
}
{
"name": "create_websocket_connection",
"arguments": {
"browser": "chromium",
"library": "puppeteer",
"stealth": true,
"viewport": {
"width": 1920,
"height": 1080
}
}
}
{
"name": "get_health",
"arguments": {}
}
{
"name": "get_sessions",
"arguments": {}
}
{
"name": "get_metrics",
"arguments": {}
}
# 基本设置
docker run -p 3000:3000 ghcr.io/browserless/chromium
# 带有配置
docker run \
--rm \
-p 3000:3000 \
-e "CONCURRENT=10" \
-e "TOKEN=your-secure-token" \
ghcr.io/browserless/chromium
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
{
"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' }; }"
}
}
{
"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>月度报告</h1></div><div class='content'><h2>概要</h2><p>这是使用自定义样式的生成报告。</p></div></body></html>",
"options": {
"format": "A4",
"printBackground": true,
"displayHeaderFooter": true,
"headerTemplate": "<div style='font-size:12px;'>机密报告</div>",
"footerTemplate": "<div style='font-size:10px;'>第<span class='pageNumber'></span>页</div>"
}
}
}
| 变量 | 默认值 | 描述 |
|---|---|---|
BROWSERLESS_HOST | localhost | Browserless主机 |
BROWSERLESS_PORT | 3000 | Browserless端口 |
BROWSERLESS_TOKEN | 必填 | 认证令牌 |
BROWSERLESS_PROTOCOL | http | 协议(http/https/ws/wss) |
BROWSERLESS_TIMEOUT | 30000 | 请求超时时间(毫秒) |
BROWSERLESS_CONCURRENT | 5 | 最大并发会话数 |
完整的Browserless配置选项,请参阅Browserless API参考。
MCP服务器为常见问题提供了详细的错误消息:
npm run build
npm test
npm run lint
npm run format
连接被拒绝
认证失败
超时错误
内存问题
启用调试日志记录:
DEBUG=browserless:* npm start
MIT许可证 - 详情请参阅LICENSE文件。
对于问题和疑问: