firefox-devtools-mcp
oficialServidor do Model Context Protocol para Firefox DevTools - permite que assistentes de IA inspecionem e controlem o navegador Firefox através do Protocolo de Depuração Remota
O que você pode fazer com Firefox DevTools MCP?
- Navegação agêntica — Peça ao seu assistente para navegar por páginas, preencher formulários e concluir fluxos de trabalho de várias etapas usando
take_snapshot,click_by_uidefill_by_uid. - Inspeção de desenvolvimento web — Faça o assistente carregar sua página e inspecionar mensagens de console, requisições de rede e downloads via
list_console_messages,list_network_requestselist_downloads. - Avaliação de JavaScript — Execute scripts personalizados no contexto da página com
evaluate_scriptpara extrair dados ou testar funcionalidades. - Captura de screenshot — Solicite screenshots de páginas com
screenshot_page, opcionalmente salvando a saída grande diretamente no disco por meio do parâmetrosaveTo. - Gerenciamento de páginas — Alterne entre abas abertas e navegue para novos URLs usando
list_pages,select_pageenavigate_page.
Documentação
Firefox DevTools MCP
Servidor do Model Context Protocol que permite que agentes de IA usem o Firefox. Ele tem dois casos de uso principais:
- Navegação agêntica: o agente usa o navegador para tarefas comuns, como ler páginas, preencher formulários e percorrer fluxos de várias etapas em sites.
- Desenvolvimento web assistido por agente: o agente carrega a página em que você está trabalhando e a inspeciona com ferramentas de desenvolvedor, como console, requisições de rede, depurador e profiler.
Ele controla o Firefox por meio do WebDriver BiDi (via Selenium WebDriver) e 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.
Segurança
Servidores MCP de navegador apresentam riscos inerentes. Algumas práticas importantes:
- Use um perfil do Firefox dedicado. Nunca execute o servidor contra seu perfil normal — o agente tem acesso a tudo o que o navegador pode alcançar, incluindo cookies e sessões salvas.
- Tenha cuidado com os sites que você visita. As páginas podem retornar conteúdo projetado para manipular o agente (injeção de prompt). Limite-se a sites que você controla ou nos quais confia.
- Ative apenas os módulos de ferramentas que você precisa. O preset padrão
basicjá incluievaluate_script;--tool-preset slimo 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 de como relatar vulnerabilidades.
Requisitos
- Node.js ≥ 20.19.0
- Firefox 100+ instalado (detectado automaticamente, ou passe
--firefox-path)
Instalar e usar com Claude Code ou Codex (npx)
Recomendado: use npx para executar a versão publicada mais recente do npm.
Opção A — CLI
Claude Code
claude mcp add firefox-devtools npx @mozilla/firefox-devtools-mcp@latest
# Headless + viewport via args
claude mcp add firefox-devtools npx @mozilla/firefox-devtools-mcp@latest -- --headless --viewport 1280x720
# Or via environment variables
claude mcp add firefox-devtools npx @mozilla/firefox-devtools-mcp@latest \
--env START_URL=https://example.com \
--env FIREFOX_HEADLESS=true
Codex
codex mcp add firefox-devtools -- npx @mozilla/firefox-devtools-mcp@latest
# Headless + viewport via args
codex mcp add firefox-devtools -- \
npx @mozilla/firefox-devtools-mcp@latest -- --headless --viewport 1280x720
# Or via environment variables
codex mcp add firefox-devtools \
--env START_URL=https://example.com \
--env FIREFOX_HEADLESS=true \
-- npx @mozilla/firefox-devtools-mcp@latest
Opção B — Editar o arquivo de configuração
Claude Code
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"
}
}
}
}
Codex
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"
Opção C — Script auxiliar (build de desenvolvimento local)
npm run setup
# Choose Claude Code; the script saves JSON to the right path
Experimente com o MCP Inspector
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_snapshote depoisclick_by_uid/fill_by_uidlist_network_requests(captura sempre ativa),get_network_requestlist_downloads(captura sempre ativa),set_download_behaviorscreenshot_page,list_console_messages
Opções de CLI
Você 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 específico do Firefox. O Firefox é executado em uma subpastafirefox_devtools_mcp_profiledesse caminho, marcada com um arquivo.firefox-devtools-mcp; apontar--profile-pathpara um perfil marcado o reutiliza diretamente--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 do Marionette para o modo conectar a existente, padrão 2828 (MARIONETTE_PORT)--pref name=value— definir preferência do Firefox na inicialização viamoz:firefoxOptions(repetível)--tool-preset— selecionar quais módulos de ferramentas habilitar:slim,basic(padrão),developer,mozillaouall. Consulte Módulos de ferramentas e presets. (TOOL_PRESET)--tools— lista explícita de módulos de ferramentas a habilitar, substituindo--tool-presetcompletamente (ex.:--tools pages network script). Consulte Módulos de ferramentas e presets.--enable-script— obsoleto, use--tool-preset developerou--tools ... script debugging. Seleciona o preset de ferramentasdeveloper. (ENABLE_SCRIPT=true)--enable-privileged-context— obsoleto, use--tool-preset mozillaou--tools ... privileged prefs. Seleciona o preset de ferramentasmozilla. RequerMOZ_REMOTE_ALLOW_SYSTEM_ACCESS=1(ENABLE_PRIVILEGED_CONTEXT=true)--android-device— habilitar o modo Firefox para Android; o valor é o serial do dispositivo ADB (ex.:emulator-5554). Executeadb devicespara listar os dispositivos conectados. Omita o valor ou useautopara selecionar automaticamente o único dispositivo conectado.--android-wipe-app-data— confirmar que o modo Android apaga todos os dados do aplicativo de destino. Obrigatório junto com--android-device. (ANDROID_WIPE_APP_DATA=true)--android-package— nome do pacote do aplicativo Android, padrãoorg.mozilla.firefox. Outros pacotes:org.mozilla.firefox_betapara Firefox Beta,org.mozilla.fenixpara Firefox Nightly,org.mozilla.fenix.debugpara Firefox Nightly Debug,org.mozilla.geckoview_examplepara geckoview (ANDROID_PACKAGE)--unrestricted-save-paths— permitir que o parâmetrosaveTograve 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. DefinaDEBUG=*para também incluir logs de depuração detalhados. Exemplo:--log-file /tmp/firefox-mcp.log
Módulos de ferramentas e presets
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 vence e
o preset é ignorado.
Presets (cada um é um superconjunto do anterior):
slim— o mínimo para navegar e interagir com páginasbasic(padrão) — adiciona ferramentas para navegação regulardeveloper— adiciona ferramentas para desenvolvedores webmozilla— adiciona ferramentas para desenvolvedores do Firefoxall— todos os módulos
Consulte docs/tools.md para a lista de módulos e os módulos em cada preset.
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 explícita de --tools para removê-la.
# Use the developer preset (adds network, console, debugging and profiler tools)
npx @mozilla/firefox-devtools-mcp --tool-preset developer
# Enable only the modules you need
npx @mozilla/firefox-devtools-mcp --tools pages network console
Os módulos prefs e privileged exigem MOZ_REMOTE_ALLOW_SYSTEM_ACCESS=1 e estão disponíveis apenas
no build interno da Mozilla. O módulo launch também exige o build interno da
Mozilla: ele reinicia o Firefox sob um binário, perfil, ambiente e conjunto de
preferências escolhidos pelo chamador, o que é uma mudança de configuração que o operador deve controlar. Use --pref,
--firefox-path e as outras opções de linha de comando. O módulo bidi também exige
o build interno da Mozilla: ele envia qualquer comando WebDriver BiDi, portanto dá acesso ao que os
outros módulos expõem. O pacote público ignora esses módulos mesmo se solicitados e registra um
aviso nomeando os módulos que foram removidos.
Preferências úteis (--pref)
- remote.prefs.recommended=false. Quando o Firefox é executado em automação, ele aplica RecommendedPreferences que modificam o comportamento do navegador para testes. Defina remote.prefs.recommended como false para ignorá-las e ter uma configuração mais próxima de uma instância regular do Firefox.
- remote.log.level=Trace. Habilita logs detalhados do protocolo WebDriver no Firefox. O servidor MCP passará automaticamente o nível de log correspondente ao geckodriver para que ambos os lados registrem com a mesma verbosidade.
- app.update.disabledForTesting=false. Permite que o Firefox baixe e aplique atualizações automaticamente. Observe que as atualizações podem interromper sua sessão. Também exige definir remote.prefs.recommended=false.
Firefox para Android
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 de destino 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 ignorá-lo, depois executa a sessão em seu próprio perfil temporário, que é excluído em seguida. Por causa disso,--android-deviceexige--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.
# List connected devices
adb devices
# Launch Firefox for Android on the single connected device
npx @mozilla/firefox-devtools-mcp --android-device auto --android-wipe-app-data
# Target a specific device
npx @mozilla/firefox-devtools-mcp --android-device <serial> --android-wipe-app-data
# Use Firefox Nightly instead
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.
Conectar a um Firefox existente
Use --connect-existing para automatizar sua sessão real de navegação, com cookies, logins e abas abertas intactos:
# Start Firefox with Marionette and the Remote Agent (BiDi)
firefox --marionette --remote-debugging-port
# Run the MCP server
npx @mozilla/firefox-devtools-mcp --connect-existing --marionette-port 2828
Ambas as flags são obrigató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 habilitado 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. Habilite o Marionette apenas quando precisar de automação MCP e reinicie o Firefox normalmente depois.
Visão geral das ferramentas
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).
Salvando saída volumosa em disco
A saída grande de ferramentas pode consumir contexto significativo em clientes CLI como o Claude Code. Várias
ferramentas aceitam um parâmetro opcional saveTo que grava o resultado em um arquivo em vez de
retorná-lo inline. Consulte docs/tools.md para a lista.
saveTo assume uma de três formas:
- um caminho de arquivo (relativo ao diretório de trabalho atual, ou absoluto dentro de
~/.firefox-devtools-mcp/output; os diretórios pai são criados). Caminhos que alcançam um perfil do Firefox, ou os arquivos que este servidor lê de volta, são recusados - um diretório existente (um arquivo com carimbo de data/hora é gerado dentro dele)
true(um arquivo com carimbo de data/hora é gerado sob~/.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 salvaguardas de tamanho inline (limites de mensagens do console, truncamento de cabeçalhos de rede, limites de linhas de snapshot) nunca se aplicam a ele.
As ferramentas que produzem texto também aceitam preview, um número de caracteres da saída salva para
ecoar inline como um pequeno trecho. A lista em docs/tools.md mostra quais ferramentas suportam isso.
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.
Desenvolvimento local
npm install
npm run build
# Run with Inspector against local build
npx @modelcontextprotocol/inspector node dist/index.js --headless --viewport 1280x720
# Or run in dev with hot reload
npm run inspector:dev
Consulte CONTRIBUTING.md para mais detalhes sobre desenvolvimento local, testes e CI.
Solução de problemas
- Firefox não encontrado: passe
--firefox-path "/Applications/Firefox.app/Contents/MacOS/firefox"(macOS) ou o caminho correto no seu sistema operacional. - A primeira execução é lenta: o Selenium configura a sessão BiDi; execuções subsequentes são mais rápidas.
- UIDs obsoletos: um UID permanece válido até que seu elemento seja removido ou a página navegue; tire um novo snapshot (
take_snapshot) quando uma ferramenta de UID informar que um não existe mais. - Windows 10: Erro durante a descoberta do servidor MCP 'firefox-devtools': erro MCP -32000: conexão fechada
-
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,.exeou.ps1— para corresponder à sua configuração):"mcpServers": { "firefox-devtools": { "command": "C:\\nvm4w\\nodejs\\npx.ps1", "args": ["-y", "@mozilla/firefox-devtools-mcp@latest"] } }
-
Versionamento
- API pré‑1.0: as versões começam em
0.x. Use@latestcom npx para a versão mais recente.
Contribuindo
Veja CONTRIBUTING.md para saber como relatar problemas, executar testes e trabalhar no projeto localmente.
Autor
Mantido pela Mozilla.
Licença
Licenciado sob MIT ou Apache 2.0, à sua escolha.