firefox-devtools-mcp
आधिकारिकफ़ायरफ़ॉक्स डेवटूल्स के लिए मॉडल कॉन्टेक्स्ट प्रोटोकॉल सर्वर - AI सहायकों को रिमोट डिबगिंग प्रोटोकॉल के माध्यम से फ़ायरफ़ॉक्स ब्राउज़र का निरीक्षण और नियंत्रण करने में सक्षम बनाता है
Firefox DevTools MCP के साथ आप क्या कर सकते हैं?
- पेजों पर नेविगेट करें और निरीक्षण करें — URL खोलने, खुले टैब सूचीबद्ध करने, पेज स्विच करने, या
navigate_page,list_pages, औरget_page_textके माध्यम से पेज टेक्स्ट निकालने के लिए कहें। - पेज तत्वों के साथ इंटरैक्ट करें —
take_snapshotके साथ एक्सेसिबिलिटी स्नैपशॉट लें, फिरclick_by_uidऔरfill_by_uidके साथ उनके UID का उपयोग करके तत्वों पर क्लिक करें, भरें, या होवर करें। - नेटवर्क और कंसोल गतिविधि की निगरानी करें —
list_network_requests/get_network_requestके साथ कैप्चर किए गए नेटवर्क अनुरोध प्राप्त करें, याlist_console_messagesके माध्यम से कंसोल संदेश पढ़ें। - स्क्रीनशॉट और रिकॉर्डिंग कैप्चर करें —
screenshot_pageके साथ पेज स्क्रीनशॉट सहेजें, याscreencast_start/screencast_stopका उपयोग करके व्यूपोर्ट को वीडियो में रिकॉर्ड करें। - कस्टम JavaScript चलाएं —
evaluate_scriptके साथ पेज संदर्भ में मनमानी स्क्रिप्ट निष्पादित करें, वैकल्पिक रूप से एक अलगsandboxक्षेत्र में। - डाउनलोड और ब्राउज़र स्थिति प्रबंधित करें —
list_downloads/clear_downloadsके साथ डाउनलोड सूचीबद्ध या साफ़ करें,set_download_behaviorके माध्यम से डाउनलोड व्यवहार नियंत्रित करें, याrestart_firefoxके साथ 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
# 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-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— 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 सूची का उपयोग करें।
# 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-आंतरिक बिल्ड में उपलब्ध हैं। सार्वजनिक पैकेज अनुरोध किए जाने पर भी उन्हें छोड़ देता है और
उन मॉड्यूलों के नाम बताते हुए एक चेतावनी लॉग करता है जिन्हें उसने छोड़ दिया।
उपयोगी प्राथमिकताएँ (--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 देखें, जिसमें विवरण और पैरामीटर शामिल हैं (स्रोत से उत्पन्न)।
- पेज: 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
- नेटवर्क: 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
# 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 तब तक मान्य रहता है जब तक उसका तत्व हटाया नहीं जाता या पृष्ठ नेविगेट नहीं करता; जब कोई 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 में से किसी एक के तहत लाइसेंस प्राप्त।