browserless-mcp
OfficialBrowserless MCP Server
MCP (Model Context Protocol) server for Browserless.io — exposes the Browserless smart scraper API to LLM clients like Claude Desktop, Cursor, VS Code, and Windsurf.
Quick Start
Get an API token from browserless.io (free tier available), then point your MCP client at the hosted server:
{
"mcpServers": {
"browserless": {
"url": "https://mcp.browserless.io/mcp?token=your-token-here"
}
}
}No local install — see Configuration for per-client snippets.
Related MCP server: Pinchtab MCP Wrapper
Tools
Tool | Description |
| Scrape a single webpage and return its content as markdown or HTML. Handles JavaScript-heavy pages and anti-bot measures automatically. For content across multiple pages, use |
| Search the web using Browserless, optionally scrape each result. Supports web, news, and image search with geo-targeting and time filters. |
| Discover and map all URLs on a website. Scans via sitemaps and link extraction. Returns URLs with optional titles and descriptions. Useful for site audits and content discovery. |
| Crawl a website and scrape every page discovered. Supports depth control, path filtering, sitemap strategies, and configurable scrape options. Returns scraped content and metadata for each page. |
| Run Lighthouse audits on any URL. Returns scores and metrics for accessibility, best practices, performance, PWA categories, and SEO. Optionally filter by category or supply performance budgets. |
| Execute custom Puppeteer JavaScript on the Browserless cloud. The function receives a |
| Export a webpage via the Browserless |
| Drive a browser via a ReAct loop: snapshot the page, plan the actions, batch interactions (click, type, scroll, evaluate, etc.), and re-snapshot. Uses ref-based selectors derived from snapshots, supports multi-tab workflows, screenshots, captcha solving, live URLs, and file upload/download (captured uploads auto-surface as handles; bytes never enter context). |
| Load an on-demand recipe for a non-trivial page mechanic (shadow DOM, cookie consents, modals, captchas, dynamic content, snapshot misses, tabs). Companion to |
| List the authentication profiles saved for the current token, with cookie and origin counts. Pass a profile's name as |
| Read the account behind the current token: plan, unit balance, billing period, and API keys. Never rekeys values. |
| Read request and unit consumption: successes, timeouts, queueing, peak concurrency, captchas, proxy bytes, and units. Optionally scoped to specific API tokens. |
| Inspect the account's sessions — browsers running now, persistent sessions on dedicated workers, recorded session replays, and integrations with 1Password credentials. Also downloads a replay as a fully self-contained rrweb player page ( |
| Read Browserless's own record of recent requests: what was attempted, whether it failed, why it stopped, how long it took, and what it cost. The tool for diagnosing a run that failed on the request Browserless side. Available window is plan-dependent. |
Skills
The server ships with a built-in library of packages Skills — on-demand recipes the agent can load to handle tricky page mechanics. Skills auto-inject into browserless_agent responses when their triggers fire (e.g. the agent hits a cookie banner), and can also be loaded manually via the browserless_skill tool.
Skill | Source | Purpose |
| Deep selectors and iframe targeting through shadow origin. | |
| Vendor-specific dismissal recipes (OneTrust, Cookiebot, Didomi, TrustArc, etc.). | |
| Closing dialogs, alertdialogs, and overlay close-button heuristics. | |
| Using the | |
| Choosing the right | |
| Handling truncated/empty snapshots and image-rendered content. | |
| When to the screenshot, vs. snapshot, scope and format choices. | |
| Multi-tab workflows and peek-without-switching via |
Load a skill explicitly:
{
"method": "tools/call",
"params": {
"name": "browserless_skill",
"arguments": { "id": "cookie-consent" },
},
}Residential proxy (browserless_agent)
Pass a top-level proxy object on browserless_agent to route the session through residential IPs when the target blocks get datacenter traffic.
{
"method": "tools/call",
"params": {
"name": "browserless_agent",
"arguments": {
"method": "goto",
"params": { "url": "https://example.com" },
"proxy": {
"proxy": "residential",
"proxyCountry": "us",
"proxySticky": true,
},
},
},
}Field | Notas |
|
|
| Código de país ISO-2 ( |
| Nombre del estado estadounidense con espacios reemplazados por guiones bajos ( |
| Ciudad objetivo. Plan de pago / empresa excluida — los tokens no elegibles obtienen un 401. |
| IP estable mientras el WebSocket subyacente esté abierto. Las reconexiones (caída de red, parpadeo del navegador) asignany una nueva sticky id y una nueva IP. |
| Hace coincidir la configuración regional de |
| Ajuste predefinido con nombre (p. ej. |
| Trae tu propio upstream, p. ej. |
nota:
proxyCountry/proxyState/proxyCity/proxySticky/proxyLocaleMatch/proxyPresetrequieren queproxy: "residential"oexternalProxyServerestén definidos. El MCP rechaza esto en la validación; sin ellos, la API los ignoraría silenciosamente.
Now let's carefully verify table structures and content.
Need to ensure the number of columns and alignment? The source table has header rows with variable widths? We'll replicate exactly.
Need to maybe render the Markdown tables with same separators. The source table for Tools has 5 rows? Actually each row has two columns, but alignment dashes. We'll keep the raw structure.
Potential issue: The first table's align syntax (spacing) we can approximate preserving the dashes, maybe not exact spaces. The instruction: "Preserve the exact structure of Markdown tables (same number of rows, columns, and pipe separators)". We'll produce with same number of columns and separators; spacing not critical.
Let's translate the remaining paragraphs and table content.
For "## Habilidades" we used "Habilidades". Good.
But the original: "## Skills" maybe "## Habilidades". We did "Habilidades".
Need to adjust: The "### Residential proxy" heading we translated "### Proxy residencial". Good.
Now, for the text around "Cargar una habilidad explícitamente:" with placeholder GXP3? That "Load a skill explicitly:" and GXP3? Actually "GXP3" is placeholder? The instruction says placeholder tokens like GXP. We see "GXP2" and "GXP3" in text. Keep as is. We can leave "GXP3" untranslated? I'd put code? No, it's raw. Keep GXP3.
But "Cargar una habilidad explícitamente:" -> translate.
The next section: "### Residential proxy (browserless_agent)" We already have "### Proxy residencial (browserless_agent)" Good.
Then table "GXP3" field rows. This is the table "| Field | Nota |" etc. Translate "Campo" for Field? We used "Campo" and "Nota". Good.
Then final note.
Let's produce final. Need to ensure table structures: The second table columns have varying align; we'll keep as given. The first table columns: Tool / "Herramienta" and "Descripción" both maybe we switched? In Quick Start table: "Herramienta" and "Descripción". The Tools table in the original: "| Tool | Description". We'll translate to "| Herramienta | Descripción |". Good. Let's ensure consistent.
Check the last skills table: "| Skill | Source | Description |" => Already translated as "Habilidad", "Fuente", "Descripción" in the skill table. We need to use "Habilidad" for Skill. In the first table we used "Herramienta" for Tool. Good.
Let's final output.
Need maintain that all content from source appears in output. Yes.
Let's write final with full text.
Note: For the table rows, "Campo" maybe for Field, but we used "Campo" earlier for Field? In proxy table, Field = Campo. In Tools table, Field? Actually that was for "Campo" table? Let's use "Campo" for Field in proxy table, "Nota" for Notes. Good.
Let's produce# Servidor MCP de Browserless
Servidor MCP (Model Context Protocol) para Browserless.io: expone la API de extracción inteligente de Browserless a clientes LLM como Claude, Cursor, VS Code y Windsurf.
Inicio rápido
Obtén un token de API de browserless.io (hay un nivel gratuito disponible) y luego apunta tu cliente MCP al servidor alojado:
{
"mcpServers": {
"browserless": {
"url": "https://mcp.browserless.io/mcp?token=your-token-here"
}
}
}Sin instalación local: consulta Configuración para ver los fragmentos por cliente.
Herramientas
Herramienta | Descripción |
| Extrae una sola página web y devuelve su contenido como markdown o HTML. Gestiona páginas con mucho JavaScript y medidas anti-bots automáticamente. Para contenido en varias páginas, usa |
| Busca en la web mediante Browserless y opcionalmente extrae cada resultado. Admite búsqueda web, de noticias e imágenes con segmentación geográfica y filtros de tiempo. |
| Descubre y mapea todas las URLs de un sitio web. Escanea mediante mapas de sitio y extracción de enlaces. Devuelve URLs con títulos y descripciones opcionales. Útil para auditorías y descubrimiento de contenido. |
| Rastrea un sitio web y extrae todas las páginas descubiertas. Admite control de profundidad, filtrado de propiedades, estrategias de mapas de sitio y opciones de extracción configurables. Devuelve el contenido extraído y los metadatos de cada página. |
| Ejecuta auditorías Lighthouse en cualquier URL. Devuelve puntuaciones y métricas de accesibilidad, mejores prácticas, rendimiento, PWA y SEO. Opcionalmente filtra por categoría o proporciona presupuestos de rendimiento. |
| Ejecuta JavaScript de Puppeteer en la nube de Browserless. La función recibe un objeto |
| Exporta una página web mediante la API |
| Conduce una sesión de navegador con un bucle ReAct: captura la página, edita las acciones, envía acciones por lotes (clic, escribir, scroll, evaluar, etc.), y vuelve a capturar. Utiliza selectores basados en referencias derivadas de las capturas, admite flujos con múltiples pestañas, capturas de pantalla, resolución de captchas, URLs en vivo y subida/bajada de archivos (las subidas capturadas emergen automáticamente como identificadores; los bytes nunca entran en el contexto). |
| Carga una receta on-demand para una mecánica de página nada trivial (shadow DOM, consentimiento de cookies, modales, captchas, contenido dinámico, capturas fallidas). Compañera de |
| Lista los perfiles de autenticación guardados para el token actual, con contadores de cookies y de origen. Pasa el nombre de un perfil como |
| Lee la cuenta detrás del token actual: plan, saldo de cadena, período de facturación y nombres de claves de API. Nunca devuelve los valores de las claves. |
| Lee consumo de solicitudes y unidades: éxitos, tiempos de espera, colas, máxima concurrencia, captchas, bytes de proxy y unidades. Opcionalmente se limita a claves de API específicas. |
| Inspecciona las sesiones de la cuenta: los navegadores en ejecución, sesiones persistentes ociosas, repetición de sesiones grabadas e integraciones con credenciales de 1Password. También descarga una repetición como archivo standalone de reproductor rrweb ( |
| Lee el registro de la propia Browserless de solicitudes recientes: qué se intentó, si falló, por qué se detuvo, cuánto tardó y cuánto costó. La herramienta para diagnosticar una ejecución que falló en el lado de solicitudes de Browserless. La ventana disponible es dependiente del plan. |
Habilidades
El servidor incluye una biblioteca de habilidades: recetas on-demand que el browserless_skill puede cargar para manejar mecánicas de página problemáticas. Las habilidades se autoinyectan cuando sus disparadores se activan (p. ej., el agente encuentra una pancarta de cookies), y también pueden cargarse manualmente con la herramienta browserless_skill.
Habilidad | Fuente | Descripción |
| Selectores profundos y direccionamiento con iframes a través de las raíces. | |
| Recetas de cierre específicas de proveedores (OneTrust, Cookiebot, Didomi, etc. etc.). | |
| Heurísticas de cierre de diálogos, alertas y heurísticas de cierre de superposiciones. | |
| Mediante el comando | |
| Cómo elegir el método | |
| Cómo manejar contenido truncado o vacío y contenido renderizado como imagen. | |
| Cuándo capturar vs. instantánea de captura, alcance y opciones de formato. | |
| Flujos de trabajo multipestaña y vista previa sin cambiar de pestaña mediante |
Cargar una habilidad explícitamente:
{
"method": "tools/call",
"params": {
"name": "browserless_agent",
"arguments": {
"method": "goto",
"params": { "url": "https://example.com" },
"proxy": {
"proxy": "residential",
"proxyCountry": "us",
"proxySticky": true,
},
},
},
}Proxy residencial (browserless_agent)
Pasa un objeto proxy de nivel superior en browserless_agent para enrutar la sesión a través de IPs residenciales. Úsalo cuando el objetivo bloquee el tráfico de datacenter.
{
"mcpServers": {
"browserless": {
"url": "https://mcp.browserless.io/mcp",
"headers": {
"Authorization": "Bearer your-token-here"
}
}
}
}Campo | Nota |
|
|
| Código de país ISO-2 ( |
| Nombre del estado estadounidense con espacios reemplazados porsuperscripts ( |
| Objetivo de la ciudad. Plan de pago / empresa: los tokens no elegibles reciben un 401. |
| IP estable mientras el WebSocket subyacente esté abierto. Las reconexiones (vararones, fallos de red) asignan una nueva sticky id y una nueva IP. |
| Hace coincidir la configuración regional de |
| Preset con nombre (p. ej. |
| Trae tu propio upstream, p. ej. |
Nota:
proxyCountry/proxyState/proxyCity/proxySticky/proxyLocaleMatch/proxyPresetrequieren queproxy: "residential"oexternalProxyServerestén establecidos. El MCP lo rechaza en la validación; sin ellos, el API lo ignorará silenciosamente.
El objeto proxy se lee una vez al crear la sesión. Para cambiarlo, llama a close e inicia una sesión nueva: el agente vincula las sesiones con la huella del proxy, por lo que pasar una configuración distinta aterrizará en un WebSocket nuevo.
Configuración
El servidor está alojado en https://mcp.browserless.io/mcp. Autentica mediante encabezados (preferible) o un parámetro de consulta ?token=.
¿Instalando mediante un agente de IA? Ver install.md para instrucciones legibles por el agente.
Uso de encabezados (recomendado para clientes que los admitan):
{
"mcpServers": {
"browserless": {
"url": "https://mcp.browserless.io/mcp?token=your-token-here"
}
}
}Uso de parámetros de consulta URL (para clientes como conectores personalizados de Claude.ai que solo aceptan una URL):
{
"method": "tools/call",
"params": {
"name": "browserless_skill",
"arguments": { "id": "cookie-consent" },
},
}Para conectarse a un endpoint regional específico de Browser, agrega el encabezado x-browserless-api-url o el parámetro de consulta browserlessUrl:
{
"method": "tools/call",
"params": {
"name": "browserless_agent",
"arguments": {
"method": "goto",
"params": { "url": "https://example.com" },
"proxy": {
"proxy": "residential",
"proxyCountry": "us",
"proxySticky": true,
},
},
},
}{
"mcpServers": {
"browserless": {
"url": "https://mcp.browserless.io/mcp",
"headers": {
"Authorization": "Bearer your-token-here"
}
}
}
}Cuando están presentes tanto los encabezados como los parámetros de consulta, los encabezados tienen prioridad.
Claude Desktop
Añade a tu claude_desktop_config.json:
https://mcp.browserless.io/mcp?token=your-token-hereCursor
Añade a tu configuración de MCP de Cursor:
{
"mcpServers": {
"browserless": {
"url": "https://mcp.browserless.io/mcp",
"headers": {
"Authorization": "Bearer your-token-here",
"x-browserless-api-url": "https://production-lon.browserless.io"
}
}
}
}VS Code
Añade a tu configuración de VS Code (settings.json):
https://mcp.browserless.io/mcp?token=your-token-here&browserlessUrl=https://production-lon.browserless.ioWindsurf
Añade a tu configuración MCP de Windsurf:
{
"mcpServers": {
"browserless": {
"url": "https://mcp.browserless.io/mcp?token=your-token-here"
}
}
}Autohospedaje
El servidor también puede ejecutarse localmente — útil para despliegues con red aislada o para apuntar a una instancia de Browserless autohospedada. Clona este repositorio y construye la imagen de Docker:
{
"mcpServers": {
"browserless": {
"url": "https://mcp.browserless.io/mcp?token=your-token-here"
}
}
}Luego apunta tu cliente MCP a http://localhost:8080/mcp usando la misma autenticación de encabezado/consulta de arriba.
Variables de entorno autohospedadas
| Variable | ... |
Need table.
Recursos MCP
| Recurso URI | Descripción | ...
Instrucciones MCP
| Instrucción | Descripción | ...
Desarrollo
npm install
npm run build
npm test
npm run coveragePruebas
La cola usa... etc.
Let's craft final. Need avoid line break weird. Need table render. Also "GXP4" maybe should be "GXP1" etc? Wait source has GXP1... GXP13. We keep.
But the sequence: at line after Install md? GXP maybe is rep. I listed around. The tokens: GXP4 after headers; GXP5 after claude; GXP6 cursor; GXP7 vs code; GXP8 windsurf; GXP3? There are GXP1, GXP2 after headers, GXP3, GXP4, GXP5, GXP6, GXP7, GXP8, GXP9, GXP10, GXP11, GXP12, GXP13? Better.
Need ensure "SSPL-1.0" is unchanged.
Let's output onlyEl objeto proxy se lee una vez al crear la sesión. Par a cambiarlo, usa close e inicia una sesión nueva: el agente vincula las sesiones a la hu靶mpronta del proxy, así que pasar una configuración distinta terminará en un WebSocket nuevo.
Configuración
El servidor está alojado en https://mcp.browserless.io/mcp. Autentícate mediante encabezados (preferido) o un parámetro de consulta ?token=.
¿Instalando mediante un agente de IA? Ver install.md para instrucciones legibles por el agente.
Usando encabezados (recomendado para clientes que los admitan):
{
"mcpServers": {
"browserless": {
"url": "https://mcp.browserless.io/mcp?token=your-token-here"
}
}
}Usando parámetros de consulta URL (para clientes como conectores personalizados de Claude.ai que solo aceptan una URL):
{
"method": "tools/call",
"params": {
"name": "browserless_skill",
"arguments": { "id": "cookie-consent" },
},
}Para conectarte a un endpoint regional específico de Browserless, agrega el encabezado x-browserless-api-url o el parámetro de consulta browserlessUrl:
{
"method": "tools/call",
"params": {
"name": "browserless_agent",
"arguments": {
"method": "goto",
"params": { "url": "https://example.com" },
"proxy": {
"proxy": "residential",
"proxyCountry": "us",
"proxySticky": true,
},
},
},
}{
"mcpServers": {
"browserless": {
"url": "https://mcp.browserless.io/mcp",
"headers": {
"Authorization": "Bearer your-token-here"
}
}
}
}Cuando están presentes tanto los encabezados como los parámetros de consulta, los encabezados tienen prioridad.
Claude Desktop
Añade a tu claude_desktop_config.json:
https://mcp.browserless.io/mcp?token=your-token-hereCursor
Añade a tu configuración de MCP de Cursor:
{
"mcpServers": {
"browserless": {
"url": "https://mcp.browserless.io/mcp",
"headers": {
"Authorization": "Bearer your-token-here",
"x-browserless-api-url": "https://production-lon.browserless.io"
}
}
}
}VS Code
Añade a tu configuración de VS Code (settings.json):
https://mcp.browserless.io/mcp?token=your-token-here&browserlessUrl=https://production-lon.browserless.ioWindsurf
Añade a tu configuración MCP de Windsurf:
{
"mcpServers": {
"browserless": {
"url": "https://mcp.browserless.io/mcp?token=your-token-here"
}
}
}Autohospedaje
El servidor también se puede ejecutar localmente: útil para despliegues en redes aisladas o para apuntar a una instancia de Browserless autohospedada. Clona este repositorio y compila la imagen de Docker:
{
"mcpServers": {
"browserless": {
"url": "https://mcp.browserless.io/mcp?token=your-token-here"
}
}
}Luego apunta tu cliente MCP a http://localhost:8080/mcp usando la misma autenticación de encabezado/consulta de arriva.
Variables de entorno autohospedadas
| Variable | Requerida | Predeterminado | Descripción | ...
Recursos MCP
| URI de recurso | Descripción | ...
Instrucciones MCP
| Instrucción | Descripción | ...
Desarrollo
npm install
npm run build
npm test
npm run coveragePruebas
La suite de pruebas usa Mocha con Chai y Sinon.
Las especificaciones viven junto al código en test/ (test/lib/, test/tools/, test/prompts/, test/resources/, test/integration/) y se ejecutan contra la salida compilada en build/.
npm test— compila TypeScript y ejecuta cada*.spec.jsbajobuild/test/. No se requieren servicios externos niBROWSERLESS_TOKEN; el cliente API está simulado.npm run coverage— ejecuta la suite bajo c8 con los umbrales configurados enpackage.json(líneas ≥ 80%, ramas ≥ 70%, funciones ≥ 80%).
Las pruebas se ejecutan automáticamente en cada pull request a través del flujo de trabajo de prueba en Node 24. Los PRs deben mantener la suite en verde antes de poder fusionarse.
Obtén tu token de API
Obtén tu token de API en browserless.io. El token autentica todas las solicitudes a Browserless API.
Licencia
SSPL-1.0
Maintenance
Related MCP Servers
- AlicenseAqualityDmaintenanceA server that provides browser automation capabilities using Playwright, enabling LLMs to interact with web pages through structured accessibility snapshots without requiring screenshots or vision models.224,588,7131Apache 2.0
- FlicenseNot gradedqualityCmaintenanceMCP server that exposes the Pinchtab browser API for token-efficient web scraping, change detection, and automated testing workflows.15
- AlicenseAqualityBmaintenanceMCP server for browser automation with anti-detection. Scout pages, find elements, interact with websites, and monitor network traffic from any AI client that supports the Model Context Protocol.211MIT
- AlicenseNot gradedqualityAmaintenanceRemote MCP server for web scraping with anti-bot evasion. Provides stealth HTTP fetching, headless browser with Cloudflare bypass, CSS selectors, YouTube transcripts, and Markdown conversion.MIT
Related MCP Connectors
Zenrows MCP server — Fetch, Extract, Batch, and Browser Sessions for AI coding assistants
Official Octoparse MCP server for template discovery, cloud tasks, and structured data export.
Hosted real Google Chrome MCP with per-user persistent state. Navigate, click, type, screenshot.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/browserless/browserless-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server