
خادم بروتوكول سياق النموذج (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 للمتصفح مخاطر متأصلة. بعض الممارسات الأساسية:
--tool-preset developer (البرمجة النصية، التصحيح) و--tool-preset mozilla (السياق المميز) توسع بشكل كبير ما يمكن للوكيل فعله.انظر SECURITY.md للحصول على تفصيل كامل للمخاطر وكيفية الإبلاغ عن الثغرات.
--firefox-path)موصى به: استخدم npx لتشغيل أحدث إصدار منشور من npm دائمًا.
الخيار أ — واجهة سطر أوامر 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
الخيار ب — تحرير ملف إعدادات Claude Code JSON
أضف إلى ملف تكوين Claude Code الخاص بك:
~/Library/Application Support/Claude/Code/mcp_settings.json~/.config/claude/code/mcp_settings.json%APPDATA%\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"
}
}
}
}
الخيار ج — سكربت مساعد (بناء تطوير محلي)
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 — فتح عنوان URL هذا عند البدء (START_URL)--accept-insecure-certs — تجاهل أخطاء TLS (ACCEPT_INSECURE_CERTS=true)--connect-existing — الاتصال بـ Firefox قيد التشغيل بدلاً من تشغيل واحدة جديدة (CONNECT_EXISTING=true)--marionette-port — منفذ Marionette لوضع الاتصال بموجود، الافتراضي 2828 ()يتم تجميع الأدوات في وحدات. يمكنك اختيار الوحدات التي سيتم عرضها إما باستخدام إعداد مسبق مسمى
(--tool-preset) أو بقائمة صريحة (--tools). عند تقديم كليهما، يفوز --tools ويتم
تجاهل الإعداد المسبق.
الوحدات: pages, snapshot, input, network, console, screenshot, utilities,
management, webextension, profiler, screencast, script, debugging, prefs,
privileged.
الإعدادات المسبقة (كل منها عبارة عن مجموعة شاملة للإعداد السابق):
slim — pages, snapshot, input, network, consolebasic (افتراضي) — slim بالإضافة إلى screenshot, utilities, management, webextension, profiler, screencastdeveloper — basic بالإضافة إلى , # استخدم الإعداد المسبق للمطور (يضيف أدوات البرمجة النصية والتصحيح)
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، والذي تتم إدارته تلقائيًا.
# عرض الأجهزة المتصلة
adb devices
# تشغيل Firefox لنظام Android على الجهاز المتصل الفردي
npx @mozilla/firefox-devtools-mcp --android-device auto
# استهداف جهاز معين
npx @mozilla/firefox-devtools-mcp --android-device <serial>
# استخدام Firefox Nightly بدلاً من ذلك
npx @mozilla/firefox-devtools-mcp --android-device <serial> --android-package org.mozilla.fenix
يتم التعامل مع إعادة توجيه المنفذ بين المضيف والجهاز تلقائيًا بواسطة geckodriver.
استخدم --connect-existing لأتمتة جلسة التصفح الحقيقية الخاصة بك، مع ملفات تعريف الارتباط، وتسجيلات الدخول، وعلامات التبويب المفتوحة سليمة:
# تشغيل Firefox مع Marionette ووكيل الوصول عن بُعد (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 بشكل طبيعي بعد ذلك.
saveTo اختياري)saveTo اختياري لبيئات CLI)saveTo اختياري للنتائج الضخمة)MOZ_REMOTE_ALLOW_SYSTEM_ACCESS=1)MOZ_REMOTE_ALLOW_SYSTEM_ACCESS=1)يمكن أن تستهلك مخرجات الأدوات الكبيرة سياقًا كبيرًا في عملاء CLI مثل Claude Code. تقبل أدوات
screenshot_page و screenshot_by_uid و take_snapshot و list_console_messages
و list_network_requests و get_network_request و 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-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)--log-file — كتابة سجلات خادم MCP إلى ملف بدلاً من stderr. مفيد لجلسات التصحيح مع عملاء MCP الذين يخفون مخرجات الخادم. قم بتعيين DEBUG=* لتضمين سجلات التصحيح التفصيلية أيضًا. مثال: --log-file /tmp/firefox-mcp.logscriptdebuggingmozilla — developer بالإضافة إلى prefs, privilegedall — كل الوحدات