Codex MCP लॉगिन एरर: Auth Unsupported को कैसे ठीक करें

Codex किसी MCP सर्वर के आगे Auth Unsupported दिखाता है, और codex mcp login या तो चलने से मना कर देता है या बताता है कि कोई authorization सपोर्ट नहीं मिला। यह लेख बताता है कि यह लेबल कब हानिरहित है, stdio सर्वर और HTTP सर्वर में अंतर कैसे पहचानें, और तीन उपाय: bearer token variable, साफ़ OAuth लॉगिन, और mcp-remote ब्रिज। इसमें macOS का रिग्रेशन और एक मिलती-जुलती कनेक्शन एरर भी शामिल है।

Codex MCP लॉगिन एरर: Auth Unsupported को कैसे ठीक करें
Cristian Da Conceicao
Picasso IA के संस्थापक

आप codex mcp list चलाते हैं, नया सर्वर दिख जाता है, और Auth कॉलम में Unsupported लिखा आता है। फिर codex mcp login या तो शुरू होने से मना कर देता है या authorization सपोर्ट न होने की शिकायत के साथ रुक जाता है। टूल्स आपके सेशन में कभी दिखते नहीं, और आउटपुट में ऐसा कुछ नहीं होता जिससे पता चले कि कई अलग-अलग समस्याओं में से आपके साथ कौन-सी है।

यह पेज इन्हें उसी क्रम में छाँटता है जिस क्रम में आपको इन्हें जाँचना चाहिए। सबसे पहले यह कि Unsupported कोई समस्या है भी या नहीं, क्योंकि कुछ सर्वरों के लिए यही सही लेबल है। फिर तीन उपाय (bearer token, साफ़ OAuth लॉगिन, stdio ब्रिज), जुलाई 2026 में रिपोर्ट हुआ macOS रिग्रेशन, और एक मिलती-जुलती एरर जिसका लॉगिन से कोई लेना-देना नहीं है।

💡 संक्षिप्त उत्तर: Unsupported का मतलब है कि Codex को प्रमाणीकरण के लिए कुछ नहीं मिला। stdio सर्वर के लिए यह सामान्य है। ऐसे HTTP सर्वर के लिए जिसे क्रेडेंशियल चाहिए, Codex को bearer token variable दें, किसी नए बिल्ड पर codex mcp login <name> फिर से चलाएँ, या सर्वर को mcp-remote के ज़रिए भेजें।

अखरोट की मेज़ पर खुले लैपटॉप के बगल में पीतल का ताला

Auth Unsupported का मतलब क्या है

यह लेबल कहाँ से आता है

Auth कॉलम Codex खुद निकालता है। codex mcp सब-कमांड के एक walkthrough के अनुसार, list और get हर सर्वर के लिए तीन बातें जाँचते हैं:

  1. क्या bearer token environment variable कॉन्फ़िगर है, और क्या वह सच में सेट है?
  2. क्या credential store में stored OAuth tokens पड़े हैं?
  3. क्या HTTP endpoint OAuth metadata दिखाता है?

अगर इनमें से कोई भी लागू नहीं होती, तो कॉलम में Unsupported लिखा आता है। यह लेबल बताता है कि Codex क्या देख सकता है, न कि सर्वर को क्या चाहिए। सर्वर लॉगिन माँग सकता है और फिर भी Unsupported दिखा सकता है, अगर उसका metadata गायब हो, गलत बना हो, या आपकी मशीन से पहुँच के बाहर हो।

एक नज़र में स्टेटस वैल्यू

आपको क्या दिखता हैइसका मतलबअगला कदम
Unsupportedकोई token variable नहीं, कोई stored token नहीं, कोई OAuth metadata नहीं (या stdio सर्वर)नीचे सर्वर का प्रकार जाँचें
Authenticatedtoken variable सेट है या OAuth tokens स्टोर हैंठीक करने को कुछ नहीं, बस टूल्स लोड होने की पुष्टि करें
Logged-out लेबलसर्वर OAuth का विज्ञापन करता है, पर कोई token स्टोर नहीं हैcodex mcp login <name> चलाएँ

