
Model Context Protocol server for Firefox DevTools - AI सहायकों को Remote Debugging Protocol के माध्यम से Firefox ब्राउज़र का निरीक्षण और नियंत्रण करने में सक्षम बनाता है
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 सर्वर में अंतर्निहित जोखिम होते हैं। कुछ प्रमुख अभ्यास:
basic प्रीसेट में पहले से ही evaluate_script शामिल है; --tool-preset slim इसे हटा देता है। --tool-preset developer (डिबगिंग, नेटवर्क, कंसोल, प्रोफाइलर) और --tool-preset mozilla (विशेषाधिकार प्राप्त संदर्भ) जैसे उच्च प्रीसेट एजेंट की क्षमताओं को और बढ़ाते हैं।जोखिमों के पूर्ण विवरण और कमजोरियों की रिपोर्ट करने के तरीके के लिए SECURITY.md देखें।
--firefox-path पास करें)अनुशंसित: npx का उपयोग करें ताकि आप npm से नवीनतम प्रकाशित संस्करण चला सकें।
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 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
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/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
# Claude Code चुनें; स्क्रिप्ट JSON को सही पथ पर सहेजती है
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आप फ्लैग या पर्यावरण चर (दाईं ओर नाम) पास कर सकते हैं:
--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 ()टूल को मॉड्यूल में समूहीकृत किया गया है। आप चुनते हैं कि कौन से मॉड्यूल को नामित प्रीसेट (--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, , , ध्यान दें कि 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)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 द्वारा स्वचालित रूप से संभाली जाती है।
कुकीज़, लॉगिन और खुले टैब के साथ अपने वास्तविक ब्राउज़िंग सत्र को स्वचालित करने के लिए --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 देखें (स्रोत से उत्पन्न)।
saveTo का समर्थन करता है)saveTo का समर्थन करता है)saveTo का समर्थन करते हैं)saveTo का समर्थन करता है)saveTo के साथ)sandbox; बड़े परिणामों के लिए वैकल्पिक saveTo)MOZ_REMOTE_ALLOW_SYSTEM_ACCESS=1 की आवश्यकता है)MOZ_REMOTE_ALLOW_SYSTEM_ACCESS=1 की आवश्यकता है)MOZ_REMOTE_ALLOW_SYSTEM_ACCESS=1 की आवश्यकता है)बड़े टूल आउटपुट 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-path "/Applications/Firefox.app/Contents/MacOS/firefox" (macOS) या आपके OS पर सही पथ पास करें।take_snapshot) लें।समाधान 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"]
}
}
0.x से शुरू होते हैं। नवीनतम रिलीज़ के लिए npx के साथ @latest का उपयोग करें।समस्याएँ दर्ज करने, परीक्षण चलाने और प्रोजेक्ट पर स्थानीय रूप से काम करने के तरीके के लिए CONTRIBUTING.md देखें।
Mozilla द्वारा अनुरक्षित।
आपकी पसंद पर MIT या Apache 2.0 में से किसी एक के तहत लाइसेंस प्राप्त।
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.lognetworkconsoleprofilermozilla — developer प्लस prefs, privilegedall — हर मॉड्यूल