MCP Browser Bridge
Provides a launcher script (hermes-mcp.sh) to integrate with Hermes Agent, ensuring clean execution environment for the MCP server.
Integrates with Ollama as a supported LLM provider, enabling the agent to use locally hosted models for autonomous browsing tasks.
Integrates with OpenAI as a supported LLM provider, enabling the agent to use OpenAI models for autonomous browsing tasks.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MCP Browser Bridgenavigate to google.com and search for MCP Browser Bridge"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MCP Browser Bridge
Ponte entre Model Context Protocol (MCP) e automação de navegador. 37 ferramentas. 3 modos de operação. Chrome real ou headless.
✨ Funcionalidades
37 ferramentas MCP registradas em
src/browser_mcp/tools.pyvia@app.tool(...)e expostas pelo servidor MCP emsrc/browser_mcp/server.py:18esrc/browser_mcp/server.py:24.3 modos de operação: Playwright/headless por padrão (
src/browser_mcp/browser_manager.py:126), CDP para Chrome existente (src/browser_mcp/browser_manager.py:211) e Chrome Extension via WebSocket (src/browser_mcp/browser_manager.py:252).Network monitoring com captura de request/response, filtros e exportação HAR no Playwright (
src/browser_mcp/network.py:11,src/browser_mcp/network.py:178) e no modo extensão (src/browser_mcp/extension_bridge.py:196,src/browser_mcp/extension_bridge.py:360).Indicadores visuais por injeção JavaScript em 5 componentes/fases documentáveis no código: overlay, highlight, status, ripple e segurança por cor (
src/browser_mcp/visual_indicator.py:8,src/browser_mcp/visual_indicator.py:69,src/browser_mcp/visual_indicator.py:86,src/browser_mcp/visual_indicator.py:113,src/browser_mcp/browser_manager.py:1097).Captura de erros e warnings de console no modo extensão (
extension/injected.js:96,extension/background.js:703,src/browser_mcp/tools.py:1129).Agente autônomo com loop
OBSERVE -> THINK -> CHECK -> ACT -> RECORD(src/browser_mcp/agent.py:107) exposto pela ferramentabrowser_agent_task(src/browser_mcp/tools.py:990).Accessibility tree com refs
@e1,@e2, etc. geradas pelo BrowserManager (src/browser_mcp/browser_manager.py:312) e usadas por clique, digitação e hover (src/browser_mcp/tools.py:271,src/browser_mcp/tools.py:317,src/browser_mcp/tools.py:407).Suporte multi-provedor de LLM: DeepSeek, OpenAI, Anthropic, Ollama e endpoints customizados via
LLM_BASE_URL(src/browser_mcp/llm_client.py:18,src/browser_mcp/llm_client.py:25,src/browser_mcp/llm_client.py:34,src/browser_mcp/llm_client.py:48).Stealth mode ativado por padrão com launch args, user-agent realista,
navigator.webdriverremovido e CSP bypass no contexto Playwright (src/browser_mcp/browser_manager.py:40,src/browser_mcp/browser_manager.py:49,src/browser_mcp/browser_manager.py:136,src/browser_mcp/browser_manager.py:151).Integração Hermes Agent por launcher dedicado que limpa variáveis conflitantes e executa
browser_mcp.serverno.venv(hermes-mcp.sh:5,hermes-mcp.sh:9,hermes-mcp.sh:14).
Related MCP server: Chrome MCP Server
📦 Instalação
O pacote é definido em pyproject.toml: Python >=3.11, dependências mcp, playwright, httpx, python-dotenv e websockets, extras de desenvolvimento e script browser-mcp-server (pyproject.toml:5, pyproject.toml:39, pyproject.toml:47, pyproject.toml:61).
python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
playwright install chromiumExecução direta:
python -m browser_mcp.server
# ou, após instalar o pacote:
browser-mcp-serverVariáveis úteis:
Variável | Padrão | Uso |
|
| Define se o Chromium Playwright abre sem UI ( |
|
| Viewport inicial ( |
|
| Timeout padrão em ms ( |
|
| URL do bridge WebSocket ( |
|
| Injeta overlay após navegação Playwright ( |
|
| Ativa ajustes anti-detecção ( |
|
| Provedor do agente ( |
| vazio | Chave enviada ao provedor LLM ( |
| por provedor | Modelo usado no chat ( |
| por provedor | Endpoint OpenAI-compatible customizado ( |
🚀 Uso
1. Playwright, modo padrão
O servidor inicializa BrowserManager, LLMClient e o WebSocket server opcional antes de abrir o stdio MCP (src/browser_mcp/server.py:68, src/browser_mcp/server.py:77). Em uma chamada MCP:
{
"name": "browser_navigate",
"arguments": { "url": "https://example.com" }
}{
"name": "browser_screenshot",
"arguments": { "path": "./example.png", "full_page": true }
}2. CDP, Chrome existente
Inicie o Chrome com remote debugging e conecte a ferramenta MCP:
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \
--remote-debugging-port=9222 \
--user-data-dir=/tmp/mcp-chrome-cdp{
"name": "browser_connect_to_existing",
"arguments": { "cdp_url": "http://localhost:9222" }
}Esse modo usa chromium.connect_over_cdp(...), aproveita contextos/páginas já existentes quando disponíveis e passa a marcar _mode = "cdp" (src/browser_mcp/browser_manager.py:226, src/browser_mcp/browser_manager.py:228, src/browser_mcp/browser_manager.py:245).
3. Chrome Extension, navegador real do usuário
Instale a extensão em
chrome://extensionscarregando a pastaextension/.Inicie o WebSocket standalone ou o servidor MCP:
python websocket_server_standalone.py
# ou
python manage_mcp_browser.py startConfigure na extensão o token de
~/.mcp_browser_tokene conecte:
{
"name": "browser_connect_to_extension",
"arguments": { "ws_url": "ws://localhost:8765" }
}O modo extensão usa a sessão real do Chrome via ExtensionBridge, fecha Playwright se necessário e alterna _mode = "extension" (src/browser_mcp/browser_manager.py:258, src/browser_mcp/browser_manager.py:278, src/browser_mcp/browser_manager.py:280).
🛠️ Ferramentas
Os nomes abaixo são os nomes reais registrados em src/browser_mcp/tools.py. A contagem verificada é 37.
Categoria | Ferramenta | Implementação |
Navegação |
|
|
Navegação |
|
|
Navegação |
|
|
Navegação |
|
|
Navegação |
|
|
Interação |
|
|
Interação |
|
|
Interação |
|
|
Interação |
|
|
Interação |
|
|
Interação |
|
|
Leitura |
|
|
Leitura |
|
|
Leitura |
|
|
Leitura |
|
|
Leitura |
|
|
Screenshot & Visual |
|
|
Screenshot & Visual |
|
|
Screenshot & Visual |
|
|
Screenshot & Visual |
|
|
Screenshot & Visual |
|
|
Network |
|
|
Network |
|
|
Network |
|
|
Network |
|
|
Network |
|
|
Network |
|
|
Network |
|
|
Console |
|
|
Sessão |
|
|
Sessão |
|
|
Sessão |
|
|
Sessão |
|
|
Agente |
|
|
Agente |
|
|
Accessibility |
|
|
JavaScript |
|
|
Observações verificáveis:
Não há ferramenta MCP pública chamada
browser_scroll; a extensão tem helper internoscrollemsrc/browser_mcp/extension_bridge.py:162, mas ele não é registrado emtools.py.browser_get_visible_textebrowser_get_interactive_elementsexistem como métodos auxiliares do BrowserManager (src/browser_mcp/browser_manager.py:980,src/browser_mcp/browser_manager.py:1009), mas não como ferramentas MCP públicas.browser_get_console_errorsrequer modo extensão, porque chamaextension_get_console_errors(src/browser_mcp/browser_manager.py:1067).
🔌 Integração com Hermes Agent
Use o launcher do projeto:
./hermes-mcp.shEle entra no diretório do projeto, limpa PYTHONPATH, PYTHONSTARTUP e VIRTUAL_ENV, e executa .venv/bin/python -s -m browser_mcp.server (hermes-mcp.sh:5, hermes-mcp.sh:9, hermes-mcp.sh:14). Isso evita misturar pacotes do ambiente Hermes com o Python do .venv.
Para usar no Hermes Agent, configure o engine de browser para MCP no lado do Hermes (browser.engine=mcp) e aponte o comando do MCP server para hermes-mcp.sh. Este repositório fornece o servidor e o launcher; a leitura de browser.engine=mcp é responsabilidade do Hermes, não deste pacote.
🏗️ Arquitetura
Fluxo principal:
MCP Client
-> MCP Server stdio (src/browser_mcp/server.py)
-> ToolRegistry (src/browser_mcp/tools.py)
-> BrowserManager
-> Playwright Chromium
-> Chrome via CDP
-> ExtensionBridge -> WebSocketServer -> Chrome Extension MV3 -> Chrome realO servidor MCP usa mcp.server.Server, registra handlers list_tools e call_tool, inicia componentes opcionais e roda via stdio (src/browser_mcp/server.py:15, src/browser_mcp/server.py:18, src/browser_mcp/server.py:24, src/browser_mcp/server.py:77).
O WebSocket server escuta em localhost:8765, usa implementação built-in em asyncio por padrão, implementa handshake/frame WebSocket compatível com RFC 6455, valida Origin, exige token e encaminha comandos/respostas entre servidor e extensão (src/browser_mcp/websocket_server.py:71, src/browser_mcp/websocket_server.py:97, src/browser_mcp/websocket_server.py:174, src/browser_mcp/websocket_server.py:180, src/browser_mcp/websocket_server.py:202, src/browser_mcp/websocket_server.py:228, src/browser_mcp/websocket_server.py:516).
A extensão Chrome é Manifest V3, usa service worker, content script em <all_urls>, permissões activeTab, tabs, storage, scripting, alarms e debugger, e expõe injected.js como recurso acessível (extension/manifest.json:4, extension/manifest.json:6, extension/manifest.json:17, extension/manifest.json:20, extension/manifest.json:42).
O switch de comandos da extensão tem 21 comandos no código atual, não 20: navigate, new_tab, click, type, screenshot, get_content, execute_javascript, get_dom_snapshot, press_key, get_url, get_title, go_back, go_forward, reload, get_visible_text, get_interactive_elements, get_attributes, wait, list_tabs, activate_tab, manage_session (extension/background.js:200 a extension/background.js:572).
🔐 Segurança
Token auth no WebSocket: token em
~/.mcp_browser_token, criado comsecrets.token_urlsafe(32)e permissões0600(src/browser_mcp/websocket_server.py:48,src/browser_mcp/websocket_server.py:51,src/browser_mcp/websocket_server.py:61,src/browser_mcp/websocket_server.py:63).Validação de Origin: conexões com
Origindiferente dechrome-extension://...recebem403 Forbidden(src/browser_mcp/websocket_server.py:202).Formas de autenticação aceitas: bearer token, subprotocolo
mcp-token.*ou query string?token=...(src/browser_mcp/websocket_server.py:210,src/browser_mcp/websocket_server.py:215,src/browser_mcp/websocket_server.py:221).Comparação constante: token validado com
hmac.compare_digest(...)(src/browser_mcp/websocket_server.py:228).Limite de payload: frames maiores que 64 MiB são rejeitados (
src/browser_mcp/websocket_server.py:46,src/browser_mcp/websocket_server.py:331).CSP bypass no modo extensão:
execute_javascripttentachrome.scripting.executeScript; se CSP bloqueareval, usachrome.debuggercomRuntime.evaluate(extension/background.js:300,extension/background.js:321,extension/background.js:635).
📊 Métricas
Estado verificado neste checkout:
37 ferramentas MCP em
src/browser_mcp/tools.py.43 testes coletáveis em
tests/comenv -u PYTHONPATH -u PYTHONSTARTUP -u VIRTUAL_ENV .venv/bin/pytest --collect-only -q.mypy configurado em
pyproject.tomlcomdisallow_untyped_defs = true, mas a execução atual deenv -u PYTHONPATH -u PYTHONSTARTUP -u VIRTUAL_ENV .venv/bin/mypy srcreporta 43 erros. Portanto, não é correto afirmar “mypy strict: 0 errors” neste estado.ruff configurado em
pyproject.toml, masenv -u PYTHONPATH -u PYTHONSTARTUP -u VIRTUAL_ENV .venv/bin/ruff check src testsreporta 12 erros. Portanto, não é correto afirmar “ruff: 0 errors” neste estado.Metadados de pacote presentes para wheel/sdist via Hatchling e script
browser-mcp-server(pyproject.toml:1,pyproject.toml:61,pyproject.toml:64,pyproject.toml:67).
📄 Licença
MIT (LICENSE).
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- 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/flpccabral/mcp-browser'
If you have feedback or need assistance with the MCP directory API, please join our Discord server