Browserless MCP Server
Enables comprehensive browser automation through Browserless.io including PDF generation, screenshots, content extraction, performance audits, and web scraping with anti-detection capabilities. Provides a complete interface to browser automation tasks through natural language interactions.
README
Browserless MCP Server
A Model Context Protocol (MCP) server for Browserless.io browser automation. This server provides a comprehensive interface to Browserless's powerful browser automation capabilities through MCP tools.
Features
- PDF Generation: Convert web pages or HTML content to PDF with custom styling
- Screenshots: Capture full-page or element-specific screenshots
- Content Extraction: Get rendered HTML content after JavaScript execution
- Custom Functions: Execute JavaScript code in browser context
- File Downloads: Handle file downloads and programmatic file creation
- Page Export: Export web pages with all resources
- Performance Audits: Run Lighthouse performance audits
- Anti-Detection: Bypass bot detection and anti-scraping measures
- BrowserQL: Execute GraphQL queries for advanced automation
- WebSocket Connections: Create connections for Puppeteer/Playwright
- Health Monitoring: Check instance health and get metrics
- Session Management: Monitor active browser sessions
Installation
- Clone the repository:
git clone https://github.com/Lizzard-Solutions/browserless-mcp.git
cd browserless-mcp
- Install dependencies:
npm install
- Build the project:
npm run build
- Copy the example environment file:
cp env.example .env
- Edit
.envwith your Browserless configuration:
BROWSERLESS_HOST=localhost
BROWSERLESS_PORT=3000
BROWSERLESS_TOKEN=your-secure-token-here
BROWSERLESS_PROTOCOL=http
BROWSERLESS_TIMEOUT=30000
BROWSERLESS_CONCURRENT=5
Usage
Starting the MCP Server
npm start
Or for development:
npm run dev
Using with MCP Clients
The server provides the following tools:
1. Initialize Browserless Connection
{
"name": "initialize_browserless",
"arguments": {
"host": "localhost",
"port": 3000,
"token": "your-token",
"protocol": "http",
"timeout": 30000,
"concurrent": 5
}
}
2. Generate 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. Take Screenshot
{
"name": "take_screenshot",
"arguments": {
"url": "https://example.com",
"options": {
"type": "png",
"fullPage": true,
"quality": 90
}
}
}
4. Extract Content
{
"name": "get_content",
"arguments": {
"url": "https://example.com",
"waitForSelector": {
"selector": "#content-loaded",
"timeout": 5000
}
}
}
5. Execute Custom Function
{
"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. Run Performance Audit
{
"name": "run_performance_audit",
"arguments": {
"url": "https://example.com",
"config": {
"extends": "lighthouse:default",
"settings": {
"onlyCategories": ["performance", "accessibility"]
}
}
}
}
7. Bypass Bot Detection
{
"name": "unblock",
"arguments": {
"url": "https://protected-site.com",
"content": true,
"screenshot": true,
"stealth": true,
"blockAds": true
}
}
8. Execute BrowserQL Query
{
"name": "execute_browserql",
"arguments": {
"query": "mutation { goto(url: \"https://example.com\") { status } click(selector: \"#button\") { success } screenshot { base64 } }",
"variables": {}
}
}
9. Create WebSocket Connection
{
"name": "create_websocket_connection",
"arguments": {
"browser": "chromium",
"library": "puppeteer",
"stealth": true,
"viewport": {
"width": 1920,
"height": 1080
}
}
}
10. Health and Monitoring
{
"name": "get_health",
"arguments": {}
}
{
"name": "get_sessions",
"arguments": {}
}
{
"name": "get_metrics",
"arguments": {}
}
Browserless Setup
Docker Setup
# 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
Advanced Examples
Complex Web Scraping
{
"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' }; }"
}
}
Multi-step Form Automation
{
"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 Report Generation
{
"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>"
}
}
}
Configuration Options
Environment Variables
| Variable | Default | Description |
|---|---|---|
BROWSERLESS_HOST |
localhost |
Browserless host |
BROWSERLESS_PORT |
3000 |
Browserless port |
BROWSERLESS_TOKEN |
Required | Authentication token |
BROWSERLESS_PROTOCOL |
http |
Protocol (http/https/ws/wss) |
BROWSERLESS_TIMEOUT |
30000 |
Request timeout in ms |
BROWSERLESS_CONCURRENT |
5 |
Max concurrent sessions |
Browserless Configuration
For complete Browserless configuration options, see the Browserless API Reference.
Error Handling
The MCP server provides detailed error messages for common issues:
- Connection Errors: Check host, port, and token configuration
- Timeout Errors: Increase timeout values for slow-loading pages
- Authentication Errors: Verify token is correct and has proper permissions
- Resource Errors: Check concurrent session limits and memory usage
Development
Building
npm run build
Testing
npm test
Linting
npm run lint
Formatting
npm run format
Troubleshooting
Common Issues
-
Connection Refused
- Ensure Browserless is running
- Check host and port configuration
- Verify firewall settings
-
Authentication Failed
- Verify token is correct
- Check token permissions
- Ensure token is not expired
-
Timeout Errors
- Increase timeout values
- Check network connectivity
- Monitor Browserless resource usage
-
Memory Issues
- Reduce concurrent session limit
- Monitor system memory usage
- Restart Browserless instance
Debug Mode
Enable debug logging:
DEBUG=browserless:* npm start
Contributing
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests
- Submit a pull request
License
MIT License - see LICENSE file for details.
Support
For issues and questions:
- Check the Browserless API Reference
- Review the Browserless Documentation
- Open an issue on GitHub
Related Projects
- Browserless.io - Browser automation platform
- Puppeteer - Node.js library for browser automation
- Playwright - Cross-browser automation library
- Model Context Protocol - Protocol for AI model interactions
Repository
- GitHub: https://github.com/Lizzard-Solutions/browserless-mcp
- Issues: https://github.com/Lizzard-Solutions/browserless-mcp/issues
- Discussions: https://github.com/Lizzard-Solutions/browserless-mcp/discussions
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。