firefox-devtools-mcp
आधिकारिकफ़ायरफ़ॉक्स डेवटूल्स के लिए मॉडल कॉन्टेक्स्ट प्रोटोकॉल सर्वर - AI सहायकों को रिमोट डिबगिंग प्रोटोकॉल के माध्यम से फ़ायरफ़ॉक्स ब्राउज़र का निरीक्षण और नियंत्रण करने में सक्षम बनाता है
Firefox DevTools MCP के साथ आप क्या कर सकते हैं?
- एजेंटिक ब्राउज़िंग — अपने असिस्टेंट से पेज नेविगेट करने, फ़ॉर्म भरने, और
take_snapshot,click_by_uid, तथाfill_by_uidका उपयोग करके मल्टी-स्टेप वर्कफ़्लो पूरे करने के लिए कहें। - वेब डेवलपमेंट निरीक्षण — असिस्टेंट से अपना पेज लोड करवाएं और
list_console_messages,list_network_requests, तथाlist_downloadsके माध्यम से कंसोल संदेश, नेटवर्क अनुरोध, और डाउनलोड की जांच करवाएं। - JavaScript मूल्यांकन — डेटा निकालने या कार्यक्षमता परीक्षण के लिए
evaluate_scriptके साथ पेज संदर्भ में कस्टम स्क्रिप्ट चलाएं। - स्क्रीनशॉट कैप्चर —
screenshot_pageके साथ पेज स्क्रीनशॉट का अनुरोध करें, और वैकल्पिक रूप सेsaveToपैरामीटर के माध्यम से बड़े आउटपुट को सीधे डिस्क पर सहेजें। - पेज प्रबंधन —
list_pages,select_page, औरnavigate_pageका उपयोग करके खुले टैब के बीच स्विच करें और नए URL पर नेविगेट करें।
दस्तावेज़
Firefox DevTools MCP
Model Context Protocol सर्वर जो AI एजेंटों को Firefox उपयोग करने देता है। इसके दो मुख्य उपयोग हैं:
- एजेंटिक ब्राउज़िंग: एजेंट ब्राउज़र का उपयोग नियमित कार्यों के लिए करता है, जैसे पृष्ठ पढ़ना, फ़ॉर्म भरना और वेबसाइटों पर बहु-चरणीय प्रवाह से गुजरना।
- एजेंट-सहायता प्राप्त वेब विकास: एजेंट उस पृष्ठ को लोड करता है जिस पर आप काम कर रहे हैं और डेवलपर टूल्स से उसका निरीक्षण करता है, जैसे कंसोल, नेटवर्क अनुरोध, डिबगर और प्रोफाइलर।
यह 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 प्रोफ़ाइल का उपयोग करें। अपने नियमित प्रोफ़ाइल के विरुद्ध सर्वर कभी न चलाएं — एजेंट के पास वह सब कुछ पहुंच है जो ब्राउज़र तक पहुंच सकता है, जिसमें कुकीज़ और सहेजे गए सत्र शामिल हैं।
- आप किन साइटों पर जाते हैं, इस बारे में सतर्क रहें। पृष्ठ एजेंट को हेरफेर करने के लिए डिज़ाइन की गई सामग्री लौटा सकते हैं (प्रॉम्प्ट इंजेक्शन)। उन साइटों पर टिके रहें जिन्हें आप नियंत्रित करते हैं या भरोसा करते हैं।
- केवल उन्हीं टूल मॉड्यूल को सक्षम करें जिनकी आपको आवश्यकता है। डिफ़ॉल्ट
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
# 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
विकल्प 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
# 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_requestlist_downloads(हमेशा-चालू कैप्चर),set_download_behaviorscreenshot_page,list_console_messages
CLI विकल्प
आप फ़्लैग या पर्यावरण चर (दाईं ओर नाम) पास कर सकते हैं:
--firefox-path— Firefox बाइनरी का पूर्ण पथ--headless— बिना UI के चलाएं (FIREFOX_HEADLESS=true)--viewport 1280x720— प्रारंभिक विंडो आकार--profile-path— विशिष्ट Firefox प्रोफ़ाइल का उपयोग करें। Firefox उस पथ केfirefox_devtools_mcp_profileउपफ़ोल्डर में चलता है, जिसे.firefox-devtools-mcpफ़ाइल से चिह्नित किया जाता है;--profile-pathको चिह्नित प्रोफ़ाइल पर इंगित करना इसे सीधे पुन: उपयोग करता है--firefox-arg— अतिरिक्त Firefox तर्क (दोहराने योग्य)--start-url— प्रारंभ पर यह URL खोलें (START_URL)--accept-insecure-certs— TLS त्रुटियों को अनदेखा करें (ACCEPT_INSECURE_CERTS=true)--connect-existing— नया लॉन्च करने के बजाय पहले से चल रहे Firefox से जुड़ें (CONNECT_EXISTING=true)--marionette-port— कनेक्ट-मौजूदा मोड के लिए 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— Firefox for Android मोड सक्षम करें; मान 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— MCP सर्वर लॉग को stderr के बजाय फ़ाइल में लिखें। MCP क्लाइंट्स के साथ डिबगिंग सत्रों के लिए उपयोगी जो सर्वर आउटपुट छिपाते हैं। वर्बोज़ डिबग लॉग भी शामिल करने के लिएDEBUG=*सेट करें। उदाहरण:--log-file /tmp/firefox-mcp.log
टूल मॉड्यूल और प्रीसेट
टूल्स को मॉड्यूल में समूहीकृत किया गया है। आप चुनते हैं कि कौन से मॉड्यूल को नामित प्रीसेट (--tool-preset) या स्पष्ट सूची (--tools) के साथ उजागर करना है। जब दोनों दिए जाते हैं, तो --tools जीतता है और प्रीसेट को अनदेखा किया जाता है।
प्रीसेट (प्रत्येक पिछले का सुपरसेट है):
slim— पृष्ठों को ब्राउज़ करने और इंटरैक्ट करने के लिए न्यूनतमbasic(डिफ़ॉल्ट) — नियमित ब्राउज़िंग के लिए टूल जोड़ता हैdeveloper— वेब डेवलपर्स के लिए टूल जोड़ता हैmozilla— Firefox डेवलपर्स के लिए टूल जोड़ता हैall— हर मॉड्यूल
मॉड्यूल की सूची और प्रत्येक प्रीसेट में मॉड्यूल के लिए docs/tools.md देखें।
ध्यान दें कि basic, डिफ़ॉल्ट, में script और इसलिए evaluate_script टूल शामिल है। हमले की सतह के लिए इसका क्या अर्थ है, यह देखने के लिए SECURITY.md देखें, और इसे हटाने के लिए --tool-preset slim या स्पष्ट --tools सूची का उपयोग करें।
# 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
prefs और privileged मॉड्यूल को MOZ_REMOTE_ALLOW_SYSTEM_ACCESS=1 की आवश्यकता होती है और केवल Mozilla-आंतरिक बिल्ड में उपलब्ध हैं। launch मॉड्यूल को भी Mozilla-आंतरिक बिल्ड की आवश्यकता होती है: यह Firefox को कॉलर-चुने गए बाइनरी, प्रोफ़ाइल, पर्यावरण और प्राथमिकताओं के सेट के तहत पुनः आरंभ करता है, जो एक कॉन्फ़िगरेशन परिवर्तन है जिसे ऑपरेटर को स्वामित्व लेना चाहिए। इसके बजाय --pref, --firefox-path और अन्य कमांड-लाइन विकल्पों का उपयोग करें। bidi मॉड्यूल को भी Mozilla-आंतरिक बिल्ड की आवश्यकता होती है: यह कोई भी WebDriver BiDi कमांड भेजता है, इसलिए यह उस तक पहुंच देता है जो अन्य मॉड्यूल उजागर करते हैं। सार्वजनिक पैकेज इन मॉड्यूल को अनुरोधित होने पर भी छोड़ देता है और उन मॉड्यूल के नाम बताते हुए एक चेतावनी लॉग करता है जिन्हें उसने छोड़ा।
उपयोगी प्राथमिकताएँ (--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 सेट करने की भी आवश्यकता है।
Firefox for Android
Android डिवाइस पर चल रहे Firefox को स्वचालित करने के लिए --android-device का उपयोग करें। आपके PATH पर adb और geckodriver की आवश्यकता है, जो स्वचालित रूप से प्रबंधित होता है।
चेतावनी: Android मोड प्रत्येक सत्र से पहले लक्षित ऐप का सारा डेटा मिटा देता है। टैब, इतिहास, बुकमार्क, पासवर्ड, कुकीज़ और सेटिंग्स सभी खो जाते हैं। geckodriver सत्र बनाते समय
adb shell pm clear <package>चलाता है और इसे छोड़ने का कोई तरीका नहीं देता, फिर सत्र को अपने अस्थायी प्रोफ़ाइल पर चलाता है जिसे बाद में हटा दिया जाता है। इस वजह से,--android-deviceको--android-wipe-app-dataकी आवश्यकता होती है, और आपको स्वचालन के लिए समर्पित बिल्ड इंस्टॉल करना चाहिए न कि उस ब्राउज़र को स्वचालित करना जिसे आप उपयोग करते हैं। Bug 2064088 मौजूदा ऐप डेटा रखने के लिए geckodriver में एक विकल्प जोड़ने पर नज़र रखता है।
# 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
होस्ट और डिवाइस के बीच पोर्ट फ़ॉरवर्डिंग geckodriver द्वारा स्वचालित रूप से संभाली जाती है।
मौजूदा Firefox से कनेक्ट करें
कुकीज़, लॉगिन और खुले टैब के साथ अपने वास्तविक ब्राउज़िंग सत्र को स्वचालित करने के लिए --connect-existing का उपयोग करें:
# 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
दोनों फ़्लैग आवश्यक हैं क्योंकि 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 देखें।
बड़े आउटपुट को डिस्क पर सहेजना
बड़ा टूल आउटपुट Claude Code जैसे CLI क्लाइंट्स में महत्वपूर्ण संदर्भ का उपभोग कर सकता है। कई
टूल एक वैकल्पिक saveTo पैरामीटर स्वीकार करते हैं जो परिणाम को इनलाइन लौटाने के बजाय फ़ाइल में लिखता है। सूची के लिए docs/tools.md देखें।
saveTo तीन रूपों में से एक लेता है:
- एक फ़ाइल पथ (वर्तमान कार्यशील निर्देशिका के सापेक्ष, या
~/.firefox-devtools-mcp/outputके भीतर पूर्ण; मूल निर्देशिकाएँ बनाई जाती हैं)। Firefox प्रोफ़ाइल तक पहुंचने वाले पथ, या यह सर्वर जिन फ़ाइलों को वापस पढ़ता है, अस्वीकार कर दिए जाते हैं - एक मौजूदा निर्देशिका (इसके अंदर एक टाइमस्टैम्प्ड फ़ाइल उत्पन्न होती है)
true(~/.firefox-devtools-mcp/output/के तहत एक टाइमस्टैम्प्ड फ़ाइल उत्पन्न होती है)
प्रतिक्रिया पथ और बाइट आकार लौटाती है। सहेजी गई फ़ाइल में हमेशा पूर्ण, अनट्रंकेटेड डेटा होता है: इनलाइन आकार सुरक्षा (कंसोल संदेश कैप, नेटवर्क हेडर ट्रंकेशन, स्नैपशॉट लाइन कैप) कभी भी उस पर लागू नहीं होती।
टेक्स्ट-उत्पादक टूल भी preview स्वीकार करते हैं, सहेजे गए आउटपुट के कुछ वर्णों की संख्या
एक छोटे अंश के रूप में इनलाइन वापस गूंजने के लिए। docs/tools.md में सूची दिखाती है कि कौन से टूल इसका समर्थन करते हैं।
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
# 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 सत्र सेट करता है; बाद के रन तेज़ होते हैं।
- पुराने UIDs: एक 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 में से किसी एक के तहत लाइसेंस प्राप्त।