
خادم بروتوكول سياق النموذج (Model Context Protocol) لأدوات مطوري Firefox - يتيح للمساعدين الذكاء الاصطناعي فحص متصفح Firefox والتحكم فيه عبر بروتوكول التصحيح عن بُعد.
خادم Model Context Protocol لأتمتة Firefox عبر WebDriver BiDi (من خلال Selenium WebDriver). يعمل مع Claude Code وClaude Desktop وCursor وCline وعملاء MCP آخرين.
المستودع: https://github.com/mozilla/firefox-devtools-mcp
ملاحظة: يتطلب خادم MCP هذا تثبيت متصفح Firefox محليًا ولا يمكن تشغيله على خدمات الاستضافة السحابية مثل glama.ai. استخدم
npx @mozilla/firefox-devtools-mcp@latestللتشغيل محليًا، أو استخدم Docker مع ملف Dockerfile المرفق.
تحمل خوادم 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
أضف إلى mcp_settings.json الخاص بـ Claude Code:
{
"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 — التشغيل بدون واجهة مستخدم (FIREFOX_HEADLESS=true)--viewport 1280x720 — حجم النافذة الأولي--profile-path — استخدام ملف تعريف Firefox محدد--firefox-arg — وسائط Firefox إضافية (قابلة للتكرار)--start-url — فتح هذا الرابط عند البدء (START_URL)--accept-insecure-certs — تجاهل أخطاء TLS (ACCEPT_INSECURE_CERTS=true)--connect-existing — الاتصال بجلسة Firefox قيد التشغيل بدلاً من إطلاق واحدة جديدة (CONNECT_EXISTING=true)--marionette-port — منفذ Marionette لوضع connect-existing، الافتراضي 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 صريحة لإزالته.
# استخدم الإعداد المسبق developer (يضيف أدوات الشبكة ووحدة التحكم وتصحيح الأخطاء وملف التعريف)
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-device لأتمتة Firefox الذي يعمل على جهاز Android. يتطلب adb في PATH الخاص بك وgeckodriver، الذي يُدار تلقائيًا.
تحذير: يمسح وضع Android جميع بيانات التطبيق المستهدف قبل كل جلسة. يتم فقدان علامات التبويب والسجل والإشارات المرجعية وكلمات المرور وملفات تعريف الارتباط والإعدادات. يشغّل geckodriver
adb shell pm clear <package>عند إنشاء الجلسة ولا يوفر طريقة لتخطيها، ثم يشغّل الجلسة على ملف تعريف مؤقت خاص به يُحذف بعد ذلك. لهذا السبب، يتطلب--android-device--android-wipe-app-data، ويجب عليك تثبيت بناء مخصص للأتمتة بدلاً من أتمتة المتصفح الذي تستخدمه. يتتبع Bug 2064088 إضافة خيار إلى geckodriver للاحتفاظ ببيانات التطبيق الحالية.
# عرض الأجهزة المتصلة
adb devices
# إطلاق Firefox لنظام Android على الجهاز المتصل الوحيد
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 لأتمتة جلسة التصفح الحقيقية الخاصة بك، مع ملفات تعريف الارتباط وعمليات تسجيل الدخول وعلامات التبويب المفتوحة سليمة:
# ابدأ Firefox مع Marionette وRemote Agent (BiDi)
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. تقبل أدوات
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 للكتابة إلى
مواقع عشوائية، بما في ذلك المسارات المطلقة خارج ذلك الدليل.
يمكن بعد ذلك عرض الملفات المحفوظة على سبيل المثال باستخدام أداة Read الخاصة بـ Claude Code دون التأثير على حجم السياق.
npm install
npm run build
# التشغيل مع Inspector ضد البناء المحلي
npx @modelcontextprotocol/inspector node dist/index.js --headless --viewport 1280x720
# أو التشغيل في وضع التطوير مع إعادة التحميل السريع
npm run inspector:dev
راجع CONTRIBUTING.md لمزيد من التفاصيل حول التطوير المحلي والاختبار وCI.
--firefox-path "/Applications/Firefox.app/Contents/MacOS/firefox" (macOS) أو المسار الصحيح على نظام التشغيل الخاص بك.take_snapshot) عندما تبلغ أداة UID أن أحدها اختفى.الحل 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. استخدم @latest مع npx لأحدث إصدار.راجع CONTRIBUTING.md لكيفية تقديم المشكلات وتشغيل الاختبارات والعمل على المشروع محليًا.
يُصان بواسطة Mozilla.
مرخص بموجب إما MIT أو Apache 2.0 حسب اختيارك.
MARIONETTE_PORT--pref name=value — تعيين تفضيل Firefox عند بدء التشغيل عبر moz:firefoxOptions (قابل للتكرار)--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 لنظام 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. حزم أخرى: org.mozilla.firefox_beta لـ Firefox Beta، org.mozilla.fenix لـ Firefox Nightly، org.mozilla.fenix.debug لـ Firefox Nightly Debug، org.mozilla.geckoview_example لـ geckoview (ANDROID_PACKAGE)--unrestricted-save-paths — السماح لمعامل saveTo بالكتابة في أي مكان على القرص بدلاً من الجذور الافتراضية. راجع حفظ المخرجات الكبيرة على القرص وملاحظة الأمان في SECURITY.md. (UNRESTRICTED_SAVE_PATHS=true)--log-file — كتابة سجلات خادم MCP إلى ملف بدلاً من stderr. مفيد لجلسات تصحيح الأخطاء مع عملاء MCP الذين يخفون مخرجات الخادم. اضبط DEBUG=* لتضمين سجلات تصحيح مفصلة أيضًا. مثال: --log-file /tmp/firefox-mcp.lognetworkconsoleprofilermozilla — developer بالإضافة إلى prefs, privilegedall — كل وحدة