firefox-devtools-mcp
공식Model Context Protocol 서버로, Firefox DevTools를 통해 AI 어시스턴트가 원격 디버깅 프로토콜을 사용하여 Firefox 브라우저를 검사하고 제어할 수 있게 해줍니다.
Firefox DevTools MCP(으)로 무엇을 할 수 있나요?
- 브라우저 탭 탐색 및 관리 —
navigate_page,select_page,list_pages를 사용하여 탭을 열고, 닫고, 전환하고, 페이지를 탐색합니다. - 페이지 콘텐츠 검사 및 상호작용 —
take_snapshot으로 텍스트 스냅샷을 캡처한 후, 고유 ID를 통해click_by_uid와fill_by_uid로 양식 필드를 클릭하거나 채웁니다. - 네트워크 활동 모니터링 —
list_network_requests로 캡처된 모든 네트워크 요청을 나열하고,get_network_request로 개별 요청 세부 정보를 확인합니다. - 스크린샷 캡처 —
screenshot_page로 전체 페이지 스크린샷을 찍거나,screenshot_by_uid로 특정 요소를 대상으로 선택적으로 디스크에 저장합니다. - 페이지에서 JavaScript 실행 —
--enable-script플래그가 활성화된 경우evaluate_script를 사용하여 페이지 컨텍스트에서 임의의 스크립트를 실행합니다. - 기존 Firefox 세션 제어 —
--connect-existing로 실행 중인 Firefox 인스턴스에 연결하여 현재 탭, 쿠키 및 로그인을 자동화합니다.
문서
Firefox DevTools MCP
WebDriver BiDi(Selenium WebDriver 경유)를 통해 Firefox를 자동화하기 위한 모델 컨텍스트 프로토콜 서버입니다. Claude Code, Claude Desktop, Cursor, Cline 및 기타 MCP 클라이언트와 함께 작동합니다.
저장소: https://github.com/mozilla/firefox-devtools-mcp
참고: 이 MCP 서버는 로컬 Firefox 브라우저 설치가 필요하며 glama.ai와 같은 클라우드 호스팅 서비스에서는 실행할 수 없습니다. 로컬에서 실행하려면
npx @mozilla/firefox-devtools-mcp@latest를 사용하거나 제공된 Dockerfile과 함께 Docker를 사용하세요.
보안
브라우저 MCP 서버는 내재된 위험을 수반합니다. 몇 가지 주요 사례:
- 전용 Firefox 프로필을 사용하세요. 일반 프로필로 서버를 실행하지 마세요. 에이전트는 쿠키 및 저장된 세션을 포함하여 브라우저가 접근할 수 있는 모든 것에 접근할 수 있습니다.
- 방문하는 사이트에 주의하세요. 페이지는 에이전트를 조작하도록 설계된 콘텐츠(프롬프트 인젝션)를 반환할 수 있습니다. 제어하거나 신뢰하는 사이트만 사용하세요.
- 필요하지 않은 경우 추가 플래그를 활성화하지 마세요.
--enable-script및--enable-privileged-context은 에이전트가 수행할 수 있는 작업을 크게 확장합니다.
위험 요소 및 취약점 보고 방법에 대한 전체 분석은 SECURITY.md를 참조하세요.
요구 사항
- Node.js ≥ 20.19.0
- Firefox 100+ 설치 (자동 감지 또는
--firefox-path전달)
Claude Code로 설치 및 사용 (npx)
권장 사항: npx를 사용하여 항상 npm에서 최신 게시 버전을 실행하세요.
옵션 A — Claude Code CLI
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
옵션 B — Claude Code 설정 JSON 편집
Claude Code 구성 파일에 추가하세요:
- macOS:
~/Library/Application Support/Claude/Code/mcp_settings.json - Linux:
~/.config/claude/code/mcp_settings.json - Windows:
%APPDATA%\Claude\Code\mcp_settings.json
{
"mcpServers": {
"firefox-devtools": {
"command": "npx",
"args": ["-y", "@mozilla/firefox-devtools-mcp@latest", "--headless", "--viewport", "1280x720"],
"env": {
"START_URL": "about:blank"
}
}
}
}
옵션 C — 헬퍼 스크립트 (로컬 개발 빌드)
npm run setup
# Choose Claude Code; the script saves JSON to the right path
MCP Inspector로 사용해 보기
npx @modelcontextprotocol/inspector npx @mozilla/firefox-devtools-mcp@latest --start-url https://example.com --headless
그런 다음 다음과 같은 도구를 호출하세요:
list_pages,select_page,navigate_pagetake_snapshot다음click_by_uid/fill_by_uidlist_network_requests(상시 캡처),get_network_requestscreenshot_page,list_console_messages
CLI 옵션
플래그 또는 환경 변수(오른쪽 이름)를 전달할 수 있습니다:
--firefox-path— Firefox 바이너리의 절대 경로--headless— UI 없이 실행 (FIREFOX_HEADLESS=true)--viewport 1280x720— 초기 창 크기--profile-path— 특정 Firefox 프로필 사용--firefox-arg— 추가 Firefox 인수 (반복 가능)--start-url— 시작 시 이 URL 열기 (START_URL)--accept-insecure-certs— TLS 오류 무시 (ACCEPT_INSECURE_CERTS=true)--connect-existing— 새 Firefox를 시작하는 대신 이미 실행 중인 Firefox에 연결 (CONNECT_EXISTING=true)--marionette-port— connect-existing 모드용 Marionette 포트, 기본값 2828 (MARIONETTE_PORT)--pref name=value—moz:firefoxOptions을 통해 시작 시 Firefox 환경 설정 지정 (반복 가능)--enable-script—evaluate_script도구(페이지 컨텍스트에서 임의의 JavaScript 실행) 및 디버깅 도구(스크립트 나열, 소스 검사, 로그포인트 설정) 활성화. 디버깅 도구는 Firefox 153+가 필요합니다. (ENABLE_SCRIPT=true)--enable-privileged-context— 권한 있는 컨텍스트 도구 활성화: 권한 있는 컨텍스트 나열/선택, 권한 있는 스크립트 평가, Firefox 환경 설정 가져오기/설정, 확장 기능 나열.MOZ_REMOTE_ALLOW_SYSTEM_ACCESS=1필요 (ENABLE_PRIVILEGED_CONTEXT=true)--android-device— Firefox for Android 모드 활성화; 값은 ADB 기기 시리얼입니다 (예:emulator-5554). 연결된 기기를 나열하려면adb devices을 실행하세요. 값을 생략하거나auto을 사용하여 연결된 단일 기기를 자동으로 선택합니다.--android-package— Android 앱 패키지 이름, 기본값org.mozilla.firefox. 기타 패키지: Firefox Beta용org.mozilla.firefox_beta, Firefox Nightly용org.mozilla.fenix, Firefox Nightly Debug용org.mozilla.fenix.debug, geckoview용org.mozilla.geckoview_example(ANDROID_PACKAGE)--log-file— MCP 서버 로그를 stderr 대신 파일에 기록합니다. 서버 출력을 숨기는 MCP 클라이언트로 세션을 디버깅하는 데 유용합니다. 상세 디버그 로그를 포함하려면DEBUG=*을 설정하세요. 예시:--log-file /tmp/firefox-mcp.log
유용한 환경 설정 (--pref)
- remote.prefs.recommended=false. Firefox가 자동화 모드로 실행될 때 테스트를 위해 브라우저 동작을 수정하는 RecommendedPreferences를 적용합니다. remote.prefs.recommended를 false로 설정하여 이를 건너뛰고 일반 Firefox 인스턴스에 더 가까운 구성을 사용하세요.
- remote.log.level=Trace. Firefox에서 상세 WebDriver 프로토콜 로그를 활성화합니다. MCP 서버는 자동으로 일치하는 로그 레벨을 geckodriver에 전달하여 양측이 동일한 상세 수준으로 로깅하도록 합니다.
- app.update.disabledForTesting=false. Firefox가 자동으로 업데이트를 다운로드하고 적용하도록 허용합니다. 업데이트로 인해 세션이 중단될 수 있습니다. remote.prefs.recommended=false 설정도 필요합니다.
Firefox for Android
--android-device을 사용하여 Android 기기에서 실행되는 Firefox를 자동화하세요. PATH에 adb 및 자동으로 관리되는 geckodriver가 필요합니다.
# List connected devices
adb devices
# Launch Firefox for Android on the single connected device
npx @mozilla/firefox-devtools-mcp --android-device auto
# Target a specific device
npx @mozilla/firefox-devtools-mcp --android-device <serial>
# Use Firefox Nightly instead
npx @mozilla/firefox-devtools-mcp --android-device <serial> --android-package org.mozilla.fenix
호스트와 기기 간의 포트 포워딩은 geckodriver에 의해 자동으로 처리됩니다.
기존 Firefox에 연결
--connect-existing을 사용하여 쿠키, 로그인 및 열린 탭이 그대로 유지된 실제 브라우징 세션을 자동화하세요:
# Start Firefox with Marionette enabled
firefox --marionette
# Run the MCP server
npx @mozilla/firefox-devtools-mcp --connect-existing --marionette-port 2828
또는 about:config (또는 user.js)에서 marionette.enabled을 true로 설정하여 모든 실행 시 Marionette를 활성화합니다.
BiDi 종속 기능(콘솔 이벤트, 네트워크 이벤트)은 connect-existing 모드에서 사용할 수 없습니다. 다른 모든 기능은 정상적으로 작동합니다.
경고: 일반 브라우징 중에는 Marionette를 활성화된 상태로 두지 마세요.
navigator.webdriver = true을 설정하고 다른 브라우저 핑거프린트 신호를 변경하여 Cloudflare, Akamai 등으로 보호되는 사이트에서 봇 탐지를 유발할 수 있습니다. MCP 자동화가 필요할 때만 Marionette를 활성화한 다음, 이후에는 Firefox를 정상적으로 다시 시작하세요.
도구 개요
- 페이지: 나열/새로 만들기/이동/선택/닫기
- 스냅샷/UID: 가져오기/해석/지우기
- 입력: 클릭/호버/채우기/드래그/업로드/양식 채우기
- 네트워크: 나열/가져오기 (ID 우선, 필터, 상시 캡처)
- 콘솔: 나열/지우기
- 스크린샷: 페이지/UID별 (CLI 환경용 선택적
saveTo포함) - 스크립트: evaluate_script
- 권한 있는 컨텍스트: 권한 있는("chrome") 컨텍스트 나열/선택, evaluate_privileged_script (
MOZ_REMOTE_ALLOW_SYSTEM_ACCESS=1필요) - WebExtension: install_extension, uninstall_extension, list_extensions (나열에는
MOZ_REMOTE_ALLOW_SYSTEM_ACCESS=1필요) - Firefox 관리: get_firefox_info, get_firefox_output, restart_firefox, set_firefox_prefs, get_firefox_prefs
- 프로파일러: profiler_is_active, profiler_start (사전 설정 또는 명시적 구성), profiler_stop (프로필을 다운로드 디렉터리에 저장)
- 유틸리티: 대화 상자 수락/거부, 기록 뒤로/앞으로, 뷰포트 설정
Claude Code를 위한 스크린샷 최적화
Claude Code CLI에서 스크린샷을 사용할 때 base64 이미지 데이터가 상당한 컨텍스트를 소비할 수 있습니다.
saveTo 매개변수를 사용하여 스크린샷을 디스크에 저장하세요:
screenshot_page({ saveTo: "/tmp/page.png" })
screenshot_by_uid({ uid: "abc123", saveTo: "/tmp/element.png" })
그런 다음 컨텍스트 크기에 영향을 주지 않고 Claude Code의 Read 도구로 파일을 볼 수 있습니다.
로컬 개발
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
로컬 개발, 테스트 및 CI에 대한 자세한 내용은 CONTRIBUTING.md를 참조하세요.
문제 해결
- Firefox를 찾을 수 없음:
--firefox-path "/Applications/Firefox.app/Contents/MacOS/firefox"(macOS) 또는 OS의 올바른 경로를 전달하세요. - 첫 실행이 느림: Selenium이 BiDi 세션을 설정합니다. 이후 실행은 더 빠릅니다.
- 탐색 후 UID가 오래됨: UID 도구를 사용하기 전에 새 스냅샷(
take_snapshot)을 가져오세요. - Windows 10: MCP 서버 'firefox-devtools' 검색 중 오류: MCP 오류 -32000: 연결이 닫혔습니다
-
해결책 1
cmd /c로 래핑 (세부 정보):"mcpServers": { "firefox-devtools": { "command": "cmd", "args": ["/c", "npx", "-y", "@mozilla/firefox-devtools-mcp@latest"] } } -
해결책 2
npx의 절대 경로를 사용하세요 (확장자 —.cmd,.bat,.exe또는.ps1— 를 설정에 맞게 조정):"mcpServers": { "firefox-devtools": { "command": "C:\\nvm4w\\nodejs\\npx.ps1", "args": ["-y", "@mozilla/firefox-devtools-mcp@latest"] } }
-
버전 관리
- 1.0 이전 API: 버전은
0.x로 시작합니다. 최신 릴리스를 위해 npx와 함께@latest를 사용하세요.
기여
이슈 제출, 테스트 실행 및 프로젝트 로컬 작업 방법은 CONTRIBUTING.md를 참조하세요.
작성자
Mozilla에서 유지 관리합니다.
라이선스
선택에 따라 MIT 또는 Apache 2.0에 따라 라이선스가 부여됩니다.