आधिकारिक उदाहरणों में authenticated और unsupported दिखाए गए हैं। Logged-out स्थिति के लिए शब्द रिलीज़ के हिसाब से बदलते रहते हैं, इसलिए कॉलम को संकेत की तरह लें और Codex TUI के अंदर /mcp से पुष्टि करें, जो आपके सक्रिय MCP सर्वरों की सूची दिखाता है। सर्वर सेटिंग्स की पूरी सूची आधिकारिक Codex MCP documentation में है।

किसी टिकट या स्क्रिप्ट में साफ़ तरीके से चिपकाने के लिए, codex mcp list --json और codex mcp get my-server --json वही स्टेटस डेटा मशीन-पढ़ने योग्य रूप में दिखाते हैं। जिस मशीन पर लॉगिन काम करता है और जिस पर नहीं करता, उनकी तुलना करने का यह सबसे तेज़ तरीका भी है।

बड़े मॉनिटर पर टर्मिनल पढ़ता डेवलपर

Stdio या HTTP: सर्वर का प्रकार जाँचें

कुछ भी बदलने से पहले पता करें कि आपने किस प्रकार का सर्वर रजिस्टर किया है। ~/.codex/config.toml खोलें और एंट्री देखें। command वाली लाइन का मतलब stdio है। url वाली लाइन का मतलब streamable HTTP है। उपाय पूरी तरह इसी अंतर पर निर्भर करता है।

दो हाथ से बने कनेक्शन डायग्राम वाली नोटबुक का ऊपर से लिया दृश्य

Stdio सर्वर: Unsupported सामान्य है

stdio सर्वर एक लोकल प्रोसेस है, जिसे Codex शुरू करता है और standard input और output के ज़रिए उससे बात करता है:

[mcp_servers.local-tools]
command = "npx"
args = ["-y", "some-mcp-package"]
env = { LOG_LEVEL = "info" }

OAuth HTTP ट्रांसपोर्ट का हिस्सा है। रेफ़रेंस में साफ़ लिखा है: "OAuth login is only supported for streamable HTTP servers." इसलिए codex mcp login local-tools डिज़ाइन के हिसाब से ही खारिज होता है, और Unsupported ही अपेक्षित लेबल है। अगर उस सर्वर को क्रेडेंशियल चाहिए, तो उसे लॉगिन की कोशिश करने के बजाय उसी टेबल में env या env_vars के ज़रिए दें।

💡 जो सार्वजनिक सर्वर किसी प्रमाणीकरण की माँग नहीं करता, उस पर भी Unsupported दिखेगा। अगर टूल्स आपके सेशन में दिख रहे हैं, तो ठीक करने को कुछ नहीं है।

HTTP सर्वर: Unsupported एक चेतावनी है

HTTP एंट्री अलग दिखती है:

[mcp_servers.my-server]
url = "https://mcp.example.com/mcp"

अगर यह सर्वर क्रेडेंशियल की अपेक्षा करता है और कॉलम फिर भी Unsupported कहता है, तो इनमें से एक बात हो रही है:

  • सर्वर static tokens इस्तेमाल करता है, OAuth नहीं, और आपने कोई token नहीं दिया है।
  • सर्वर OAuth इस्तेमाल करता है, पर Codex उसके metadata तक पहुँच या उसे पढ़ नहीं पा रहा।
  • आपका Codex बिल्ड बहुत पुराना है उस metadata lookup के लिए जिसकी सर्वर को ज़रूरत है।

हर कारण का नीचे एक मेल खाता उपाय दिया गया है।

उपाय 1: Bearer Token भेजें

अगर प्रोवाइडर डैशबोर्ड से API token देता है, तो यह सबसे छोटा रास्ता है। न कोई ब्राउज़र, न कोई callback, न कोई metadata lookup।

गुनगुनी दोपहर की रोशनी में टाइप करते हाथ

Variable एक्सपोर्ट करें

token को एक environment variable में रखें, फिर सर्वर को variable का नाम देकर रजिस्टर करें:

export MY_SERVER_TOKEN="paste-the-token-value-here"
codex mcp add my-server --url https://mcp.example.com/mcp --bearer-token-env-var MY_SERVER_TOKEN

