使用说明
无浏览器MCP服务器(Python)
A. FastMCP 暴露的服务器 无浏览器.io 作为MCP工具的浏览器自动化功能。内置Python uv, fastmcp,以及 httpx.
特性
| 工具 | 说明 |
|---|---|
browserless_generate_pdf |
将URL或HTML转换为PDF |
browserless_take_screenshot |
捕获整页或剪切的屏幕截图 |
browserless_get_content |
JS执行后提取完全渲染的HTML |
browserless_execute_function |
在真实浏览器中运行任意JS |
browserless_scrape |
通过CSS选择器提取结构化数据 |
browserless_run_performance_audit |
灯塔性能/可访问性审计 |
browserless_unblock |
绕过机器人检测/防刮擦措施 |
browserless_execute_browserql |
运行BrowserQL GraphQL自动化查询 |
browserless_get_websocket_url |
为木偶师/剧作家构建WebSocket URL |
browserless_get_health |
检查无浏览器实例运行状况 |
browserless_get_sessions |
列出活动浏览器会话 |
browserless_get_metrics |
获取实例性能指标 |
browserless_configure_connection |
在运行时更新连接设置 |
先决条件
启动无浏览器(Docker)
# Quick start (no auth)
docker run -p 3000:3000 ghcr.io/browserless/chromium
# With token
docker run -p 3000:3000 \
-e TOKEN=my-secret-token \
-e CONCURRENT=10 \
ghcr.io/browserless/chromium
安装
# Clone
git clone https://github.com/your-org/browserless-mcp-python.git
cd browserless-mcp-python
# Install dependencies with uv
uv sync
# Copy and edit config
cp .env.example .env
编辑 .env:
BROWSERLESS_HOST=localhost
BROWSERLESS_PORT=3000
BROWSERLESS_TOKEN=my-secret-token
BROWSERLESS_PROTOCOL=http
BROWSERLESS_TIMEOUT=30000
BROWSERLESS_CONCURRENT=5
跑步
# Via uv
uv run browserless-mcp
# Or directly
uv run python src/browserless_mcp/server.py
# Or after installing
pip install -e .
browserless-mcp
Claude桌面配置
增添 ~/.config/claude/claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"browserless": {
"command": "uvx",
"args": ["browserless-mcp"],
"env": {
"BROWSERLESS_HOST": "localhost",
"BROWSERLESS_PORT": "3000",
"BROWSERLESS_TOKEN": "your-token"
}
}
}
}
工具示例
生成PDF
{
"name": "browserless_generate_pdf",
"arguments": {
"url": "https://example.com",
"options": {
"format": "A4",
"printBackground": true,
"margin": { "top": "20mm", "bottom": "10mm", "left": "10mm", "right": "10mm" }
}
}
}
屏幕截图
{
"name": "browserless_take_screenshot",
"arguments": {
"url": "https://example.com",
"options": { "type": "png", "fullPage": true }
}
}
提取内容
{
"name": "browserless_get_content",
"arguments": {
"url": "https://example.com",
"waitForSelector": { "selector": "#main-content", "timeout": 5000 }
}
}
报废结构化数据
{
"name": "browserless_scrape",
"arguments": {
"url": "https://news.ycombinator.com",
"elements": [
{ "selector": ".titleline > a" },
{ "selector": ".score" }
]
}
}
执行自定义JS
{
"name": "browserless_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' }; }"
}
}
绩效审计
{
"name": "browserless_run_performance_audit",
"arguments": {
"url": "https://example.com",
"config": {
"extends": "lighthouse:default",
"settings": { "onlyCategories": ["performance", "accessibility"] }
}
}
}
绕过机器人检测
{
"name": "browserless_unblock",
"arguments": {
"url": "https://protected-site.com",
"content": true,
"screenshot": true,
"stealth": true,
"blockAds": true
}
}
Browserql查询
{
"name": "browserless_execute_browserql",
"arguments": {
"query": "mutation { goto(url: \"https://example.com\") { status } screenshot { base64 } }"
}
}
项目结构
browserless-mcp-python/
├── src/
│ └── browserless_mcp/
│ ├── __init__.py # Package metadata
│ ├── config.py # Env-based configuration
│ ├── client.py # Shared httpx HTTP helpers
│ └── server.py # FastMCP server + all tools
├── .env.example # Example environment config
├── pyproject.toml # uv/hatch build config
└── README.md
环境变量
| 变量 | 默认值 | 描述 |
|---|---|---|
BROWSERLESS_HOST |
localhost |
无浏览器主机 |
BROWSERLESS_PORT |
3000 |
无浏览器端口 |
BROWSERLESS_TOKEN |
(空) | 身份验证令牌(安全实例所需) |
BROWSERLESS_PROTOCOL |
http |
http, https, ws,或 wss |
BROWSERLESS_TIMEOUT |
30000 |
请求超时(毫秒) |
BROWSERLESS_CONCURRENT |
5 |
最大并发会话数(信息性) |
许可证
麻省理工学院
