install_custom_node يفشل بالخطأ 405 Method Not Allowed عند /v2/manager/queue/task
السبب: يوجد جيلان من ComfyUI-Manager. فواجهة /v2/manager/* تنتمي إلى
سلالة v4 (حزمة pip المسمّاة comfyui_manager ≥ 4.x)، أمّا Manager 3.x
المُصدَر — وهو ما يثبّته ComfyUI-Manager افتراضيًا — فيقدّم قائمة الانتظار
نفسها عبر مسارات مختلفة.
الحل: حدّث comfyui-mcp إلى 0.24.3 أو أحدث — فهو يكتشف جيل Manager
تلقائيًا لكل هدف ويتحدّث اللهجتين معًا. ولا حاجة إلى أي تغيير في Manager.
اختياري لكنه موصى به — رقِّ إلى Manager v4 للحصول على الميزات التي يعجز
3.x عن تنفيذها عن بُعد (وأبرزها تنزيل النماذج من أي رابط، وهو ما يقيّده 3.x
بقائمة سماح):
useCmCli: true: يشغّل المسار البديل cm-cli واجهة سطر الأوامر
الخاصة بـ Manager كعملية فرعية، لذا فهو يحتاج إلى نظام الملفات المحلي — ولا
يمكنه العمل مع هدف بعيد أو هدف --tunnel، كما يحتاج إلى توجيه COMFYUI_PYTHON
إلى مفسّر بيئة venv الخاصة بـ ComfyUI عندما لا يكون python ضمن PATH. أمّا
للأهداف البعيدة، فمسار Manager عبر HTTP (وهو الافتراضي) هو الآلية الصحيحة.
عقدة مخصّصة مثبَّتة من رابط git لا تظهر أبدًا
التثبيت عبر معرّف السجل يعمل، أمّا التثبيت من رابط GitHub مباشر فيُبلّغ عن النجاح دون أن تظهر الحزمة إطلاقًا. السبب: يعتبر Manager التثبيت من روابط git الاعتباطية عالي الخطورة ويتخطّاه بصمت إذا كان مستوى الأمان أقل من المستوى المتساهل (مع أنه يظل يضع مهمة قائمة الانتظار في حالة “done”). وفي Manager 3.x يوجد إضافةً إلى ذلك خيار إعداد مخصّص باسمallow_git_url_install.
الحل: في ملف config.ini الخاص بـ Manager (ضمن دليل مستخدم ComfyUI لديك):
1.6 (ويتجاوزه متغيّر البيئة COMFY_SECURITY_LEVEL؛ ويُعاد فرض المستوى
عند كل إقلاع). أمّا الصورتان 1.4/1.5 فقد قُصد منهما ذلك، لكن أحد متغيّرات
البيئة المضمّنة في الصورة، وهو COMFY_SECURITY_LEVEL=normal-، تجاوز القيمة
الافتراضية في سكربت الإقلاع — وعلى هاتين الصورتين اضبط
COMFY_SECURITY_LEVEL=weak في بيئة الـ Pod. ولا تخفّف هذا الإعداد إلا على جهاز
تتحكّم فيه أنت — فهو يزيل حواجز الأمان التي يفرضها Manager على التثبيت.
RunPod: تبويب لوحة الوكيل فارغ — ملفاته موجودة لكنها كلها بحجم 0 بايت
يُدرج ComfyUI الحزمةcomfyui-mcp-panel لكن تبويب الشريط الجانبي لا يُحمَّل
أبدًا؛ ويُظهر ls -la /workspace/custom_nodes/comfyui-mcp-panel كل ملف بحجم
0 بايت. وقد تكون العقد التي ثبّتها المستخدم فارغة بالطريقة نفسها.
السبب: نفدت المساحة على وحدة التخزين الشبكية في وقت ما (غالبًا بسبب نسخ
نموذج الفحص السريع بحجم ~7 غيغابايت عند أول إقلاع على وحدة تخزين صغيرة، أو بسبب
تنزيل نموذج كبير). وعند حدوث ENOSPC يظل cp/git ينشئان كل ملف دون كتابة أي
شيء بداخله — وبما أن وحدة التخزين تبقى محفوظة، فإن هذه القوالب الفارغة تنجو من
كل عملية نشر جديدة.
الحل: حرّر مساحة على وحدة التخزين أو وسّعها، ثم أعد تشغيل الـ Pod. واعتبارًا
من الصورة 1.6 يحذّر سكربت الإقلاع عندما تكون المساحة منخفضة أو ممتلئة، ويتخطّى
نسخ نموذج الفحص السريع إذا لم يكن ليتّسع، ويصلح نفسه تلقائيًا عند وجود لوحة
بحجم 0 بايت (بإعادة الاستنساخ من GitHub، أو من النسخة المضمّنة في الصورة عند
انقطاع الاتصال). كما يسجّل WARN: custom nodes with 0-byte __init__.py مع تسمية
أي عقد أخرى معطوبة — أعد تثبيت تلك العقد عبر Manager. وعلى الصور <= 1.5، احذف
مجلد اللوحة ثم أعد التشغيل: rm -rf /workspace/custom_nodes/comfyui-mcp-panel.
اللوحة تقول «لا يوجد وكيل يستمع على الجسر (ws://127.0.0.1:9180)»
أنت تفتح ComfyUI في متصفح على جهاز مختلف عن الجهاز الذي يعمل عليه المنسّق. فالجسر مقصور على الاسترجاع المحلي (loopback) بحكم التصميم، و127.0.0.1 داخل
متصفحك يشير إلى جهاز المتصفح — لا إلى الخادم.
الحل — شغّل المنسّق على الجهاز الذي يوجد فيه المتصفح (هذه هي البنية
المدعومة؛ إذ يعمل الوكيل على جهازك أنت ويقود ComfyUI البعيد):
wss:// آمن — بالأمر نفسه.
أو شغّل المنسّق على جانب الخادم (0.24.5 أو أحدث) — وهذا مناسب لجهاز يعمل بلا
شاشة على مدار الساعة (مثل خادم Ollama/OpenClaw مستقل) حيث يُفترض أن يعيش الوكيل
بجوار ComfyUI وتتصل المتصفحات من أي مكان على الشبكة المحلية:
ws://<server-ip>:9180/?token=… — ضعه في
الإعدادات → خيارات متقدّمة → عنوان الجسر داخل اللوحة على أي جهاز، ثم انقر
«اتصال». والربط على عنوان غير محلي يرفض البدء بدون رمز، ويُفحص كل اتصال عند
ترقية WebSocket (بمقارنة ثابتة الزمن). تعامل مع هذا العنوان كأنه كلمة مرور: فكل
من يملكه يستطيع قيادة الوكيل.
صدر إصدار جديد لكنني ما زلت أرى السلوك القديم
يخزّنnpx الحزم مؤقتًا بشراهة — إذ قد يقدّم npx -y comfyui-mcp@latest بنية
عمرها أسابيع من ~/.npm/_npx.
/workspace على RunPod) من تثبيت أقدم، فإن تلك النسخة تحجب النسخة ذاتية
التحديث الموجودة في الصورة. نفّذ
git -C <panel-dir> fetch && git -C <panel-dir> reset --hard origin/main،
أو أعد تثبيت comfyui-agent-panel من ComfyUI-Manager، ثم أعد تشغيل ComfyUI
وحدّث تبويب المتصفح تحديثًا قسريًا (Ctrl+Shift+R).
ComfyUI بعيد مُمرَّر عبر منفذ يُكتشف خطأً كمحلي (dstack، أنفاق SSH)
ComfyUI البعيد الذي يمكن الوصول إليه علىlocalhost:8188 (عبر dstack أو
ssh -L أو kubectl port-forward) يُربك الاستدلال المبني على الاسترجاع المحلي:
إذ يفترض comfyui-mcp أن التثبيت محلي، فيفعّل الأدوات المحلية فقط على نظام ملفات
لا يوجد عليه ComfyUI أصلًا.
الحل (0.24.1 أو أحدث): مرّر --force-remote (أو
COMFYUI_MCP_FORCE_REMOTE=1):
~/.comfyui-mcp/instances/<host_port>/ (ويمكن تجاوزه بـ COMFYUI_MCP_DATA_DIR).
Docker: الحاوية تنتهي فورًا في وضع HTTP
الربط على مضيف غير محلي بدون مصادقة يفشل فشلًا قاطعًا بحكم التصميم (لأن نقطة النهاية/mcp المفتوحة على 0.0.0.0 ستكون مكشوفة). مرّر رمزًا، أو ألغِ هذا
التحقق صراحةً:
الوكيل لا يستدعي أي أداة إطلاقًا — بلا خطأ، يكتفي بالكلام
يصف سير العمل لديك بدلًا من قراءته، أو يعرض عليك كتابة سكربت. ولا يظهر أي خطأ لأن شيئًا لم يفشل: فإمّا أن الأدوات لم تصل إلى عميلك أصلًا، أو أن عميلك يوقف الاستدعاءات، أو أن القدرة موجودة تحت اسم لم يرد ذكره قط. وهذه الحالات الثلاث تبدو متطابقة من الخارج ولها حلول متعاكسة، لذا فالتخمين أسوأ من التحقّق. وسؤالان توجّههما إلى وكيلك يكفيان للتمييز بينها — راجع عندما لا يقول شيئًا. وانتبه إلى أن حجب الأذونات من جانب العميل لا يصل إلى هذا الخادم إطلاقًا، لذا لن يُظهره أي من السجلات المذكورة أدناه.النماذج المحلية: استدعاءات الأدوات تفشل أو النموذج «لا يرى» الأدوات
- أول خطوة: استخدم نموذجنا المضبوط —
ollama pull artokun/gemma4-comfyui-mcp:e4b(وهو افتراضي Ollama في اللوحة). إنه Gemma 4 مدرَّب على مجموعة أدوات comfyui-mcp نفسها، وهو ما يزيل معظم حالات فشل «الأداة الخاطئة / الوسائط المشوَّهة» منذ البداية (استخدم:e2bلنحو 2 غيغابايت من ذاكرة VRAM، و:12bلنحو 8 غيغابايت — وكل درجة تتفوّق على نموذجها الأساسي الأصلي في الحلبة؛ ويبقى:e4bهو النقطة المثلى). - gemma3 لا يدعم استدعاء الأدوات أصلًا في Ollama — غير مدعوم؛ استخدم
نسختنا المضبوطة أعلاه، أو
gemma4الأصلي (e4b وما فوق)، أوqwen3، أوllama3.1+. - فعّل وضع الأدوات المضغوط مع النماذج الصغيرة — فهو
ليس الافتراضي، لذا شغّل الخادم بالخيار
--compact(أوCOMFYUI_MCP_TOOL_MODE=compact). وبدونه تفيض مساحة المخطط الكاملة عن سياق صغير، فيبدأ النموذج في اختلاق أسماء أدوات. - قد يستغرق تحميل نموذج بارد أكثر من 30 ثانية قبل أول رمز — ومراقب اللوحة يأخذ
ذلك في الحسبان، لكن الطلب الذي يموت فورًا يعني عادةً أن وسم النموذج لم
يُنزَّل بعد (
ollama pull <tag>). - كل الطلبات تفشل فجأة / رُفض الاتصال على المنفذ 11434 — تطبيق Ollama أو
خدمته لا يعمل. فإغلاق تطبيق شريط المهام يقتل واجهة API معه، وهو أمر يسهل
فعله سهوًا أثناء تشغيل الوكيل (واللوحة لا تعطي أي تحذير بأن خلفية محلية قيد
الاستخدام). أعد تشغيل التطبيق (أو
ollama serve) ثم أعد الاتصال — تُستأنف الجلسات، ولا حاجة إلى إعادة تشغيل اللوحة.
أين تبحث عن السجلات
- المنسّق: الطرفية التي تشغّل
connect/--panel-orchestrator. - جانب ComfyUI: أداة MCP المسمّاة
get_system_stats (action:"logs")، أو تدفّق سجلات الـ Pod على RunPod. - JS اللوحة: وحدة تحكّم أدوات المطوّر في المتصفح (يسجّل عميل الجسر انتقالات الاتصال/إعادة الاتصال).
- الحالة في استدعاء واحد: تجمع أداة
get_system_stats (action:"health")معلومات الإصدار وGPU وVRAM وقائمة الانتظار وأدلة النماذج والأخطاء الأخيرة.