
firefox-devtools-mcp v0.10.2
Model Context Protocol server for Firefox DevTools - AI सहायकों को Remote Debugging Protocol के माध्यम से Firefox ब्राउज़र का निरीक्षण और नियंत्रण करने में सक्षम बनाता है
Firefox DevTools MCP
WebDriver BiDi (Selenium WebDriver के माध्यम से) के जरिए Firefox को स्वचालित करने के लिए Model Context Protocol सर्वर। 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 प्रोफ़ाइल का उपयोग करें। सर्वर को अपनी नियमित प्रोफ़ाइल के विरुद्ध कभी न चलाएं — एजेंट के पास वह सब कुछ उपलब्ध है जो ब्राउज़र तक पहुंच सकता है, जिसमें कुकीज़ और सहेजे गए सत्र शामिल हैं।
- आप किन साइटों पर जाते हैं, इस बारे में सतर्क रहें। पेज एजेंट को हेरफेर करने के लिए डिज़ाइन की गई सामग्री लौटा सकते हैं (प्रॉम्प्ट इंजेक्शन)। उन साइटों पर रहें जिन्हें आप नियंत्रित करते हैं या जिन पर भरोसा करते हैं।
- केवल उन्हीं टूल मॉड्यूल को सक्षम करें जिनकी आपको आवश्यकता है। डिफ़ॉल्ट
basicप्रीसेट में पहले से हीevaluate_scriptशामिल है;--tool-preset slimइसे हटा देता है।--tool-preset developer(डिबगिंग, नेटवर्क, कंसोल, प्रोफाइलर) और--tool-preset mozilla(विशेषाधिकार प्राप्त संदर्भ) जैसे उच्च प्रीसेट एजेंट की क्षमताओं को और बढ़ाते हैं।
जोखिमों के पूर्ण विवरण और कमजोरियों की रिपोर्ट करने के तरीके के लिए SECURITY.md देखें।
आवश्यकताएँ
- Node.js ≥ 20.19.0
- Firefox 100+ इंस्टॉल हो (स्वतः पता लगाया जाता है, या
--firefox-pathपास करें)
Claude Code या Codex (npx) के साथ इंस्टॉल और उपयोग करें
अनुशंसित: npx का उपयोग करें ताकि आप npm से नवीनतम प्रकाशित संस्करण चला सकें।
विकल्प A — CLI
Claude Code
claude mcp add firefox-devtools npx @mozilla/firefox-devtools-mcp@latest
# आर्ग्स के माध्यम से हेडलेस + व्यूपोर्ट
claude mcp add firefox-devtools npx @mozilla/firefox-devtools-mcp@latest -- --headless --viewport 1280x720
# या पर्यावरण चर के माध्यम से
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
# आर्ग्स के माध्यम से हेडलेस + व्यूपोर्ट
codex mcp add firefox-devtools -- \
npx @mozilla/firefox-devtools-mcp@latest -- --headless --viewport 1280x720
# या पर्यावरण चर के माध्यम से
codex mcp add firefox-devtools \
--env START_URL=https://example.com \
--env FIREFOX_HEADLESS=true \
-- npx @mozilla/firefox-devtools-mcp@latest
विकल्प B — कॉन्फ़िगरेशन फ़ाइल संपादित करें
Claude Code
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"
}
}
}
}
Codex
~/.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"
विकल्प C — सहायक स्क्रिप्ट (स्थानीय डेव बिल्ड)
npm run setup
# Claude Code चुनें; स्क्रिप्ट JSON को सही पथ पर सहेजती है
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_requestlist_downloads(हमेशा-चालू कैप्चर),set_download_behaviorscreenshot_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 से जुड़ें (CONNECT_EXISTING=true)--marionette-port— connect-existing मोड के लिए Marionette पोर्ट, डिफ़ॉल्ट 2828 (MARIONETTE_PORT)--pref name=value—moz:firefoxOptionsके माध्यम से स्टार्टअप पर Firefox प्राथमिकता सेट करें (दोहराने योग्य)--tool-preset— चुनें कि कौन से टूल मॉड्यूल सक्षम करने हैं:slim,basic(डिफ़ॉल्ट),developer,mozilla, याall। टूल मॉड्यूल और प्रीसेट देखें। (TOOL_PRESET)--tools— सक्षम करने के लिए टूल मॉड्यूल की स्पष्ट सूची,--tool-presetको पूरी तरह से ओवरराइड करता है (जैसे--tools pages network script)। टूल मॉड्यूल और प्रीसेट देखें।--enable-script— अप्रचलित,--tool-preset developerया--tools ... script debuggingका उपयोग करें।developerटूल प्रीसेट का चयन करता है। (ENABLE_SCRIPT=true)--enable-privileged-context— अप्रचलित,--tool-preset mozillaया--tools ... privileged prefsका उपयोग करें।mozillaटूल प्रीसेट का चयन करता है।MOZ_REMOTE_ALLOW_SYSTEM_ACCESS=1की आवश्यकता है (ENABLE_PRIVILEGED_CONTEXT=true)--android-device— Android के लिए Firefox मोड सक्षम करें; मान ADB डिवाइस सीरियल है (जैसेemulator-5554)। कनेक्टेड डिवाइस सूचीबद्ध करने के लिएadb devicesचलाएं। एकल कनेक्टेड डिवाइस को स्वचालित रूप से चुनने के लिए मान छोड़ दें याautoका उपयोग करें।--android-wipe-app-data— पुष्टि करें कि Android मोड लक्षित ऐप का सारा डेटा मिटा देता है।--android-deviceके साथ आवश्यक। (ANDROID_WIPE_APP_DATA=true)--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)--unrestricted-save-paths—saveToपैरामीटर को डिफ़ॉल्ट रूट के बजाय डिस्क पर कहीं भी लिखने दें। बड़े आउटपुट को डिस्क पर सहेजना और SECURITY.md में सुरक्षा नोट देखें। (UNRESTRICTED_SAVE_PATHS=true)--log-file— stderr के बजाय फ़ाइल में MCP सर्वर लॉग लिखें। सर्वर आउटपुट छिपाने वाले MCP क्लाइंट के साथ सत्रों को डीबग करने के लिए उपयोगी। वर्बोज़ डीबग लॉग भी शामिल करने के लिएDEBUG=*सेट करें। उदाहरण:--log-file /tmp/firefox-mcp.log
टूल मॉड्यूल और प्रीसेट
टूल को मॉड्यूल में समूहीकृत किया गया है। आप चुनते हैं कि कौन से मॉड्यूल को नामित प्रीसेट (--tool-preset) या स्पष्ट सूची (--tools) के साथ एक्सपोज़ करना है। जब दोनों दिए जाते हैं, तो --tools जीतता है और प्रीसेट को अनदेखा किया जाता है।
मॉड्यूल: pages, snapshot, input, network, console, screenshot, downloads,
utilities, management, webextension, profiler, screencast, script, debugging,
prefs, privileged।
प्रीसेट (प्रत्येक पिछले का सुपरसेट है):
slim—pages,snapshot,input,screenshotbasic(डिफ़ॉल्ट) —slimप्लसdownloads,script,utilities,management,webextension,screencastdeveloper—basicप्लसdebugging,network,console,profilermozilla—developerप्लसprefs,privilegedall— हर मॉड्यूल
ध्यान दें कि basic, डिफ़ॉल्ट, में script और इसलिए evaluate_script टूल शामिल है।
हमले की सतह के लिए इसका क्या अर्थ है, यह देखने के लिए SECURITY.md देखें, और इसे हटाने के लिए --tool-preset slim या स्पष्ट --tools सूची का उपयोग करें।
# डेवलपर प्रीसेट का उपयोग करें (नेटवर्क, कंसोल, डिबगिंग और प्रोफाइलर टूल जोड़ता है)
npx @mozilla/firefox-devtools-mcp --tool-preset developer
# केवल उन मॉड्यूल को सक्षम करें जिनकी आपको आवश्यकता है
npx @mozilla/firefox-devtools-mcp --tools pages network console
prefs और privileged मॉड्यूल को MOZ_REMOTE_ALLOW_SYSTEM_ACCESS=1 की आवश्यकता होती है और ये केवल Mozilla-आंतरिक बिल्ड में उपलब्ध हैं। सार्वजनिक पैकेज अनुरोध किए जाने पर भी उन्हें छोड़ देता है और छोड़े गए मॉड्यूल के नाम बताते हुए एक चेतावनी लॉग करता है।
उपयोगी प्राथमिकताएँ (--pref)
- remote.prefs.recommended=false। जब Firefox स्वचालन में चलता है, तो यह RecommendedPreferences लागू करता है जो परीक्षण के लिए ब्राउज़र व्यवहार को संशोधित करता है। उन्हें छोड़ने और नियमित Firefox इंस्टेंस के करीब कॉन्फ़िगरेशन रखने के लिए remote.prefs.recommended को false पर सेट करें।
- remote.log.level=Trace। Firefox में वर्बोज़ WebDriver प्रोटोकॉल लॉग सक्षम करें। MCP सर्वर स्वचालित रूप से geckodriver को मिलान लॉग स्तर पास करेगा ताकि दोनों पक्ष समान वर्बोसिटी पर लॉग करें।
- app.update.disabledForTesting=false। Firefox को अपडेट स्वचालित रूप से डाउनलोड और लागू करने दें। ध्यान दें कि अपडेट आपके सत्र को बाधित कर सकते हैं। remote.prefs.recommended=false सेट करना भी आवश्यक है।
Android के लिए Firefox
Android डिवाइस पर चल रहे Firefox को स्वचालित करने के लिए --android-device का उपयोग करें। आपके PATH पर adb और geckodriver की आवश्यकता है, जो स्वचालित रूप से प्रबंधित होता है।
चेतावनी: Android मोड हर सत्र से पहले लक्षित ऐप का सारा डेटा मिटा देता है। टैब, इतिहास, बुकमार्क, पासवर्ड, कुकीज़ और सेटिंग्स सभी खो जाते हैं। geckodriver सत्र बनाते समय
adb shell pm clear <package>चलाता है और इसे छोड़ने का कोई तरीका नहीं देता, फिर सत्र को अपनी अस्थायी प्रोफ़ाइल पर चलाता है जिसे बाद में हटा दिया जाता है। इस वजह से,--android-deviceको--android-wipe-app-dataकी आवश्यकता होती है, और आपको अपने उपयोग किए जाने वाले ब्राउज़र को स्वचालित करने के बजाय स्वचालन के लिए समर्पित एक बिल्ड इंस्टॉल करना चाहिए। Bug 2064088 मौजूदा ऐप डेटा को रखने के लिए geckodriver में एक विकल्प जोड़ने पर नज़र रखता है।
# कनेक्टेड डिवाइस सूचीबद्ध करें
adb devices
# एकल कनेक्टेड डिवाइस पर Android के लिए Firefox लॉन्च करें
npx @mozilla/firefox-devtools-mcp --android-device auto --android-wipe-app-data
# एक विशिष्ट डिवाइस को लक्षित करें
npx @mozilla/firefox-devtools-mcp --android-device <serial> --android-wipe-app-data
# इसके बजाय Firefox Nightly का उपयोग करें
npx @mozilla/firefox-devtools-mcp --android-device <serial> --android-package org.mozilla.fenix --android-wipe-app-data
होस्ट और डिवाइस के बीच पोर्ट फ़ॉरवर्डिंग geckodriver द्वारा स्वचालित रूप से संभाली जाती है।
मौजूदा Firefox से कनेक्ट करें
कुकीज़, लॉगिन और खुले टैब के साथ अपने वास्तविक ब्राउज़िंग सत्र को स्वचालित करने के लिए --connect-existing का उपयोग करें:
# Marionette और Remote Agent (BiDi) के साथ Firefox शुरू करें
firefox --marionette --remote-debugging-port
# MCP सर्वर चलाएं
npx @mozilla/firefox-devtools-mcp --connect-existing --marionette-port 2828
दोनों फ्लैग आवश्यक हैं क्योंकि MCP WebDriver Classic (--marionette) और WebDriver BiDi (--remote-debugging-port) दोनों का उपयोग करता है। यदि Firefox केवल --marionette के साथ शुरू किया गया है, तो MCP सर्वर कनेक्ट करने में विफल रहता है और आपको दोनों फ्लैग के साथ Firefox को पुनः आरंभ करने के लिए कहता है।
चेतावनी: सामान्य ब्राउज़िंग के दौरान Marionette को सक्षम न छोड़ें। यह
navigator.webdriver = trueसेट करता है और अन्य ब्राउज़र फ़िंगरप्रिंट सिग्नल बदलता है, जो Cloudflare, Akamai आदि द्वारा संरक्षित साइटों पर बॉट डिटेक्शन ट्रिगर कर सकता है। केवल तभी Marionette सक्षम करें जब आपको MCP स्वचालन की आवश्यकता हो, फिर Firefox को सामान्य रूप से पुनः आरंभ करें।
टूल अवलोकन
मॉड्यूल द्वारा टूल की पूरी सूची, विवरण और पैरामीटर के साथ, docs/tools.md देखें (स्रोत से उत्पन्न)।
- पेज: list/new/navigate/select/close/get_page_text (get_page_text वैकल्पिक
saveToका समर्थन करता है) - स्नैपशॉट/UID: take/resolve/clear (take वैकल्पिक
saveToका समर्थन करता है) - इनपुट: click/hover/fill/drag/upload/form fill/press_key/type_text
- नेटवर्क: list/get (ID‑प्रथम, फ़िल्टर, हमेशा‑चालू कैप्चर; दोनों वैकल्पिक
saveToका समर्थन करते हैं) - डाउनलोड: list_downloads/clear_downloads (हमेशा‑चालू कैप्चर), set_download_behavior (allow/deny/default)
- कंसोल: list/clear (list वैकल्पिक
saveToका समर्थन करता है) - स्क्रीनशॉट: page/by uid (CLI वातावरण के लिए वैकल्पिक
saveToके साथ) - स्क्रिप्ट: evaluate_script (पृथक क्षेत्र के लिए वैकल्पिक
sandbox; बड़े परिणामों के लिए वैकल्पिकsaveTo) - विशेषाधिकार प्राप्त संदर्भ: list/select विशेषाधिकार प्राप्त ("chrome") संदर्भ, evaluate_privileged_script (
MOZ_REMOTE_ALLOW_SYSTEM_ACCESS=1की आवश्यकता है) - WebExtension: install_extension, uninstall_extension, list_extensions (list को
MOZ_REMOTE_ALLOW_SYSTEM_ACCESS=1की आवश्यकता है) - Firefox प्रबंधन: get_firefox_info, get_firefox_output, restart_firefox
- Firefox प्राथमिकताएँ: get_firefox_prefs, set_firefox_prefs (
MOZ_REMOTE_ALLOW_SYSTEM_ACCESS=1की आवश्यकता है) - प्रोफाइलर: profiler_is_active, profiler_start (प्रीसेट या स्पष्ट कॉन्फ़िग), profiler_stop (प्रोफ़ाइल को डाउनलोड निर्देशिका में सहेजता है)
- स्क्रीनकास्ट: screencast_start (पेज व्यूपोर्ट को डाउनलोड निर्देशिका में वीडियो फ़ाइल में रिकॉर्ड करता है), screencast_stop (Firefox 154+ की आवश्यकता है)
- उपयोगिताएँ: accept/dismiss डायलॉग, history back/forward, व्यूपोर्ट सेट करें
बड़े आउटपुट को डिस्क पर सहेजना
बड़े टूल आउटपुट Claude Code जैसे CLI क्लाइंट में महत्वपूर्ण संदर्भ का उपभोग कर सकते हैं। screenshot_page, screenshot_by_uid, take_snapshot, list_console_messages,
list_network_requests, get_network_request, get_page_text,
evaluate_script, और
evaluate_privileged_script टूल एक वैकल्पिक saveTo पैरामीटर स्वीकार करते हैं जो इनलाइन लौटाने के बजाय परिणाम को फ़ाइल में लिखता है। saveTo तीन रूपों में से एक लेता है:
- एक फ़ाइल पथ (वर्तमान कार्यशील निर्देशिका के सापेक्ष, या
~/.firefox-devtools-mcpके भीतर निरपेक्ष; मूल निर्देशिकाएँ बनाई जाती हैं) - एक मौजूदा निर्देशिका (इसके अंदर एक टाइमस्टैम्प्ड फ़ाइल उत्पन्न होती है)
true(एक टाइमस्टैम्प्ड फ़ाइल~/.firefox-devtools-mcp/output/के अंतर्गत उत्पन्न होती है)
प्रतिक्रिया पथ और बाइट आकार लौटाती है। सहेजी गई फ़ाइल में हमेशा पूर्ण, बिना छंटा डेटा होता है: इनलाइन आकार सुरक्षा (कंसोल संदेश कैप, नेटवर्क हेडर ट्रंकेशन, स्नैपशॉट लाइन कैप) कभी भी उस पर लागू नहीं होती।
टेक्स्ट-उत्पादक टूल (स्क्रीनशॉट को छोड़कर सब कुछ) भी 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 })
डिफ़ॉल्ट रूप से, सहेजने के पथ प्रतिबंधित हैं: सापेक्ष पथ वर्तमान कार्यशील निर्देशिका के विरुद्ध हल होते हैं, और निरपेक्ष पथ केवल ~/.firefox-devtools-mcp के भीतर अनुमत हैं। इन स्थानों से बाहर निकलने वाले पथ अस्वीकार कर दिए जाते हैं। उस निर्देशिका के बाहर निरपेक्ष पथ सहित, मनमाने स्थानों पर लिखने के लिए सर्वर को --unrestricted-save-paths के साथ शुरू करें।
सहेजी गई फ़ाइलों को फिर उदाहरण के लिए Claude Code के Read टूल के साथ संदर्भ आकार को प्रभावित किए बिना देखा जा सकता है।
स्थानीय विकास
npm install
npm run build
# स्थानीय बिल्ड के साथ Inspector के विरुद्ध चलाएं
npx @modelcontextprotocol/inspector node dist/index.js --headless --viewport 1280x720
# या हॉट रीलोड के साथ डेव में चलाएं
npm run inspector:dev
स्थानीय विकास, परीक्षण और CI के बारे में अधिक विवरण के लिए CONTRIBUTING.md देखें।
समस्या निवारण
- Firefox नहीं मिला:
--firefox-path "/Applications/Firefox.app/Contents/MacOS/firefox"(macOS) या आपके OS पर सही पथ पास करें। - पहला रन धीमा है: Selenium BiDi सत्र सेट करता है; बाद के रन तेज़ होते हैं।
- पुराने UID: एक 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"] } }
-
संस्करण
- Pre‑1.0 API: संस्करण
0.xसे शुरू होते हैं। नवीनतम रिलीज़ के लिए npx के साथ@latestका उपयोग करें।
योगदान
समस्याएँ दर्ज करने, परीक्षण चलाने और प्रोजेक्ट पर स्थानीय रूप से काम करने के तरीके के लिए CONTRIBUTING.md देखें।
लेखक
Mozilla द्वारा अनुरक्षित।
लाइसेंस
आपकी पसंद पर MIT या Apache 2.0 में से किसी एक के तहत लाइसेंस प्राप्त।
