MCP server que permite a qualquer agente de IA controlar um navegador real via Playwright. 17 tools Windows / Linux / macOS
| Dependência | Versão mínima | Verificar |
|---|---|---|
| Node.js | 18+ | node -v |
| npm | 9+ | npm -v |
| Playwright | 1.50+ | npx playwright --version |
# Opção A — git clone
git clone https://git.jf.eng.br/jfeng/MCP-Browser.git
cd MCP-Browser
# Opção B — copiar a pasta manualmente para qualquer diretório
npm install
npx playwright install chromium
sudo npx playwright install-deps chromium
node server.js
O servidor inicia e aguarda conexão via stdin/stdout (MCP stdio transport). Não aparece nada no terminal — isso é normal.
MCP-Browser/
├── server.js ← servidor MCP (entry point)
├── browser.js ← engine Playwright (singleton)
├── package.json
├── package-lock.json
├── docs.html ← esta documentação
├── node_modules/
└── tools/
├── openUrl.js ← abre URL (reusa aba se mesmo domínio)
├── click.js ← clica por seletor CSS
├── type.js ← digita texto em campo
├── screenshot.js ← captura screenshot
├── getText.js ← extrai texto da página
├── getLinks.js ← lista todos os links
├── getButtons.js ← lista botões disponíveis
├── getForms.js ← lista formulários e campos
├── extractElements.js ← extrai elementos com atributos
├── waitForSelector.js ← espera elemento aparecer
├── smartClick.js ← clica por texto visível
├── smartType.js ← digita por label/placeholder
├── fillFormAuto.js ← preenche formulário automaticamente
├── smartWaitNavigation.js ← espera navegação
├── agentFlow.js ← fluxo automático simples
├── agentFlowV2.js ← fluxo com retry e fallback
└── closeBrowser.js ← fecha o navegador
opencode mcp add
meu-navegadorLocalnode /caminho/absoluto/MCP-Browser/server.jsopencode mcp list.cursor/mcp.json no projeto).~/.cursor/mcp.json (global) ou .cursor/mcp.json (projeto):{
"mcpServers": {
"browser": {
"command": "node",
"args": ["/caminho/absoluto/MCP-Browser/server.js"]
}
}
}
%APPDATA%\Claude\claude_desktop_config.json~/Library/Application Support/Claude/claude_desktop_config.json~/.config/Claude/claude_desktop_config.json{
"mcpServers": {
"browser": {
"command": "node",
"args": ["/caminho/absoluto/MCP-Browser/server.js"]
}
}
}
~/.windsurf/mcp.json:{
"mcpServers": {
"browser": {
"command": "node",
"args": ["/caminho/absoluto/MCP-Browser/server.js"]
}
}
}
browsernode["/caminho/absoluto/MCP-Browser/server.js"]mcp.json.browserstdionode /caminho/absoluto/MCP-Browser/server.js.vscode/mcp.json no workspace ou settings.json global.{
"mcpServers": {
"browser": {
"command": "node",
"args": ["/caminho/absoluto/MCP-Browser/server.js"]
}
}
}
Se a plataforma suporta MCP stdio transport, use:
Comando: node
Argumento: /caminho/absoluto/MCP-Browser/server.js
Transport: stdio
O servidor comunica via stdin/stdout — não precisa porta, não precisa daemon.
| Sistema | Formato do caminho | Exemplo |
|---|---|---|
| Windows | Use / ou \\ | C:/Users/seuuser/mcp-browser/server.js |
| macOS | Unix path | /Users/seuuser/mcp-browser/server.js |
| Linux | Unix path | /home/seuuser/mcp-browser/server.js |
\ simples nos caminhos. Sempre / ou \\.
| # | Tool | Descrição | Parâmetros |
|---|---|---|---|
| 1 | open_url | Abre uma URL no navegador | url (string, obrigatório) |
| 2 | click | Clica em elemento por seletor CSS | selector (string, obrigatório) |
| 3 | type | Digita texto em um campo | selector, text |
| 4 | screenshot | Captura screenshot da página | fullPage (bool, opcional) |
| 5 | get_text | Extrai texto da página | selector (opcional, padrão: body) |
| 6 | get_links | Lista todos os links | selector (opcional, padrão: a) |
| 7 | wait_for_selector | Espera elemento aparecer no DOM | selector, timeout |
| 8 | extract_elements | Extrai elementos com atributos | selector, attributes (array) |
| 9 | smart_click | Clica pelo texto visível | text (string, obrigatório) |
| 10 | smart_type | Digita buscando por label/placeholder | label, text |
| 11 | get_buttons | Lista botões disponíveis | — |
| 12 | smart_wait_navigation | Espera mudança de URL | timeout (opcional) |
| 13 | get_forms | Lista formulários e seus campos | — |
| 14 | fill_form_auto | Preenche formulário automaticamente | data (objeto, obrigatório) |
| 15 | agent_flow | Fluxo automático simples | goal, data (opcional) |
| 16 | agent_flow_v2 | Fluxo com retry e fallback | goal, data, retries |
| 17 | close_browser | Fecha o navegador | — |
open_url("https://example.com")
get_text()
get_links()
screenshot()
open_url("https://site.com/login")
fill_form_auto({"email": "user@test.com", "password": "1234"})
smart_click("Entrar")
smart_wait_navigation()
get_text()
open_url("https://site.com/produtos")
extract_elements(".produto", ["href", "data-id", "class"])
open_url("https://site.com/contato")
smart_type("nome", "João Silva")
type("#email", "joao@email.com")
smart_type("mensagem", "Olá, quero mais informações")
smart_click("Enviar")
browser.js e mude headless: true.close_browser quando terminar. O navegador não fecha sozinho.| Problema | Solução |
|---|---|
| Tools não aparecem na plataforma | Reiniciar a IDE/plataforma após configurar o MCP. |
node: command not found |
Instalar Node.js 18+ e garantir que está no PATH. |
| Playwright não encontra Chromium | npx playwright install chromium |
| Erro de permissão no Linux | sudo npx playwright install-deps chromium |
| Página não carrega (conteúdo vazio) | O servidor aguarda domcontentloaded + 1.5s. Se a página usa JS pesado, aumente o timeout em browser.js. |
Erro ECONNREFUSED |
O servidor MCP usa stdio (stdin/stdout), não HTTP. Verifique se o comando está correto. |
| Caminho com espaços no Windows | Use aspas: "C:/Users/Meu Usuario/mcp/server.js" |
MIT — uso livre.