Browser MCP

Servidor Browser MCP para agentes de IA automatizarem páginas web com Puppeteer, ações baseadas na árvore de acessibilidade, modo de visão opcional e controle de navegador multiplataforma.

Documentação

Servidor MCP Browser Use

NPM Downloads smithery badge codecov

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

Um servidor Model Context Protocol (MCP) rápido e leve que capacita LLMs com automação de navegador via dados de acessibilidade estruturados do Puppeteer, com modo de visão opcional para compreensão visual complexa e configuração flexível e multiplataforma.

Principais Recursos

  • ⚡ Rápido e leve. Utiliza o índice de rótulos do Puppeteer, não entrada baseada em pixels e árvore DOM de acessibilidade.
  • 👁️ Suporte ao Modo de Visão. Capacidades opcionais de compreensão visual para layouts complexos e elementos visuais quando os dados estruturados não são suficientes.
  • 🤖 Otimizado para LLM. Nenhum modelo de visão necessário, opera puramente em dados estruturados, menos contexto reduzindo o uso de tokens de contexto.
  • 🧩 Configuração Flexível em Tempo de Execução. Personalize o tamanho do viewport, fatores do sistema de coordenadas e User-Agent em tempo de execução via cabeçalhos HTTP.
  • 🌐 Multiplataforma e Extensível. Suporte para navegadores remotos e locais, uso de um mecanismo de navegador personalizado.

Requisitos

  • Node.js 18 ou mais recente
  • VS Code, Cursor, Windsurf, Claude Desktop ou qualquer outro cliente MCP

Primeiros passos

Local (Stdio)

Primeiro, instale o servidor Browser MCP com seu cliente. Uma configuração típica é assim:

{
  "mcpServers": {
    "browser": {
      "command": "npx",
      "args": [
        "@agent-infra/mcp-server-browser@latest"
      ]
    }
  }
}
Instalar no VS Code

Você também pode instalar o servidor Browser MCP usando a CLI do VS Code:

# For VS Code
code --add-mcp '{"name":"browser","command":"npx","args":["@agent-infra/mcp-server-browser@latest"]}'

Após a instalação, o servidor Browser MCP estará disponível para uso com seu agente GitHub Copilot no VS Code.

Instalar no Cursor

Vá para Cursor Settings -> MCP -> Add new MCP Server. Dê um nome de sua preferência, use o tipo command com o comando npx @agent-infra/mcp-server-browser. Você também pode verificar a configuração ou adicionar argumentos como comando clicando em Edit.

{
  "mcpServers": {
    "browser": {
      "command": "npx",
      "args": [
        "@agent-infra/mcp-server-browser@latest"
      ]
    }
  }
}
Instalar no Windsurf

Siga a documentação do Windsuff MCP. Use a seguinte configuração:

{
  "mcpServers": {
    "browser": {
      "command": "npx",
      "args": [
        "@agent-infra/mcp-server-browser@latest"
      ]
    }
  }
}
Instalar no Claude Desktop

Siga o guia de instalação do MCP, use a seguinte configuração:

{
  "mcpServers": {
    "browser": {
      "command": "npx",
      "args": [
        "@agent-infra/mcp-server-browser@latest"
      ]
    }
  }
}

Remoto (SSE / Streamable HTTP)

Ao mesmo tempo, use o argumento --port $your_port para iniciar o browser mcp pode ser convertido em servidor SSE e 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

Você pode usar um dos dois endpoints remotos do servidor MCP:

  • Streamable HTTP (Recomendado): http://127.0.0.1::8089/mcp
  • SSE: http://127.0.0.1::8089/sse

E então na configuração do cliente MCP, defina o url para o endpoint SSE:

{
  "mcpServers": {
    "browser": {
      "url": "http://127.0.0.1::8089/sse"
    }
  }
}

url para o Streamable HTTP:

{
  "mcpServers": {
    "browser": {
      "type": "streamable-http", // If there is MCP Client support
      "url": "http://127.0.0.1::8089/mcp"
    }
  }
}

Chamada em memória

Se o seu cliente MCP for desenvolvido com base em JavaScript / TypeScript, você pode usar diretamente chamadas em processo para evitar que seus usuários precisem instalar a interface de linha de comando para usar o 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);

Configuração

O servidor Browser MCP suporta os seguintes argumentos. Eles podem ser fornecidos na configuração JSON acima, como parte da 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

Configuração em Tempo de Execução

O tempo de execução do navegador requer configuração para Viewport Size, Vision Model Coordinate Factors e User Agent. Eles podem ser passados através dos cabeçalhos HTTP correspondentes:

HeaderDescription
x-viewport-sizeTamanho do viewport do navegador, formato: width,height separado por vírgula
x-vision-factorsFatores do sistema de coordenadas do modelo de visão, formato: x_factor,y_factor separado por vírgula
x-user-agentString de User Agent, padrão é o User Agent do sistema se não especificado