--bearer-token-env-var फ़्लैग variable का नाम सेव करता है, और token खुद कभी डिस्क पर नहीं लिखा जाता।

कॉन्फ़िग को उससे जोड़ें

config.toml का परिणाम कुछ ऐसा होना चाहिए:

[mcp_servers.my-server]
url = "https://mcp.example.com/mcp"
bearer_token_env_var = "MY_SERVER_TOKEN"
startup_timeout_sec = 20

यहाँ ज़्यादातर फ़ेल्योर चार गलतियों से होते हैं:

  • token को bearer_token_env_var में चिपकाना। उस फ़ील्ड में secret नहीं, variable का नाम जाता है।
  • गलत शेल में एक्सपोर्ट करना। एक टर्मिनल टैब में सेट variable दूसरे टैब को दिखता नहीं।
  • editor या dock आइकन से Codex लॉन्च करना। ये प्रोसेस अक्सर आपकी shell profile में एक्सपोर्ट किए गए variables नहीं देखते। Codex उसी टर्मिनल से शुरू करें जिसमें variable है, या उसे system-wide सेट करें।
  • पूरी header लाइन स्टोर करना। सिर्फ़ token की वैल्यू रखें, क्योंकि Codex उसे Authorization header में आपके लिए भेज देता है।

codex mcp list फिर से चलाएँ। variable सेट होते ही कॉलम को Unsupported से बाहर निकलना चाहिए।

CI में token को masked secret की तरह स्टोर करें और उस job step में एक्सपोर्ट करें जो Codex लॉन्च करता है। config.toml में variable का नाम वही रहता है, इसलिए फ़ाइल को बिना किसी लीक के repository में रखा जा सकता है।

उपाय 2: OAuth लॉगिन चलाएँ

जब सर्वर OAuth माँगता है, तो चिपकाने के लिए कोई token नहीं होता। Codex को ब्राउज़र साइन-इन से गुज़रकर नतीजा स्टोर करना होता है।

संगमरमर की कैफ़े टेबल पर धुंधले साइन-इन पेज वाला लैपटॉप

लॉगिन करें, लॉगआउट करें, फिर दोबारा कोशिश करें

codex mcp login my-server
codex mcp login my-server --scopes "read,write"
codex mcp logout my-server

पहली कमांड आपका ब्राउज़र खोलती है। अनुरोध को मंज़ूरी दें और टर्मिनल पर लौट आएँ। दूसरी कमांड तब खास scopes माँगती है जब सर्वर के डिफ़ॉल्ट बहुत सीमित हों। तीसरी स्टोर्ड credentials मिटा देती है और या तो Removed OAuth credentials for 'my-server' या No OAuth credentials stored for 'my-server' प्रिंट करती है।

SSH पर या बिना डिस्प्ले वाली मशीन पर काम करना आम फँसाव है। साइन-इन पेज ब्राउज़र में खुलता है, और फिर प्रोवाइडर उस callback पते पर redirect करता है जो Codex चलाने वाली मशीन तक पहुँचना चाहिए। रिमोट होस्ट पर यह redirect अक्सर आपके लैपटॉप पर पहुँच जाता है, और लॉगिन पूरा नहीं होता। callback पोर्ट फ़ॉरवर्ड करें, या उस मशीन के लिए उपाय 1 या उपाय 3 चुनें।

जब लॉगिन बार-बार फ़ेल हो, तो पहले लॉगआउट करें और फिर दोबारा लॉगिन करें, ताकि पुराने सेशन से न उलझें। सर्वर एंट्री हटाने से पहले भी यही करें, क्योंकि एंट्री हटाने से स्टोर्ड tokens रद्द या डिलीट नहीं होते।

resource और callback तय करें

नए OAuth नियमों का पालन करने वाले प्रोवाइडर हर टोकन को एक कैनोनिकल resource URL से बाँधते हैं। MintMCP के Codex नोट्स सुझाते हैं कि Codex को उसे खुद निकालने देने के बजाय सर्वर एंट्री पर oauth_resource साफ़ तौर पर सेट करें। साथ ही MCP एंडपॉइंट, resource मेटाडेटा, ऑथराइज़ेशन रिक्वेस्ट और टोकन ऑडियंस, इन सभी पर एक ही URL रखें:

