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

NPM Downloads smithery badge codecov

Install MCP Server Install in VS Code Install in VS Code Insiders

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:

CabeceraDescripción
x-viewport-sizeTamaño del viewport del navegador, formato: width,height separado por coma
x-vision-factorsFactores del sistema de coordenadas del modelo de visión, formato: x_factor,y_factor separado por coma
x-user-agentCadena 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 herramientaDescripciónParámetros
browser_clickHacer 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 vecesindex (número, opcional): Índice del elemento en el que hacer clic
browser_closeCerrar el navegador cuando la tarea haya terminado y ya no se necesite el navegador
browser_close_tabCerrar la pestaña actual
browser_evaluateEjecutar JavaScript en la consola del navegadorscript (cadena, obligatorio): Código JavaScript a ejecutar, () => { /* código */ }
browser_form_input_fillRellenar 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_elementsObtener los elementos cliqueables, flotables o seleccionables de la página actual; no llame a esta herramienta varias veces
browser_get_download_listObtener la lista de archivos descargados
browser_get_markdownObtener el contenido markdown de la página actual
browser_get_textObtener el contenido de texto de la página actual
browser_go_backVolver a la página anterior
browser_go_forwardAvanzar a la página siguiente
browser_hoverPasar 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_navigateNavegar a una URLurl (cadena, obligatorio):
browser_new_tabAbrir una nueva pestañaurl (cadena, obligatorio): URL a abrir en la nueva pestaña
browser_press_keyPulsar una tecla en el tecladokey (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_linksObtener todos los enlaces de la página actual
browser_screenshotTomar una captura de pantalla de la página actual o de un elemento específiconame (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_scrollDesplazarse por la páginaamount (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_selectSeleccionar 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_tabCambiar a una pestaña específicaindex (número, obligatorio): Índice de la pestaña a la que cambiar
browser_tab_listObtener la lista de pestañas
browser_vision_screen_captureTomar una captura de pantalla de la página actual para el modo de visión
browser_vision_screen_clickHacer 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 fallafactors (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 recursoPatrón de URIDescripciónTipo MIME
Registros de consola del navegadorconsole://logstext/plain
Descargas del navegadordownload://{name}Identificación automática según la extensión del archivo
Capturas de pantalla del navegadorscreenshot://{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');