Headless browser via Browserless. PDFs, screenshots, Lighthouse, JS rendering, anti-bot. Triggers on: browserless, headless browser, generate PDF, take screenshot, lighthouse audit, unblock site, browser automation.
Self-hosted headless Chrome automation via Browserless on the VPS. Generates PDFs, captures screenshots, extracts JS-rendered content, runs Lighthouse audits, and bypasses anti-bot protections.
| Tool | Purpose | When to Use |
|---|---|---|
initialize_browserless | Connect to instance | First call — establishes connection |
generate_pdf | URL/HTML to PDF | Convert pages or raw HTML to PDF documents |
take_screenshot | Capture page image | Get png/jpeg/webp screenshots, full-page or viewport |
get_content | Extract rendered HTML | Get page content after JS execution |
execute_function | Run browser-side JS | Execute custom scripts in browser context |
run_performance_audit | Lighthouse audit | Performance, accessibility, SEO analysis |
unblock | Bypass bot detection | Access anti-bot protected sites with stealth mode |
execute_browserql | GraphQL queries | Advanced browser state queries |
create_websocket_connection | WebSocket session | Puppeteer/Playwright remote connection |
get_health | Instance health | Check if Browserless is running |
get_sessions | Active sessions | List current browser sessions |
get_metrics | Performance metrics | Monitor instance performance |
Always initialize the connection first:
mcp__browserless__initialize_browserless({
host: process.env.BROWSERLESS_HOST,
port: parseInt(process.env.BROWSERLESS_PORT),
token: process.env.BROWSERLESS_TOKEN,
protocol: process.env.BROWSERLESS_PROTOCOL
})
mcp__browserless__generate_pdf({
url: "https://example.com/report",
options: {
format: "A4",
printBackground: true,
margin: { top: "1cm", bottom: "1cm", left: "1cm", right: "1cm" }
}
})
From raw HTML:
mcp__browserless__generate_pdf({
html: "<h1>Report</h1><p>Content here</p>",
options: { format: "Letter" }
})
mcp__browserless__take_screenshot({
url: "https://example.com",
options: {
type: "png",
fullPage: true,
quality: 90
}
})
mcp__browserless__get_content({
url: "https://spa-app.com/dashboard",
waitForSelector: {
selector: ".data-loaded",
timeout: 10000
}
})
mcp__browserless__run_performance_audit({
url: "https://example.com",
config: {
extends: "lighthouse:default",
settings: {
onlyCategories: ["performance", "accessibility", "seo"]
}
}
})
mcp__browserless__unblock({
url: "https://protected-site.com",
content: true,
screenshot: true,
stealth: true,
blockAds: true
})
mcp__browserless__execute_function({
code: "export default async function({ page }) { await page.goto('https://example.com'); return await page.title(); }",
context: { customData: "value" }
})
mcp__browserless__execute_browserql({
query: "mutation { goto(url: \"https://example.com\") { status } }",
variables: {}
})
1. Prepare HTML content or target URL
2. generate_pdf with custom margins and backgrounds
3. Save output to file
1. get_content with waitForSelector for dynamic content
2. Parse rendered HTML for data
3. Structure extracted data
1. run_performance_audit with all categories
2. Parse scores and recommendations
3. Generate actionable report
1. unblock with stealth + content flags
2. Parse returned HTML content
3. Optionally capture screenshot for verification
| Need | Use | Notes |
|---|---|---|
| JS-rendered content extraction | Browserless get_content | Remote, cloud-hosted |
| PDF from URL or HTML | Browserless generate_pdf | Remote, cloud-hosted |
| Lighthouse performance audit | Browserless run_performance_audit | Remote, cloud-hosted |
| Bot-protected site access | Browserless unblock | Remote, stealth mode |
| Token-efficient page inspection | PinchTab snap -i -c / text | Local, 5-13x cheaper than screenshots |
| Local browser automation | PinchTab CLI/API | Local, a11y tree + stable refs, multi-instance |
| General web scraping (markdown) | Firecrawl firecrawl_scrape | Handles JS rendering |
| Multi-site crawling | Firecrawl firecrawl_crawl | Proxy rotation, anti-bot |
| Interactive browser testing | Chrome DevTools MCP | Console/network monitoring |
| Full page interaction/clicks | Playwright MCP | Complex automation sequences |
| Scenario | Choose | Why |
|---|---|---|
| Need remote/cloud execution | Browserless | PinchTab is local-only |
| Token budget is tight | PinchTab | text = ~800 tokens vs screenshot ~2K+ |
| Need Lighthouse audit | Browserless | PinchTab has no Lighthouse |
| Need element interaction by ref | PinchTab | Stable refs, no coordinate guessing |
| Need anti-bot bypass | Browserless unblock | Or Scrapling for TLS fingerprinting |
| PDF generation (remote) | Browserless | More options (margins, headers, etc.) |
| PDF generation (local) | PinchTab pdf | Faster, no network round-trip |
| Multi-instance parallel testing | PinchTab | Built-in instance management + tab locking |
ghcr.io/browserless/chromiumBROWSERLESS_HOST, BROWSERLESS_PORT, BROWSERLESS_TOKEN, BROWSERLESS_PROTOCOL/Users/ps/.claude/mcp-servers/browserless-mcp/dist/index.jsinitialize_browserless before other toolswaitForSelector in get_content for SPAs to ensure content loadsfullPage: true for screenshots only when needed (larger output)unblock over get_content for bot-protected sitesget_health to verify instance is running before batch operations