[mcp_servers.my-server]
url = "https://mcp.example.com/mcp"
oauth_resource = "https://mcp.example.com/mcp"

[mcp_servers.my-server.oauth]
client_id = "your-preregistered-client-id"
callback_url = "http://localhost:8765/callback"

oauth टेबल तभी जोड़ें जब प्रोवाइडर ने आपको पहले से रजिस्टर्ड client ID दी हो। callback URL वही होना चाहिए, अक्षर-दर-अक्षर, जो प्रोवाइडर के रिकॉर्ड में है।

Codex में OAuth सपोर्ट टुकड़ों में आया, इसलिए आपका वर्ज़न मायने रखता है:

रिलीज़तारीखक्या बदला
rust-v0.131.02026-05-18स्पष्ट MCP OAuth client IDs और callback बाइंडिंग
rust-v0.134.02026-05-26codex mcp add HTTP सर्वरों के लिए OAuth विकल्प स्वीकार करता है
rust-v0.142.02026-06-22Protected resource metadata lookup (RFC 9728)
rust-v0.144.02026-07-09सेशन के बीच 401 आने के बाद इंटरैक्टिव री-ऑथेंटिकेशन
rust-v0.145.02026-07-21स्टार्टअप अब OAuth lookups पर नहीं रुकता; credential refresh एक-एक करके चलते हैं

जो सर्वर नवीनतम बिल्ड पर काम करता है, वह दो महीने पुराने रिलीज़ पर फ़ेल हो सकता है, क्योंकि lookup ने दूसरा रास्ता लिया था। codex --version से जाँचें, फिर उसी installer से अपडेट करें जिससे आपने इंस्टॉल किया था, जैसे npm i -g @openai/codex@latest।

उपाय 3: mcp-remote को बीच में रखें

कभी-कभी सर्वर ठीक है, आपका token ठीक है, और फिर भी Codex Unsupported बताता है। सबसे साफ़ रास्ता यह है कि Codex से OAuth करवाना ही बंद कर दिया जाए। mcp-remote पैकेज एक छोटा stdio proxy है, जो रिमोट सर्वर से बात करता है और ब्राउज़र साइन-इन खुद चलाता है, इसलिए Codex को सिर्फ़ एक लोकल प्रोसेस दिखती है।

काले सर्वर रैक की लंबी गली, साफ़ केबल ट्रे के साथ

ब्रिज जोड़ें

[mcp_servers.my-server]
command = "npx"
args = ["-y", "mcp-remote", "https://mcp.example.com/mcp"]
startup_timeout_sec = 60

startup_timeout_sec को उसके डिफ़ॉल्ट 10 सेकंड से ऊपर बढ़ाएँ। पहली बार लॉन्च होने पर यह आपके ब्राउज़र साइन-इन पूरा होने का इंतज़ार करता है, और छोटा timeout प्रोसेस को तब मार देगा जब आप कुछ क्लिक कर ही न पाए हों। पहले उसी नाम की कोई पुरानी एंट्री हटा दें, ताकि दोनों आपस में न टकराएँ।

कौन-से समझौते स्वीकार करने हैं

  • Auth कॉलम Unsupported ही कहता रहेगा। यह अपेक्षित है: अब Codex को एक stdio सर्वर दिखता है, और प्रमाणीकरण ब्रिज संभालता है।
  • आपको उस जगह Node और npx उपलब्ध होने चाहिए जहाँ Codex चलता है।
  • Tokens ब्रिज के अपने कैश में रहते हैं (आमतौर पर ~/.mcp-auth), Codex में नहीं। अगर खराब लॉगिन बार-बार दोहराया जाए, तो वह फ़ोल्डर साफ़ करें।
  • आप Codex वाला OAuth रास्ता छोड़ते हैं, यानी सेशन के बीच 401 आने पर Codex-प्रबंधित री-ऑथेंटिकेशन नहीं होगा।