Nota: Os nomes dos cabeçalhos não diferenciam maiúsculas de minúsculas.

Exemplo:

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

Unificamos a implantação de VNC e MCP sob um único endpoint de URL. O Dockerfile e a imagem do DockerHub serão publicados juntos! vídeo

API

Ferramentas

Tool NameDescriptionParameters
browser_clickClique em um elemento na página, antes de usar a ferramenta, use browser_get_clickable_elements para obter o índice do elemento, mas não chame browser_get_clickable_elements várias vezesindex (número, opcional): Índice do elemento para clicar
browser_closeFeche o navegador quando a tarefa estiver concluída e o navegador não for mais necessário
browser_close_tabFeche a aba atual
browser_evaluateExecute JavaScript no console do navegadorscript (string, obrigatório): Código JavaScript para executar, () => { /* code */ }
browser_form_input_fillPreencha um campo de entrada, antes de usar a ferramenta, é necessário fornecer 'index' ou 'selector'selector (string, opcional): Seletor CSS para o campo de entrada, priorize o uso do index, se o index não for fornecido, use o selector
index (número, opcional): Índice do elemento para preencher
value (string, obrigatório): Valor para preencher
clear (boolean, opcional): Se deve limpar o texto existente antes de preencher
browser_get_clickable_elementsObtenha os elementos clicáveis, hoveráveis ou selecionáveis na página atual, não chame esta ferramenta várias vezes
browser_get_download_listObtenha a lista de arquivos baixados
browser_get_markdownObtenha o conteúdo markdown da página atual
browser_get_textObtenha o conteúdo de texto da página atual
browser_go_backVolte para a página anterior
browser_go_forwardAvance para a próxima página
browser_hoverPasse o mouse sobre um elemento na página, é necessário fornecer 'index' ou 'selector'index (número, opcional): Índice do elemento para passar o mouse
selector (string, opcional): Seletor CSS para o elemento para passar o mouse
browser_navigateNavegue para uma URLurl (string, obrigatório):
browser_new_tabAbra uma nova abaurl (string, obrigatório): URL para abrir na nova aba
browser_press_keyPressione uma tecla no tecladokey (string, obrigatório): Nome da tecla a pressionar ou um caractere a gerar, 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_linksObtenha todos os links na página atual
browser_screenshotTire uma captura de tela da página atual ou de um elemento específiconame (string, opcional): Nome para a captura de tela
selector (string, opcional): Seletor CSS para o elemento a capturar
index (número, opcional): índice do elemento a capturar
width (número, opcional): Largura em pixels (padrão: largura do viewport)
height (número, opcional): Altura em pixels (padrão: altura do viewport)
fullPage (boolean, opcional): Captura de tela da página inteira (padrão: false)
highlight (boolean, opcional): Destacar o elemento
browser_scrollRole a páginaamount (número, opcional): Pixels para rolar (positivo para baixo, negativo para cima), se o valor não for fornecido, role até o final da página
browser_selectSelecione um elemento na página com índice, é necessário fornecer 'index' ou 'selector'index (número, opcional): Índice do elemento para selecionar
selector (string, opcional): Seletor CSS para o elemento a selecionar
value (string, obrigatório): Valor para selecionar
browser_switch_tabMude para uma aba específicaindex (número, obrigatório): Índice da aba para a qual mudar
browser_tab_listObtenha a lista de abas
browser_vision_screen_captureTire uma captura de tela da página atual para o modo de visão
browser_vision_screen_clickClique com o botão esquerdo do mouse na página com visão e snapshot, antes de chamar esta ferramenta, você deve chamar browser_vision_screen_capture primeiro apenas uma vez, fallback para browser_click se falharfactors (array, opcional): Fatores de escala do sistema de coordenadas do modelo de visão [width_factor, height_factor] para normalização do espaço de coordenadas. Fórmula de transformação: x = (x_model * screen_width * width_factor) / width_factor y = (y_model * screen_height * height_factor) / height_factor onde x_model, y_model são coordenadas de saída do modelo normalizadas (0-1), screen_width/height são dimensões da tela, width_factor/height_factor são fatores de quantização. Se os fatores forem desconhecidos, deixe em branco. A maioria dos modelos não requer este parâmetro.
x (número, obrigatório): Coordenada X em pixels
y (número, obrigatório): Coordenada Y em pixels

Recursos

Resource NameURI PatternDescriptionMIME Type
Logs do console do navegadorconsole://logstext/plain
Downloads do navegadordownload://{name}Identificação automática baseada na extensão do arquivo
Capturas de tela do navegadorscreenshot://{name}Identificação automática baseada na extensão do arquivo

Desenvolvimento

Acesse http://127.0.0.1:6274/:

npm run dev

Entrada CLI Estendida

#!/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');