خطأ تسجيل الدخول إلى Codex MCP: كيف تُصلح Auth Unsupported
يعرض Codex الرسالة Auth Unsupported بجوار خادم MCP، وإما أن يرفض الأمر codex mcp login العمل، وإما يُبلغ بأنه لم يجد أي دعم للتفويض. يوضح هذا المقال متى تكون هذه الرسالة غير ضارة، وكيف تميّز بين خادم stdio وخادم HTTP، وثلاثة حلول: متغير توكن الحامل، وتسجيل دخول OAuth نظيف، وجسر mcp-remote. كما يتناول التراجع الخاص بنظام macOS وخطأ اتصال يشبهه في الشكل.
تشغّل codex mcp list، فيظهر الخادم الجديد، وتعرض خانة Auth الكلمة Unsupported. ثم إما أن يرفض codex mcp login البدء، وإما يتوقف برسالة تشكو من غياب دعم التفويض. لا تظهر الأدوات في جلستك أبدًا، ولا يخبرك شيء في المخرجات بأي مشكلة من مشكلات عدة مختلفة واجهتها.
تُرتّب هذه الصفحة المشكلات بالترتيب الذي يجب أن تفحصها به. أولًا، هل تمثل Unsupported مشكلة أصلًا، لأنها بالنسبة إلى بعض الخوادم التسمية الصحيحة. ثم ثلاثة حلول (توكن الحامل، وتسجيل دخول OAuth نظيف، وجسر stdio)، وتراجع في macOS أُبلغ عنه في يوليو 2026، وخطأ يشبه غيره ولا علاقة له بتسجيل الدخول.
💡 الإجابة المختصرة:Unsupported تعني أن Codex لم يجد أي شيء يستخدمه للمصادقة. بالنسبة إلى خادم stdio فهذا أمر طبيعي. أما بالنسبة إلى خادم HTTP يحتاج بيانات اعتماد، فامنح Codex متغير توكن حامل، وأعد تشغيل codex mcp login <name> على إصدار حديث من Codex، أو مرّر الخادم عبر mcp-remote.
ماذا تعني Auth Unsupported
مصدر هذه التسمية
يحسب Codex خانة Auth بنفسه. وفقًا لشرح الأمر الفرعي codex mcp، يتحقق كلٌّ من list وget من ثلاثة أمور لكل خادم:
هل توجد متغيّر بيئة لتوكن الحامل مضبوط، وهل له قيمة فعلًا؟
هل توجد توكنات OAuth محفوظة في مخزن بيانات الاعتماد؟
هل تُعلن نقطة نهاية HTTP عن بيانات وصفية تخص OAuth؟
إذا لم ينطبق أيٌّ من هذه الأمور الثلاثة، تعرض الخانة Unsupported. تصف التسمية ما يستطيع Codex رؤيته، لا ما يحتاجه الخادم. قد يطلب الخادم تسجيل الدخول ومع ذلك تظهر Unsupported إذا كانت بياناته الوصفية مفقودة أو تالفة أو غير قابلة للوصول من جهازك.
حالات الخانة في لمحة
ما تراه
ما يعنيه
الخطوة التالية
Unsupported
لا يوجد متغير توكن، ولا توكنات محفوظة، ولا بيانات وصفية تخص OAuth (أو الخادم من نوع stdio)
تحقّق من نوع الخادم أدناه
Authenticated
متغير توكن مضبوط أو توكنات OAuth محفوظة
لا شيء يحتاج إصلاحًا، تأكد فقط من تحميل الأدوات
تسمية تدل على تسجيل الخروج
الخادم يعلن دعم OAuth، لكن لا يوجد توكن محفوظ
شغّل codex mcp login <name>
تعرض الأمثلة الرسمية authenticated وunsupported. تتغيّر صياغة حالة تسجيل الخروج بين الإصدارات، لذا تعامل مع الخانة كمؤشر فقط، وتأكد باستخدام /mcp داخل واجهة Codex النصية، والتي تسرد خوادم MCP النشطة لديك. تتضمن وثائق Codex الرسمية عن MCP القائمة الكاملة لإعدادات الخوادم.
لنسخ النتيجة بشكل نظيف إلى تذكرة أو سكربت، يطبع codex mcp list --json وcodex mcp get my-server --json بيانات الحالة نفسها بصيغة يمكن للآلة قراءتها. وهذه أيضًا أسرع طريقة لمقارنة جهاز يعمل فيه تسجيل الدخول بجهاز لا يعمل فيه.
stdio أم HTTP: تحقّق من نوع الخادم
قبل أن تغيّر أي شيء، اعرف نوع الخادم الذي سجّلته. افتح ~/.codex/config.toml وانظر إلى المدخل. سطر command يعني أن الخادم من نوع stdio، وسطر url يعني أنه HTTP متدفق (streamable HTTP). يعتمد الحل كليًا على هذا الفرق.
خوادم stdio: Unsupported أمر طبيعي
خادم stdio عملية محلية يبدؤها Codex ويتواصل معها عبر الإدخال والإخراج القياسيين:
ينتمي OAuth إلى نقل HTTP. تقول المرجعية ذلك بوضوح: "OAuth login is only supported for streamable HTTP servers." لذلك يُرفض codex mcp login local-tools بحكم التصميم، وتكون Unsupported هي التسمية المتوقعة. إذا كان ذلك الخادم يحتاج إلى بيانات اعتماد، فمرّرها عبر env أو env_vars في الجدول نفسه، بدلًا من محاولة تسجيل الدخول.
💡 الخادم العام الذي لا يحتاج إلى مصادقة سيُظهر Unsupported أيضًا. إذا ظهرت الأدوات في جلستك، فلا يوجد ما يحتاج إصلاحًا.
لصق التوكن داخل bearer_token_env_var. هذا الحقل يأخذ اسم المتغير، لا السر نفسه.
التصدير في الصدفة (shell) الخطأ. المتغير المضبوط في تبويب طرفية واحد غير مرئي في تبويب آخر.
تشغيل Codex من أيقونة في المحرر أو الشريط. غالبًا ما تفوت هذه العمليات المتغيرات المصدّرة في ملف إعدادات الصدفة لديك. ابدأ Codex من الطرفية التي تحتوي على المتغير، أو اضبطه على مستوى النظام.
تخزين سطر الترويسة كاملًا. احتفظ بقيمة التوكن فقط، لأن Codex يرسلها في ترويسة Authorization نيابةً عنك.
شغّل codex mcp list مرة أخرى. يجب أن تخرج الخانة من حالة Unsupported بمجرد ضبط المتغير.
في CI، خزّن التوكن كسر مقنّع (masked secret) وصدّره في خطوة المهمة التي تشغّل Codex. يبقى اسم المتغير في config.toml كما هو، لذلك يمكن أن يبقى الملف داخل المستودع دون تسريب أي شيء.
الحل 2: تشغيل تسجيل الدخول عبر OAuth
عندما يتوقع الخادم OAuth، لا يوجد توكن تلصقه. يجب أن يمرّ Codex بتسجيل دخول عبر المتصفح ثم يحفظ النتيجة.
يفتح الأمر الأول المتصفح. وافق على الطلب، ثم عُد إلى الطرفية. ويطلب الثاني نطاقات محددة عندما تكون الإعدادات الافتراضية للخادم ضيقة جدًا. ويمسح الثالث بيانات الاعتماد المحفوظة، ويطبع إما Removed OAuth credentials for 'my-server' وإما No OAuth credentials stored for 'my-server'.
العمل عبر SSH أو على جهاز بلا واجهة رسومية هو الفخ المعتاد. تُفتح صفحة تسجيل الدخول في المتصفح، ثم يُعيد المزوّد التوجيه إلى عنوان callback يجب أن يصل إلى الجهاز الذي يشغّل Codex. على مضيف بعيد، غالبًا ما يصل هذا التوجيه إلى حاسوبك المحمول بدلًا من ذلك، فلا يكتمل تسجيل الدخول أبدًا. وجّه منفذ callback، أو اختر الحل 1 أو الحل 3 لذلك الجهاز.
عندما يستمر تسجيل الدخول في الفشل، اخرج أولًا ثم سجّل الدخول من جديد، حتى لا تحارب جلسة قديمة. وافعل الشيء نفسه قبل حذف مدخل الخادم، لأن إزالة المدخل لا تُلغي التوكنات المخزنة ولا تحذفها.
ثبّت المورد وعنوان العودة
المزوّدون الذين يتبعون قواعد OAuth الأحدث يربطون كل توكن بعنوان URL واحد قياسي للمورد. توصي ملاحظات MintMCP عن Codex بضبط oauth_resource صراحةً في مدخل الخادم، بدلًا من ترك Codex يشتقه، وبالإبقاء على عنوان URL نفسه عبر نقطة نهاية MCP، والبيانات الوصفية للمورد، وطلب التفويض، وجمهور التوكن (audience):
أضف الجدول oauth فقط عندما يكون المزوّد قد أعطاك معرّف عميل مسجلًا مسبقًا. يجب أن يطابق عنوان العودة تمامًا، حرفًا بحرف، ما يحفظه المزوّد لديه.
وصل دعم OAuth إلى Codex على مراحل، لذلك يهم إصدارك:
الإصدار
التاريخ
ما الذي تغيّر
rust-v0.131.0
2026-05-18
معرّفات عملاء OAuth صريحة في MCP وربط عنوان العودة
rust-v0.134.0
2026-05-26
codex mcp add يقبل خيارات OAuth لخوادم HTTP
rust-v0.142.0
2026-06-22
البحث عن البيانات الوصفية للمورد المحمي (RFC 9728)
rust-v0.144.0
2026-07-09
إعادة المصادقة التفاعلية بعد خطأ 401 أثناء الجلسة
rust-v0.145.0
2026-07-21
لم يعد بدء التشغيل يتوقف على عمليات البحث في OAuth، وتُنفَّذ تحديثات بيانات الاعتماد واحدة تلو الأخرى
قد يعمل خادم على أحدث إصدار ويفشل على إصدار أقدم بشهرين، لأن عملية البحث سلكت مسارًا مختلفًا. تحقّق باستخدام codex --version، ثم حدّث عبر المثبّت الذي استخدمته، مثل npm i -g @openai/codex@latest.
الحل 3: وضع mcp-remote في المنتصف
أحيانًا يكون الخادم سليمًا، ويكون توكنك سليمًا، ومع ذلك يُبلغ Codex بأنه Unsupported. أبسط حل هو ألّا تطلب من Codex تنفيذ OAuth أصلًا. حزمة mcp-remote وكيل stdio صغير يتواصل مع الخادم البعيد ويشغّل تسجيل الدخول عبر المتصفح بنفسه، فلا يرى Codex سوى عملية محلية.
ارفع startup_timeout_sec فوق قيمته الافتراضية البالغة 10 ثوانٍ. ينتظر التشغيل الأول إتمام تسجيل الدخول في المتصفح، ومهلة قصيرة تقتل العملية قبل أن تتمكن من النقر على أي شيء. أزل أي مدخل أقدم بالاسم نفسه أولًا، حتى لا يتعارض الاثنان.
التنازلات التي عليك قبولها
ستستمر خانة Auth في عرض Unsupported. وهذا متوقع، لأن Codex يرى الآن خادم stdio، والجسر يتولى المصادقة.
تعتمد على توفر Node وnpx في المكان الذي يعمل فيه Codex.
تعيش التوكنات في ذاكرة التخزين المؤقت الخاصة بالجسر (عادةً في ~/.mcp-auth)، لا في Codex. إذا استمر تسجيل دخول سيئ في إعادة نفسه، فامسح ذلك المجلد.
تتجاوز مسار OAuth في Codex، مما يعني أنه لا توجد إعادة مصادقة يديرها Codex بعد خطأ 401 أثناء الجلسة.
بالنسبة إلى خادم تستخدمه يوميًا، يُعد هذا إعدادًا دائمًا معقولًا. أما للاختبار لمرة واحدة، فالحل 1 أسرع.
ما زال الخطأ قائمًا بعد الإصلاح؟
macOS: لم يُكتشف أي دعم للتفويض
يستحق خطأ واحد بندًا خاصًا به. توثّق MintMCP حالة يتوقف فيها codex mcp login برسالة No authorization support detected على macOS، بدءًا من الإصدارات المؤرخة في 2026-07-22. مع خادم OAuth متوافق مع المواصفات، يسجّل إصدار Codex نفسه الدخول بنجاح على Linux، ويفشل في خطوة البيانات الوصفية على macOS. وتُتابَع المشكلة باسم openai/codex#34684.
قبل أن تلوم الخادم، اختبر بياناته الوصفية من الجهاز الذي يفشل:
إذا كان الرد جسم JSON، فهذا يعني أن الخادم ينشر ما تطلبه المواصفات، وأن المشكلة في جانب Codex. بعض الخوادم تُلحق مسار نقطة النهاية بدلًا من ذلك، مثل /.well-known/oauth-protected-resource/mcp. خياراتك، مرتبة حسب الجهد المطلوب:
حدّث Codex وأعد المحاولة، لأن الإصلاحات تُطرح بكثرة.
استخدم توكن الحامل (الحل 1) إذا كان المزوّد يوفره.
مرّر الاتصال عبر mcp-remote (الحل الثالث)، وهذا ينقل تدفق OAuth خارج Codex.
انغلاق الاتصال عند initialize
بعض الأخطاء تبدو كأنها أخطاء مصادقة، وليست كذلك. يصف تقرير في المشكلة #5619 على GitHub أن Codex CLI بالإصدار v0.47.0 يتصل بخادم HTTP متدفق باستخدام توكن حامل، وينتهي بالرسالة connection closed: initialize response. أعلن العميل إصدار البروتوكول 2025-06-18، لكنه تصرف كنقل 2024-11-05 الأقدم، إذ أغلق الاتصال مباشرةً بعد حدث endpoint ولم ينتظر رد initialize أبدًا. وكان الخادم نفسه يعمل في Cursor.
إذا كان خطأك يقول connection closed بدلًا من unsupported، فلن يفيد أي تغيير في التوكن. حدّث إلى إصدار حديث من Codex، وتأكد من نوع النقل الذي يتحدث به الخادم فعليًا، لأن نقطة نهاية من نمط SSE القديم ونقطة نهاية HTTP متدفقة ليستا قابلتين للتبادل.
قائمة فحص في خمس دقائق
شغّل codex --version، وحدّث إذا كان قد مضى عليه أكثر من شهرين.
شغّل codex mcp get my-server ولاحظ ما إذا كان المدخل يستخدم command أو url.
بالنسبة إلى مدخلات command، تقبّل Unsupported وأصلح عملية الخادم بدلًا من ذلك.
بالنسبة إلى مدخلات url، اضبط bearer_token_env_var أو شغّل codex mcp login my-server.
اختبر البيانات الوصفية باستخدام curl مقابل /.well-known/oauth-protected-resource.
على macOS، جرّب جسر mcp-remote قبل أن تقضي ساعة في النظريات.
افتح /mcp في الواجهة النصية وتأكد من ظهور الخادم.
ناقش المشكلة مع GPT 5.6 Sol على PicassoIA
عندما تبدو الإعدادات سليمة ويظهر الخطأ مع ذلك، يفيد قارئ ثانٍ. GPT 5.6 Sol مصمم للمهام البرمجية والاستدلال متعدد الخطوات، ويقبل لقطات الشاشة، فيمكنك تمرير مخرجات الطرفية إليه مباشرة. لن يشغّل Codex ولن يلمس جهازك. يقرأ فقط ما تلصقه.
في System Prompt، حدّد الدور: "You are a Codex CLI and MCP troubleshooter. Ask for missing facts before guessing."
في Prompt، الصق جدول [mcp_servers.my-server] ومخرجات codex mcp get my-server.
أضف لقطة شاشة للطرفية التي تفشل تحت Image Input.
اضبط Reasoning Effort على medium لمعظم الحالات، أو على high لإعداد OAuth متشابك. القيمة الافتراضية none تفضّل السرعة.
ارفع Max Completion Tokens عند استخدام high أو xhigh، لأن الاستدلال الثقيل قد يستنفد الميزانية كاملة ويعيد ردًا فارغًا.
اختر Verbosity بقيمة low لقائمة إصلاح قصيرة، أو high لشرح كامل خطوة بخطوة.
💡 استبدل كل توكن حقيقي، وكل سر عميل، وكل اسم مضيف داخلي بالقيمة REDACTED قبل أن تلصق أي شيء.
أوامر تستحق الإرسال
"هذا هو مدخل الإعداد الخاص بي ومخرجات codex mcp get. أيّ فحوص المصادقة الثلاثة يفشل، ولماذا؟"
"هذا الخادم من نوع stdio. أعد كتابة المدخل بحيث تصل بيانات الاعتماد إلى العملية عبر env_vars."
"قارن إعداد OAuth الخاص بي مع عنوان URL لهذا المورد، وأخبرني أين يمكن أن يختلف الجمهور المستهدف (audience)."
للحصول على رأي ثانٍ، يُعد Claude Sonnet 5 على المنصة نفسها خيارًا قويًا آخر لقراءة ملفات الإعداد ومخرجات الأخطاء.
أنشئ صورك الخاصة على Picasso IA
إصلاح خطأ تسجيل الدخول لحظة مناسبة لبناء شيء بالأدوات التي تعمل الآن. كل صورة في هذا المقال أُنشئت بواسطة P Image على Picasso IA، من أوامر نصية تحدد العدسة والإضاءة والملمس. يمكنك أن تفعل الشيء نفسه مع وثائقك أو ملاحظات إصداراتك أو لافتات مشاريعك.
ثلاثة نماذج تستحق أن تجربها بعد ذلك:
Seedream 4.5 للحصول على صور بدقة 4K واضحة من وصف بسيط
GPT Image 2 عندما يكون الأمر النصي طويلًا ومفصّلًا
Flux 2 Pro لتحويل النص إلى صورة وتعديلات تعتمد على صورة
اكتب أمرًا نصيًا واحدًا، وولّد الصورة، ثم عدّل الإضاءة أو الزاوية، وولّد من جديد. وبمجرد أن تبدو الصورة الثابتة صحيحة، يمكن لأدوات الفيديو على المنصة تحويلها إلى حركة. افتح Picasso IA، واختر نموذجًا، وأنشئ أول صورة لك اليوم.