जिस सर्वर को आप रोज़ इस्तेमाल करते हैं, उसके लिए यह एक समझदारी भरा स्थायी सेटअप है। एक बार के टेस्ट के लिए उपाय 1 तेज़ है।

फिक्स के बाद भी फ़ेल?

macOS: कोई authorization सपोर्ट नहीं मिला

एक फ़ेल्योर को अपना अलग हिस्सा मिलना चाहिए। MintMCP ने एक ऐसा मामला दर्ज किया है जहाँ macOS पर codex mcp login No authorization support detected के साथ रुक जाता है, और यह 2026-07-22 से आने वाले रिलीज़ों में शुरू हुआ। spec-compliant OAuth सर्वर के सामने वही Codex वर्ज़न Linux पर लॉगिन कर लेता है, पर macOS पर metadata स्टेप में फ़ेल होता है। इसे openai/codex#34684 के रूप में ट्रैक किया जा रहा है।

टर्मिनल विंडो चलाते साथ-साथ रखे चांदी और काले लैपटॉप

सर्वर को दोष देने से पहले, उस मशीन से उसका metadata जाँचें जहाँ फ़ेल हो रहा है:

curl -i https://mcp.example.com/.well-known/oauth-protected-resource

JSON बॉडी का मतलब है कि सर्वर वही प्रकाशित कर रहा है जो spec माँगता है, और समस्या Codex की तरफ़ है। कुछ सर्वर इसकी जगह endpoint path जोड़ देते हैं, जैसे /.well-known/oauth-protected-resource/mcp। आपके विकल्प, मेहनत के क्रम में:

  1. Codex अपडेट करें और दोबारा कोशिश करें, क्योंकि फ़िक्स अक्सर आते रहते हैं।
  2. प्रोवाइडर अगर देता है तो bearer token (उपाय 1) इस्तेमाल करें।
  3. mcp-remote (उपाय 3) के ज़रिए भेजें, जो OAuth फ़्लो को Codex से बाहर ले जाता है।

initialize पर connection closed

कुछ एरर auth फ़ेल्योर जैसे दिखते हैं, पर होते नहीं। GitHub issue #5619 की एक रिपोर्ट बताती है कि Codex CLI v0.47.0 bearer token के साथ streamable HTTP सर्वर से जुड़ा और connection closed: initialize response पर खत्म हुआ। क्लाइंट ने प्रोटोकॉल वर्ज़न 2025-06-18 घोषित किया, फिर भी वह पुराने 2024-11-05 ट्रांसपोर्ट की तरह व्यवहार करता रहा: उसने endpoint इवेंट के ठीक बाद कनेक्शन बंद कर दिया और initialize के जवाब का इंतज़ार कभी नहीं किया। वही सर्वर Cursor में चलता था।

स्टिकी नोट्स और टाइमलाइन तीरों से भरे व्हाइटबोर्ड के सामने डेवलपर

अगर आपकी एरर unsupported के बजाय connection closed कहती है, तो कोई token बदलने से मदद नहीं मिलेगी। किसी नवीनतम Codex बिल्ड पर अपडेट करें, और पक्का करें कि सर्वर असल में कौन-सा ट्रांसपोर्ट बोलता है, क्योंकि पुराना SSE-शैली endpoint और streamable HTTP endpoint एक-दूसरे की जगह नहीं ले सकते।

पाँच मिनट की चेकलिस्ट

लैपटॉप के बगल में चेक मार्क वाली नोटबुक चेकलिस्ट

  1. codex --version चलाएँ, और अगर वह कुछ महीनों से पुराना है तो अपडेट करें।
  2. codex mcp get my-server चलाएँ और नोट करें कि एंट्री command इस्तेमाल करती है या url।
  3. command एंट्रियों के लिए Unsupported स्वीकार करें और सर्वर प्रोसेस को ठीक करें।
  4. url एंट्रियों के लिए bearer_token_env_var सेट करें या codex mcp login my-server चलाएँ।
  5. metadata को curl से /.well-known/oauth-protected-resource के मुकाबले जाँचें।
  6. macOS पर घंटों सिद्धांत पढ़ने से पहले mcp-remote ब्रिज आज़माएँ।
  7. TUI में /mcp खोलें और पुष्टि करें कि सर्वर दिख रहा है।

