
Servidor Model Context Protocol para Firefox DevTools - permite que assistentes de IA inspecionem e controlem o navegador Firefox através do Remote Debugging Protocol
Servidor Model Context Protocol para automatizar o Firefox via WebDriver BiDi (através do Selenium WebDriver). Funciona com Claude Code, Claude Desktop, Cursor, Cline e outros clientes MCP.
Repositório: https://github.com/mozilla/firefox-devtools-mcp
Nota: Este servidor MCP requer uma instalação local do navegador Firefox e não pode ser executado em serviços de hospedagem em nuvem como glama.ai. Use
npx @mozilla/firefox-devtools-mcp@latestpara executar localmente, ou use Docker com o Dockerfile fornecido.
Servidores MCP de navegador apresentam riscos inerentes. Algumas práticas essenciais:
basic já inclui evaluate_script; --tool-preset slim o remove. Presets mais altos como --tool-preset developer (depuração, rede, console, profiler) e --tool-preset mozilla (contexto privilegiado) expandem ainda mais o que o agente pode fazer.Consulte SECURITY.md para uma análise completa dos riscos e como reportar vulnerabilidades.
--firefox-path)Recomendado: use npx para executar a versão publicada mais recente do npm.
claude mcp add firefox-devtools npx @mozilla/firefox-devtools-mcp@latest
# Headless + viewport via argumentos
claude mcp add firefox-devtools npx @mozilla/firefox-devtools-mcp@latest -- --headless --viewport 1280x720
# Ou via variáveis de ambiente
claude mcp add firefox-devtools npx @mozilla/firefox-devtools-mcp@latest \
--env START_URL=https://example.com \
--env FIREFOX_HEADLESS=true
codex mcp add firefox-devtools -- npx @mozilla/firefox-devtools-mcp@latest
# Headless + viewport via argumentos
codex mcp add firefox-devtools -- \
npx @mozilla/firefox-devtools-mcp@latest -- --headless --viewport 1280x720
# Ou via variáveis de ambiente
codex mcp add firefox-devtools \
--env START_URL=https://example.com \
--env FIREFOX_HEADLESS=true \
-- npx @mozilla/firefox-devtools-mcp@latest
Adicione ao mcp_settings.json do Claude Code:
{
"mcpServers": {
"firefox-devtools": {
"command": "npx",
"args": ["-y", "@mozilla/firefox-devtools-mcp@latest", "--headless", "--viewport", "1280x720"],
"env": {
"START_URL": "about:blank"
}
}
}
}
Adicione ao ~/.codex/config.toml:
[mcp_servers.firefox-devtools]
command = "npx"
args = ["-y", "@mozilla/firefox-devtools-mcp@latest", "--headless", "--viewport", "1280x720"]
[mcp_servers.firefox-devtools.env]
START_URL = "about:blank"
npm run setup
# Escolha Claude Code; o script salva o JSON no caminho correto
npx @modelcontextprotocol/inspector npx @mozilla/firefox-devtools-mcp@latest --start-url https://example.com --headless
Em seguida, chame ferramentas como:
list_pages, select_page, navigate_pagetake_snapshot e depois click_by_uid / fill_by_uidlist_network_requests (captura sempre ativa), get_network_requestlist_downloads (captura sempre ativa), set_download_behaviorscreenshot_page, list_console_messagesVocê pode passar flags ou variáveis de ambiente (nomes à direita):
--firefox-path — caminho absoluto para o binário do Firefox--headless — executar sem interface gráfica (FIREFOX_HEADLESS=true)--viewport 1280x720 — tamanho inicial da janela--profile-path — usar um perfil Firefox específico--firefox-arg — argumentos extras do Firefox (repetível)--start-url — abrir esta URL na inicialização (START_URL)--accept-insecure-certs — ignorar erros de TLS (ACCEPT_INSECURE_CERTS=true)--connect-existing — anexar a um Firefox já em execução em vez de iniciar um novo (CONNECT_EXISTING=true)--marionette-port — porta Marionette para o modo connect-existing, padrão 2828 ()As ferramentas são agrupadas em módulos. Você escolhe quais módulos expor com um preset nomeado
(--tool-preset) ou com uma lista explícita (--tools). Quando ambos são fornecidos, --tools tem
precedência e o preset é ignorado.
Módulos: pages, snapshot, input, network, console, screenshot, downloads,
utilities, management, webextension, profiler, screencast, script, debugging,
prefs, privileged.
Presets (cada um é um superconjunto do anterior):
slim — pages, snapshot, input, screenshotbasic (padrão) — slim mais downloads, script, utilities, management, webextension, screencastdeveloper — basic mais debugging, , , Observe que basic, o padrão, inclui script e, portanto, a ferramenta evaluate_script.
Consulte SECURITY.md para entender o que isso significa para a
superfície de ataque, e use --tool-preset slim ou uma lista --tools explícita para removê-la.
# Use o preset developer (adiciona ferramentas de rede, console, depuração e profiler)
npx @mozilla/firefox-devtools-mcp --tool-preset developer
# Ative apenas os módulos que você precisa
npx @mozilla/firefox-devtools-mcp --tools pages network console
Os módulos prefs e privileged requerem MOZ_REMOTE_ALLOW_SYSTEM_ACCESS=1 e estão disponíveis
apenas no build interno da Mozilla. O pacote público os ignora mesmo se solicitados e
registra um aviso nomeando os módulos que descartou.
--pref)Use --android-device para automatizar o Firefox em execução em um dispositivo Android. Requer adb no seu PATH e geckodriver, que é gerenciado automaticamente.
Aviso: O modo Android apaga todos os dados do aplicativo alvo antes de cada sessão. Abas, histórico, favoritos, senhas, cookies e configurações são todos perdidos. O geckodriver executa
adb shell pm clear <package>ao criar a sessão e não oferece como pular essa etapa, depois executa a sessão em seu próprio perfil temporário que é excluído em seguida. Por isso,--android-devicerequer--android-wipe-app-data, e você deve instalar um build dedicado à automação em vez de automatizar o navegador que você usa. Bug 2064088 acompanha a adição de uma opção ao geckodriver para manter os dados existentes do aplicativo.
# Liste dispositivos conectados
adb devices
# Inicie o Firefox para Android no único dispositivo conectado
npx @mozilla/firefox-devtools-mcp --android-device auto --android-wipe-app-data
# Direcione um dispositivo específico
npx @mozilla/firefox-devtools-mcp --android-device <serial> --android-wipe-app-data
# Use o Firefox Nightly em vez disso
npx @mozilla/firefox-devtools-mcp --android-device <serial> --android-package org.mozilla.fenix --android-wipe-app-data
O encaminhamento de portas entre o host e o dispositivo é tratado automaticamente pelo geckodriver.
Use --connect-existing para automatizar sua sessão real de navegação, com cookies, logins e abas abertas intactos:
# Inicie o Firefox com Marionette e o Remote Agent (BiDi)
firefox --marionette --remote-debugging-port
# Execute o servidor MCP
npx @mozilla/firefox-devtools-mcp --connect-existing --marionette-port 2828
Ambas as flags são necessárias porque o MCP usa tanto WebDriver Classic (--marionette) quanto WebDriver BiDi (--remote-debugging-port). Se o Firefox for iniciado apenas com --marionette, o servidor MCP falha ao conectar e pede que você reinicie o Firefox com ambas as flags.
Aviso: Não deixe o Marionette ativado durante a navegação normal. Ele define
navigator.webdriver = truee altera outros sinais de impressão digital do navegador, o que pode acionar a detecção de bots em sites protegidos por Cloudflare, Akamai, etc. Ative o Marionette apenas quando precisar de automação MCP e reinicie o Firefox normalmente depois.
Consulte docs/tools.md para a lista completa de ferramentas por módulo, com descrições e parâmetros (gerados a partir do código-fonte).
saveTo opcional)saveTo opcional)saveTo opcional)saveTo opcional)saveTo opcional para ambientes CLI)sandbox opcional para um realm isolado; saveTo opcional para resultados volumosos)MOZ_REMOTE_ALLOW_SYSTEM_ACCESS=1)MOZ_REMOTE_ALLOW_SYSTEM_ACCESS=1)MOZ_REMOTE_ALLOW_SYSTEM_ACCESS=1)A saída grande de ferramentas pode consumir contexto significativo em clientes CLI como o Claude Code. As
ferramentas screenshot_page, screenshot_by_uid, take_snapshot, list_console_messages,
list_network_requests, get_network_request, get_page_text,
evaluate_script e
evaluate_privileged_script aceitam um parâmetro opcional saveTo que grava o
resultado em um arquivo em vez de retorná-lo inline. saveTo aceita uma de três formas:
~/.firefox-devtools-mcp; os diretórios pai são criados)true (um arquivo com carimbo de data/hora é gerado em ~/.firefox-devtools-mcp/output/)A resposta retorna o caminho e o tamanho em bytes. O arquivo salvo sempre contém os dados completos, sem truncamento: as proteções de tamanho inline (limites de mensagens do console, truncamento de cabeçalhos de rede, limites de linhas do snapshot) nunca se aplicam a ele.
As ferramentas que produzem texto (todas exceto as capturas de tela) também aceitam preview, um número
de caracteres da saída salva para ecoar inline como um pequeno trecho. Capturas de tela não têm preview.
screenshot_page({ saveTo: "page.png" })
take_snapshot({ saveTo: true })
list_network_requests({ urlContains: "api", saveTo: "network.json" })
evaluate_script({ function: "() => performance.getEntries()", saveTo: true, preview: 2000 })
Por padrão, os caminhos de salvamento são restritos: caminhos relativos são resolvidos em relação ao diretório
de trabalho atual, e caminhos absolutos só são permitidos dentro de ~/.firefox-devtools-mcp. Caminhos que
escapam desses locais são rejeitados. Inicie o servidor com --unrestricted-save-paths para
gravar em locais arbitrários, incluindo caminhos absolutos fora desse diretório.
Os arquivos salvos podem então ser visualizados, por exemplo, com a ferramenta Read do Claude Code, sem impactar o tamanho do contexto.
npm install
npm run build
# Execute com Inspector contra o build local
npx @modelcontextprotocol/inspector node dist/index.js --headless --viewport 1280x720
# Ou execute em desenvolvimento com hot reload
npm run inspector:dev
Consulte CONTRIBUTING.md para mais detalhes sobre desenvolvimento local, testes e CI.
--firefox-path "/Applications/Firefox.app/Contents/MacOS/firefox" (macOS) ou o caminho correto no seu sistema operacional.take_snapshot) quando uma ferramenta de UID relatar que um não existe mais.Solução 1 Envolva com cmd /c (detalhes):
"mcpServers": {
"firefox-devtools": {
"command": "cmd",
"args": ["/c", "npx", "-y", "@mozilla/firefox-devtools-mcp@latest"]
}
}
Solução 2 Use o caminho absoluto para npx (ajuste a extensão — .cmd, .bat, .exe ou .ps1 — para corresponder à sua configuração):
0.x. Use @latest com npx para a versão mais recente.Consulte CONTRIBUTING.md para saber como relatar problemas, executar testes e trabalhar no projeto localmente.
Mantido pela Mozilla.
Licenciado sob MIT ou Apache 2.0, à sua escolha.
MARIONETTE_PORT--pref name=value — definir preferência do Firefox na inicialização via moz:firefoxOptions (repetível)--tool-preset — selecionar quais módulos de ferramentas ativar: slim, basic (padrão), developer, mozilla ou all. Consulte Módulos de ferramentas e presets. (TOOL_PRESET)--tools — lista explícita de módulos de ferramentas a ativar, substituindo completamente --tool-preset (ex.: --tools pages network script). Consulte Módulos de ferramentas e presets.--enable-script — obsoleto, use --tool-preset developer ou --tools ... script debugging. Seleciona o preset de ferramentas developer. (ENABLE_SCRIPT=true)--enable-privileged-context — obsoleto, use --tool-preset mozilla ou --tools ... privileged prefs. Seleciona o preset de ferramentas mozilla. Requer MOZ_REMOTE_ALLOW_SYSTEM_ACCESS=1 (ENABLE_PRIVILEGED_CONTEXT=true)--android-device — ativar o modo Firefox para Android; o valor é o serial do dispositivo ADB (ex.: emulator-5554). Execute adb devices para listar dispositivos conectados. Omita o valor ou use auto para selecionar automaticamente o único dispositivo conectado.--android-wipe-app-data — confirmar que o modo Android apaga todos os dados do aplicativo alvo. Necessário junto com --android-device. (ANDROID_WIPE_APP_DATA=true)--android-package — nome do pacote do aplicativo Android, padrão org.mozilla.firefox. Outros pacotes: org.mozilla.firefox_beta para Firefox Beta, org.mozilla.fenix para Firefox Nightly, org.mozilla.fenix.debug para Firefox Nightly Debug, org.mozilla.geckoview_example para geckoview (ANDROID_PACKAGE)--unrestricted-save-paths — permitir que o parâmetro saveTo grave em qualquer lugar do disco em vez das raízes padrão. Consulte Salvando saída volumosa em disco e a nota de segurança em SECURITY.md. (UNRESTRICTED_SAVE_PATHS=true)--log-file — gravar logs do servidor MCP em um arquivo em vez de stderr. Útil para sessões de depuração com clientes MCP que ocultam a saída do servidor. Defina DEBUG=* para também incluir logs de depuração detalhados. Exemplo: --log-file /tmp/firefox-mcp.lognetworkconsoleprofilermozilla — developer mais prefs, privilegedall — todos os módulos"mcpServers": {
"firefox-devtools": {
"command": "C:\\nvm4w\\nodejs\\npx.ps1",
"args": ["-y", "@mozilla/firefox-devtools-mcp@latest"]
}
}