Browser MCP
Servidor MCP para navegador que permite a agentes de IA automatizar páginas web con Puppeteer, acciones basadas en el árbol de accesibilidad, modo visual opcional y control de navegador multiplataforma.
Documentación
Browser Use MCP Server
Un servidor Model Context Protocol (MCP) rápido y ligero que brinda a los LLM automatización de navegador mediante los datos de accesibilidad estructurados de Puppeteer, con modo de visión opcional para comprensión visual compleja y configuración flexible y multiplataforma.
Características principales
- ⚡ Rápido y ligero. Utiliza el índice de etiquetas de Puppeteer, no entrada basada en píxeles ni el árbol DOM de accesibilidad.
- 👁️ Compatibilidad con modo de visión. Capacidades opcionales de comprensión visual para diseños complejos y elementos visuales cuando los datos estructurados no son suficientes.
- 🤖 Optimizado para LLM. No se necesitan modelos de visión, opera únicamente con datos estructurados, menos contexto reduce el uso de tokens de contexto.
- 🧩 Configuración de ejecución flexible. Personalice el tamaño de viewport, los factores del sistema de coordenadas y el User-Agent en tiempo de ejecución mediante cabeceras HTTP.
- 🌐 Multiplataforma y extensible. Compatibilidad con navegadores remotos y locales, y uso de un motor de navegador personalizado.
Requisitos
- Node.js 18 o superior
- VS Code, Cursor, Windsurf, Claude Desktop o cualquier otro cliente MCP
Primeros pasos
Local (Stdio)
Primero, instale el servidor Browser MCP con su cliente. Una configuración típica tiene este aspecto:
{
"mcpServers": {
"browser": {
"command": "npx",
"args": [
"@agent-infra/mcp-server-browser@latest"
]
}
}
}
Instalar en VS Code
También puede instalar el servidor Browser MCP mediante la CLI de VS Code:
# For VS Code
code --add-mcp '{"name":"browser","command":"npx","args":["@agent-infra/mcp-server-browser@latest"]}'
Tras la instalación, el servidor Browser MCP estará disponible para usarlo con su agente GitHub Copilot en VS Code.
Instalar en Cursor
Vaya a Cursor Settings -> MCP -> Add new MCP Server. Póngale el nombre que desee, use el tipo command con el comando npx @agent-infra/mcp-server-browser. También puede verificar la configuración o añadir argumentos como comando haciendo clic en Edit.
{
"mcpServers": {
"browser": {
"command": "npx",
"args": [
"@agent-infra/mcp-server-browser@latest"
]
}
}
}
Instalar en Windsurf
Siga la documentación de MCP de Windsurf. Use la siguiente configuración:
{
"mcpServers": {
"browser": {
"command": "npx",
"args": [
"@agent-infra/mcp-server-browser@latest"
]
}
}
}
Instalar en Claude Desktop
Siga la guía de instalación de MCP y use la siguiente configuración:
{
"mcpServers": {
"browser": {
"command": "npx",
"args": [
"@agent-infra/mcp-server-browser@latest"
]
}
}
}
Remoto (SSE / Streamable HTTP)
Al mismo tiempo, usar el argumento --port $your_port para iniciar el navegador mcp permite convertirlo en servidor SSE y Streamable HTTP.
# normal run remote mcp server
npx @agent-infra/mcp-server-browser --port 8089
# run with DISPLAY environment for VNC or other virtual display
DISPLAY=:0 npx @agent-infra/mcp-server-browser --port 8089
Puede usar uno de los dos endpoints remotos del servidor MCP:
- Streamable HTTP (recomendado):
http://127.0.0.1::8089/mcp - SSE:
http://127.0.0.1::8089/sse
Y luego, en la configuración del cliente MCP, establezca el url en el endpoint SSE:
{
"mcpServers": {
"browser": {
"url": "http://127.0.0.1::8089/sse"
}
}
}
url para Streamable HTTP:
{
"mcpServers": {
"browser": {
"type": "streamable-http", // If there is MCP Client support
"url": "http://127.0.0.1::8089/mcp"
}
}
}
Llamada en memoria
Si su cliente MCP está desarrollado con JavaScript / TypeScript, puede usar directamente llamadas en proceso para evitar que sus usuarios tengan que instalar la interfaz de línea de comandos para usar Browser MCP.
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
import { InMemoryTransport } from '@modelcontextprotocol/sdk/inMemory.js';
// type: module project usage
import { createServer } from '@agent-infra/mcp-server-browser';
// commonjs project usage
// const { createServer } = await import('@agent-infra/mcp-server-browser')
const client = new Client(
{
name: 'test browser client',
version: '1.0',
},
{
capabilities: {},
},
);
const server = createServer();
const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair();
await Promise.all([
client.connect(clientTransport),
server.connect(serverTransport),
]);
// list tools
const result = await client.listTools();
console.log(result);
// call tool
const toolResult = await client.callTool({
name: 'browser_navigate',
arguments: {
url: 'https://www.google.com',
},
});
console.log(toolResult);
Configuración
El servidor Browser MCP admite los siguientes argumentos. Pueden proporcionarse en la configuración JSON anterior, como parte de la lista "args":
> npx @agent-infra/mcp-server-browser@latest -h
-V, --version output the version number
--browser <browser> browser or chrome channel to use, possible values: chrome, edge, firefox.
--cdp-endpoint <endpoint> CDP endpoint to connect to, for example "http://127.0.0.1:9222/json/version"
--ws-endpoint <endpoint> WebSocket endpoint to connect to, for example "ws://127.0.0.1:9222/devtools/browser/{id}"
--executable-path <path> path to the browser executable.
--headless run browser in headless mode, headed by default
--host <host> host to bind server to. Default is localhost. Use 0.0.0.0 to bind to all interfaces.
--port <port> port to listen on for SSE and HTTP transport.
--proxy-bypass <bypass> comma-separated domains to bypass proxy, for example ".com,chromium.org,.domain.com"
--proxy-server <proxy> specify proxy server, for example "http://myproxy:3128" or "socks5://myproxy:8080"
--user-agent <ua string> specify user agent string
--user-data-dir <path> path to the user data directory.
--viewport-size <size> specify browser viewport size in pixels, for example "1280, 720"
--output-dir <path> path to the directory for output files
--vision Run server that uses screenshots (Aria snapshots are used by default)
-h, --help display help for command
Configuración de ejecución
El tiempo de ejecución del navegador requiere configuración para Viewport Size, Vision Model Coordinate Factors y User Agent. Estos pueden pasarse mediante las correspondientes cabeceras HTTP:
| Cabecera | Descripción |
|---|---|
x-viewport-size | Tamaño del viewport del navegador, formato: width,height separado por coma |
x-vision-factors | Factores del sistema de coordenadas del modelo de visión, formato: x_factor,y_factor separado por coma |
x-user-agent | Cadena User Agent, por defecto el User Agent del sistema si no se especifica |
Nota: Los nombres de las cabeceras no distinguen entre mayúsculas y minúsculas.
Ejemplo:
x-viewport-size: 1920,1080
x-vision-factors: 1.0,1.0
x-user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
Docker
Hemos unificado la implementación de VNC y MCP bajo un único endpoint de URL. ¡La imagen de Dockerfile y DockerHub se publicarán juntas! vídeo
API
Herramientas
| Nombre de la herramienta | Descripción | Parámetros |
|---|---|---|
browser_click | Hacer clic en un elemento de la página; antes de usar la herramienta, use browser_get_clickable_elements para obtener el índice del elemento, pero no llame a browser_get_clickable_elements varias veces | index (número, opcional): Índice del elemento en el que hacer clic |
browser_close | Cerrar el navegador cuando la tarea haya terminado y ya no se necesite el navegador | |
browser_close_tab | Cerrar la pestaña actual | |
browser_evaluate | Ejecutar JavaScript en la consola del navegador | script (cadena, obligatorio): Código JavaScript a ejecutar, () => { /* código */ } |
browser_form_input_fill | Rellenar un campo de entrada; antes de usar la herramienta, debe proporcionarse 'index' o 'selector' | selector (cadena, opcional): Selector CSS para el campo de entrada, prioridad al índice; si no se proporciona índice, use selector index (número, opcional): Índice del elemento a rellenar value (cadena, obligatorio): Valor a rellenar clear (booleano, opcional): Si se debe borrar el texto existente antes de rellenar |
browser_get_clickable_elements | Obtener los elementos cliqueables, flotables o seleccionables de la página actual; no llame a esta herramienta varias veces | |
browser_get_download_list | Obtener la lista de archivos descargados | |
browser_get_markdown | Obtener el contenido markdown de la página actual | |
browser_get_text | Obtener el contenido de texto de la página actual | |
browser_go_back | Volver a la página anterior | |
browser_go_forward | Avanzar a la página siguiente | |
browser_hover | Pasar el cursor sobre un elemento de la página; debe proporcionarse 'index' o 'selector' | index (número, opcional): Índice del elemento sobre el que pasar el cursor selector (cadena, opcional): Selector CSS para el elemento sobre el que pasar el cursor |
browser_navigate | Navegar a una URL | url (cadena, obligatorio): |
browser_new_tab | Abrir una nueva pestaña | url (cadena, obligatorio): URL a abrir en la nueva pestaña |
browser_press_key | Pulsar una tecla en el teclado | key (cadena, obligatorio): Nombre de la tecla a pulsar o un carácter a generar, como Enter, Tab, Escape, Backspace, Delete, Insert, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, ArrowLeft, ArrowRight, ArrowUp, ArrowDown, PageUp, PageDown, Home, End, ShiftLeft, ShiftRight, ControlLeft, ControlRight, AltLeft, AltRight, MetaLeft, MetaRight, CapsLock, PrintScreen, ScrollLock, Pause, ContextMenu |
browser_read_links | Obtener todos los enlaces de la página actual | |
browser_screenshot | Tomar una captura de pantalla de la página actual o de un elemento específico | name (cadena, opcional): Nombre para la captura de pantalla selector (cadena, opcional): Selector CSS para el elemento a capturar index (número, opcional): Índice del elemento a capturar width (número, opcional): Ancho en píxeles (por defecto: ancho del viewport) height (número, opcional): Alto en píxeles (por defecto: alto del viewport) fullPage (booleano, opcional): Captura de página completa (por defecto: false) highlight (booleano, opcional): Resaltar el elemento |
browser_scroll | Desplazarse por la página | amount (número, opcional): Píxeles a desplazar (positivo hacia abajo, negativo hacia arriba); si no se proporciona amount, se desplaza hasta el final de la página |
browser_select | Seleccionar un elemento de la página con índice; debe proporcionarse 'index' o 'selector' | index (número, opcional): Índice del elemento a seleccionar selector (cadena, opcional): Selector CSS para el elemento a seleccionar value (cadena, obligatorio): Valor a seleccionar |
browser_switch_tab | Cambiar a una pestaña específica | index (número, obligatorio): Índice de la pestaña a la que cambiar |
browser_tab_list | Obtener la lista de pestañas | |
browser_vision_screen_capture | Tomar una captura de pantalla de la página actual para el modo de visión | |
browser_vision_screen_click | Hacer clic con el botón izquierdo del ratón en la página con visión y snapshot; antes de llamar a esta herramienta, debe llamar a browser_vision_screen_capture primero solo una vez; recurra a browser_click si falla | factors (matriz, opcional): Factores de escala del sistema de coordenadas del modelo de visión [width_factor, height_factor] para la normalización del espacio de coordenadas. Fórmula de transformación: x = (x_model * screen_width * width_factor) / width_factor y = (y_model * screen_height * height_factor) / height_factor donde x_model, y_model son coordenadas normalizadas de salida del modelo (0-1), screen_width/height son las dimensiones de la pantalla, width_factor/height_factor son factores de cuantificación. Si se desconocen los factores, déjelo en blanco. La mayoría de los modelos no requieren este parámetro. x (número, obligatorio): Coordenada de píxel X y (número, obligatorio): Coordenada de píxel Y |
Recursos
| Nombre del recurso | Patrón de URI | Descripción | Tipo MIME |
|---|---|---|---|
| Registros de consola del navegador | console://logs | text/plain | |
| Descargas del navegador | download://{name} | Identificación automática según la extensión del archivo | |
| Capturas de pantalla del navegador | screenshot://{name} | Identificación automática según la extensión del archivo |
Desarrollo
Acceda a http://127.0.0.1:6274/:
npm run dev
Entrada CLI extendida
#!/usr/bin/env node
const {
BaseLogger,
setConfig,
addMiddleware,
} = require('@agent-infra/mcp-server-browser/request-context');
class CustomLogger extends BaseLogger {
info(...args) {
console.log('custom');
console.log(...args);
}
}
addMiddleware((req, res, next) => {
console.log('req', req.headers);
next();
});
setConfig({
logger: new CustomLogger(),
});
// start server
require('@agent-infra/mcp-server-browser/index');