PicassoIA पर GPT 5.6 Sol से डिबग करें

जब कॉन्फ़िग सही लगे और एरर फिर भी आए, तो एक दूसरा पाठक मदद करता है। GPT 5.6 Sol कोडिंग कामों और मल्टी-स्टेप रीज़निंग के लिए बना है, और यह स्क्रीनशॉट स्वीकार करता है, इसलिए आप टर्मिनल आउटपुट सीधे दे सकते हैं। यह Codex नहीं चलाता और आपकी मशीन को नहीं छूता। यह सिर्फ़ वही पढ़ता है जो आप चिपकाते हैं।

अनुरोध सेट करें

  1. PicassoIA पर GPT 5.6 Sol खोलें।
  2. System Prompt में भूमिका तय करें: "You are a Codex CLI and MCP troubleshooter. Ask for missing facts before guessing."
  3. Prompt में अपनी [mcp_servers.my-server] टेबल और codex mcp get my-server का आउटपुट चिपकाएँ।
  4. Image Input के नीचे फ़ेल होते टर्मिनल का स्क्रीनशॉट जोड़ें।
  5. ज़्यादातर मामलों के लिए Reasoning Effort को medium पर रखें, या उलझे OAuth सेटअप के लिए high पर। डिफ़ॉल्ट, none, गति को प्राथमिकता देता है।
  6. high या xhigh इस्तेमाल करते समय Max Completion Tokens बढ़ाएँ, क्योंकि भारी रीज़निंग पूरा बजट खा सकती है और खाली जवाब लौटा सकती है।
  7. छोटी फ़िक्स सूची के लिए Verbosity low चुनें, या पूरे walkthrough के लिए high।

💡 कुछ भी चिपकाने से पहले हर असली token, client secret और internal hostname को REDACTED से बदल दें।

भेजने लायक प्रॉम्प्ट

  • "यह रहा मेरी config एंट्री और codex mcp get का आउटपुट। तीन auth जाँचों में से कौन-सी फ़ेल हो रही है, और क्यों?"
  • "यह सर्वर stdio है। एंट्री को इस तरह दोबारा लिखें कि credential env_vars के ज़रिए प्रोसेस तक पहुँचे।"
  • "मेरे OAuth सेटअप की तुलना इस resource URL से करें और बताएँ कि audience कहाँ मेल नहीं खा सकता।"

दूसरी राय के लिए, उसी प्लेटफ़ॉर्म पर Claude Sonnet 5 भी कॉन्फ़िग और एरर आउटपुट पढ़ने का एक मज़बूत विकल्प है।

Picasso IA पर अपनी इमेज बनाएँ

लॉगिन एरर ठीक करना उन टूल्स से कुछ बनाने का अच्छा मौका है जो अब काम कर रहे हैं। इस लेख की हर फ़ोटो P Image से PicassoIA पर बनाई गई थी, ऐसे प्रॉम्प्ट से जो लेंस, रोशनी और टेक्स्चर का नाम लेते हैं। आप यही अपने docs, release notes या प्रोजेक्ट बैनर के लिए कर सकते हैं।

अगले खोलने लायक तीन मॉडल:

  • Seedream 4.5 सादे विवरण से शार्प 4K इमेज के लिए
  • GPT Image 2 जब प्रॉम्प्ट लंबा और विस्तृत हो
  • Flux 2 Pro टेक्स्ट-टू-इमेज और फ़ोटो-आधारित एडिट के लिए

एक प्रॉम्प्ट लिखें, जनरेट करें, रोशनी या कोण बदलें, और फिर दोबारा जनरेट करें। जब कोई स्टिल सही लगने लगे, तो प्लेटफ़ॉर्म के वीडियो टूल्स उसे गति में बदल सकते हैं। PicassoIA खोलें, कोई मॉडल चुनें, और आज ही अपनी पहली इमेज बनाएँ।

यह लेख शेयर करें

अपनी भाषा चुनें

संबंधित लेख