Skycloak

आधिकारिक

Skycloak प्रबंधित Keycloak के लिए Model Context Protocol सर्वर। किसी भी MCP क्लाइंट से क्लस्टर, realms, एप्लिकेशन, SSO और उपयोगकर्ताओं को प्रबंधित करें।

Skycloak MCP के साथ आप क्या कर सकते हैं?

अपने Skycloak (प्रबंधित Keycloak) क्लस्टर, रियल्म और SSO को किसी भी MCP क्लाइंट से प्रबंधित करें।

  • क्लस्टर अपग्रेड समीक्षा — पूछें कि कौन से क्लस्टर Keycloak अपग्रेड में पीछे हैं और list_cluster_upgrades और get_cluster_upgrade_path के माध्यम से अपग्रेड पथ प्राप्त करें।
  • रियल्म प्रावधानcreate_realm और create_identity_provider का उपयोग करके Google और GitHub साइन-इन के साथ एक रियल्म बनाएं।
  • SIEM अग्रेषणcreate_siem_destination के माध्यम से एक SIEM गंतव्य सेट करें जो प्रशासनिक घटनाओं को Datadog वेबहुक पर अग्रेषित करता है।
  • कस्टम डोमेन सेटअप — एक कस्टम डोमेन जोड़ें, DNS रिकॉर्ड प्राप्त करें, और create_domain और verify_domain के साथ सत्यापित करें।

दस्तावेज़

skycloak-mcp

Smithery

Skycloak (प्रबंधित Keycloak) के लिए आधिकारिक Model Context Protocol सर्वर: किसी भी MCP क्लाइंट (Claude Desktop, Claude Code, Cursor) से अपने क्लस्टर, realms, एप्लिकेशन और SSO प्रबंधित करें।

स्थिति: प्रारंभिक रिलीज़। टूल कवरेज बढ़ रही है; उपलब्ध सुविधाओं के लिए changelog देखें।

त्वरित आरंभ

claude mcp add --transport http skycloak https://mcp.skycloak.io

कोई API key नहीं, कोई client ID नहीं, कोई कॉन्फ़िगरेशन नहीं। आपका ब्राउज़र खुलता है, आप Skycloak में साइन इन करते हैं, और टूल दिखाई देते हैं। कोई भी MCP क्लाइंट जो streamable HTTP का समर्थन करता है, उसी तरह काम करता है: उसे केवल URL दें और कुछ और नहीं।

फिर कुछ पूछें:

  • "मेरे कौन से Keycloak क्लस्टर अपग्रेड में पीछे हैं?"
  • "EU क्लस्टर पर Google और GitHub साइन-इन के साथ एक staging realm बनाएं।"
  • "पिछले सप्ताह production realm में किसे जोड़ा गया?"
  • "एक SIEM destination सेट करें जो admin events को हमारे Datadog webhook पर अग्रेषित करे।"

प्रमाणीकरण और सुरक्षा

  • होस्टेड HTTP, OAuth के साथ (कोई क्रेडेंशियल कॉन्फ़िगर करने की आवश्यकता नहीं)। अपने क्लाइंट को https://mcp.skycloak.io पर बिना किसी header के इंगित करें। सर्वर 401 के साथ अपने RFC 9728 मेटाडेटा की ओर /.well-known/oauth-protected-resource पर इंगित करता है, क्लाइंट Skycloak लॉगिन realm के विरुद्ध ब्राउज़र authorization-code flow चलाता है, और प्राप्त access token को एक अल्पकालिक, workspace-स्कोप्ड API key के लिए विनिमय किया जाता है जिस पर सत्र चलता है। कुंजी एक घंटे तक रहती है और स्वचालित रूप से नवीनीकृत होती है। आपके क्लाइंट कॉन्फ़िगरेशन में कुछ भी संग्रहीत नहीं होता है।
  • होस्टेड HTTP, API key के साथ। Skycloak डैशबोर्ड में एक कुंजी बनाएं और इसे Authorization: Bearer <key> (या API-Key: <key>) के रूप में भेजें। प्रत्येक अनुरोध अपना स्वयं का क्रेडेंशियल रखता है और केवल उस क्रेडेंशियल के workspace के रूप में कार्य करता है। सर्वर कोई सत्र स्थिति नहीं रखता है, इसलिए एक अनुरोध कभी भी किसी अन्य कॉलर की स्थिति प्राप्त नहीं करता है। कुंजियाँ उपयोग से पहले सत्यापित नहीं की जाती हैं: Skycloak API ही प्राधिकरण है, इसलिए एक अमान्य कुंजी कनेक्ट समय के बजाय पहले टूल कॉल पर 401 के रूप में सामने आती है।
  • टूल आपकी भूमिका से मेल खाते हैं। OAuth के माध्यम से, टूल सूची को सत्र के scopes की अनुमति के अनुसार छोटा किया जाता है, इसलिए एक केवल-पठनीय workspace सदस्य को ऐसे लेखन टूल नहीं दिखाए जाते जो 403 का उत्तर देंगे। API key के साथ पूरी सतह पंजीकृत होती है, क्योंकि कुंजी के scopes सर्वर को दिखाई नहीं देते हैं, और एक अनधिकृत कॉल API से 403 के रूप में सामने आती है।
  • स्थानीय stdio। skycloak-mcp init चलाएं और अपने ब्राउज़र में अनुमोदन करें (OAuth 2.0 device authorization flow)। यह एक workspace-स्कोप्ड API key बनाता है, इसे आपके ऑपरेटिंग सिस्टम keychain में संग्रहीत करता है, और आपके डिफ़ॉल्ट workspace का स्वचालित रूप से पता लगाता है (दूसरा चुनने के लिए --workspace <id> पास करें)। skycloak-mcp logout संग्रहीत कुंजी को हटा देता है।
  • हेडलेस / CI। ब्राउज़र को पूरी तरह से छोड़ने के लिए SKYCLOAK_API_KEY पर्यावरण चर सेट करें (Skycloak डैशबोर्ड में एक कुंजी बनाएं)। यह हमेशा keychain पर प्राथमिकता लेता है।
  • लेखन आपके क्रेडेंशियल द्वारा नियंत्रित होते हैं, किसी फ़्लैग से नहीं। https://mcp.skycloak.io पर होस्टेड सर्वर लेखन-सक्षम चलता है, और आप वास्तव में जो बदल सकते हैं वह आपकी कुंजी के scopes और आपकी workspace भूमिका से सीमित है: एक केवल-पठनीय सदस्य कुछ भी परिवर्तित नहीं कर सकता, चाहे टूल सूची कुछ भी कहे। सत्र के लिए केवल-पठनीय टूल सतह को बाध्य करने के लिए URL में ?readonly=true जोड़ें। स्थानीय बाइनरी विपरीत दिशा में है और जब तक --allow-writes के साथ प्रारंभ नहीं किया जाता, कोई लेखन टूल पंजीकृत नहीं करता है।
  • क्लस्टर क्रेडेंशियल वैकल्पिक हैं। get_cluster_credentials एक क्लस्टर के Keycloak admin क्रेडेंशियल लौटाता है, जिसे कुंजी रखने वाला सहायक तब देख सकता है, इसलिए init डिफ़ॉल्ट रूप से उस scope का अनुरोध नहीं करता है। इसे धारण करने वाली कुंजी का उपयोग करें: डैशबोर्ड में एक बनाएं, या stdio पर skycloak-mcp init --allow-credentials के साथ साइन इन करें। इसके बिना टूल एक 403 लौटाता है जो दोनों मार्गों की व्याख्या करता है।
  • विनाशकारी टूल के लिए पुष्टि आवश्यक है: उदाहरण के लिए, realm को हटाने के लिए एक स्पष्ट confirm=true तर्क की आवश्यकता होती है।
  • अनुरोध आपकी Skycloak योजना के अनुसार दर-सीमित हैं; 429 प्रतिक्रिया पर सर्वर Retry-After सतह पर लाता है।

टूल

129 टूल: 58 केवल-पठनीय और 71 लेखन। केवल-पठनीय टूल हमेशा उपलब्ध होते हैं। होस्टेड सर्वर पर लेखन टूल भी पंजीकृत होते हैं और आपके क्रेडेंशियल के scopes द्वारा नियंत्रित होते हैं; स्थानीय बाइनरी उन्हें केवल तब पंजीकृत करता है जब --allow-writes के साथ प्रारंभ किया जाता है।

टूल नामों में skycloak_ उपसर्ग होता है जिसे नीचे दी गई तालिका छोड़ देती है, इसलिए list_clusters आपके क्लाइंट में skycloak_list_clusters है।

क्षेत्रकेवल-पठनीयलेखन (--allow-writes)
क्लस्टरlist_clusters, get_cluster, list_cluster_locations, list_cluster_types, list_cluster_features, list_cluster_versions, list_cluster_upgrades, get_cluster_upgrade_path, get_cluster_credentials, get_cluster_insights, get_cluster_maintenance_windowcreate_cluster, update_cluster, delete_cluster, cancel_cluster_upgrade, set_cluster_maintenance_window, delete_cluster_maintenance_window
एज सुरक्षाget_cluster_security, list_cluster_captcha_domainsupdate_cluster_security, add_cluster_captcha_domain, remove_cluster_captcha_domain
Realmslist_realms, get_realmcreate_realm, update_realm, delete_realm
एप्लिकेशनlist_applications, get_application, list_application_roles, list_application_sessionscreate_application, update_application, delete_application, assign_application_role, remove_application_role, rotate_application_secret
पहचान प्रदाताlist_identity_providers, get_identity_provider, list_identity_provider_templates, discover_oidccreate_identity_provider (OIDC), update_identity_provider, delete_identity_provider, test_identity_provider
उपयोगकर्ता, भूमिकाएँ और समूहlist_realm_users, get_realm_user, list_realm_roles, get_realm_role, list_realm_groups, get_realm_group, list_realm_group_members, list_user_roles, list_user_groupscreate_realm_user, update_realm_user, delete_realm_user, create_realm_role, update_realm_role, delete_realm_role, create_realm_group, update_realm_group, delete_realm_group, assign_realm_user_role, remove_realm_user_role, add_realm_user_to_group, remove_realm_user_from_group
कस्टम डोमेनlist_domains, get_domain, list_domain_routes, get_domain_routecreate_domain, verify_domain, delete_domain, create_domain_route, update_domain_route, delete_domain_route
ब्रांडिंग और थीमlist_themes, get_theme, get_theme_assignment, get_client_theme_assignment, get_login_branding, get_email_branding, download_theme_contentset_theme_assignment, set_client_theme_assignment, update_theme, delete_theme, upsert_login_branding, delete_login_branding, upsert_email_branding, delete_email_branding
एक्सटेंशनlist_extensions, list_cluster_extensionsinstall_extension, upgrade_extension, update_extension, uninstall_extension, delete_extension
SMTPget_smtpupsert_smtp, delete_smtp, test_smtp
निर्यात और लॉगlist_exports, get_export, get_logs, get_security_logs, query_eventscreate_export, delete_export, export_cluster_events
Realm आयात और निर्यातget_realm_export, get_realm_importcreate_realm_export, create_realm_import, create_realm_import_upload_url
SIEMlist_siem_destinations, get_siem_destinationcreate_siem_destination, update_siem_destination, delete_siem_destination, test_siem_destination
Webhookslist_webhook_event_types, list_webhook_subscriptions, get_webhook_subscriptioncreate_webhook_subscription, update_webhook_subscription, delete_webhook_subscription, test_webhook_subscription

परंपराएँ: विनाशकारी टूल (delete_*, uninstall_extension, cancel_cluster_upgrade) को confirm=true की आवश्यकता होती है। create_cluster अतुल्यकालिक है: क्लस्टर के available होने तक get_cluster को पोल करें। create_domain उन DNS रिकॉर्ड्स को लौटाता है जिन्हें ग्राहक को बनाना होगा; verify_domain DNS जाँच ट्रिगर करता है। set_theme_assignment प्रति Keycloak थीम प्रकार एक कस्टम थीम सक्रिय करता है (खाली स्ट्रिंग अंतर्निहित डिफ़ॉल्ट पर रीसेट करती है)। update_cluster_security CAPTCHA सेटिंग्स को अछूता छोड़ देता है। Realm आयात/निर्यात एक realm के कॉन्फ़िगरेशन को स्थानांतरित करता है और create_export से अलग है, जो पूरे क्लस्टर के डेटाबेस को डंप करता है: दोनों अतुल्यकालिक हैं, और realm संग्रह हमेशा एन्क्रिप्टेड होता है, इसलिए इसे फिर से आयात करने के लिए निर्यात के लिए उपयोग किए गए पासवर्ड की आवश्यकता होती है। एक realm को मौजूदा निर्यात से सीधे आयात किया जा सकता है (source_export_id) या अपलोड किए गए संग्रह से (create_realm_import_upload_url, PUT, फिर upload_s3_key); आयात एक realm बनाता है और अधिलेखित करने के बजाय नाम टकराव से इनकार करता है, और confirm=true की आवश्यकता होती है क्योंकि यह उपयोगकर्ताओं और क्रेडेंशियल्स को अपने साथ लाता है।

प्रॉम्प्ट

आठ प्रॉम्प्ट आपको उस टूल सतह में एक प्रारंभिक बिंदु देते हैं। क्लाइंट उन्हें स्लैश कमांड या सुझाई गई क्रियाओं के रूप में सतह पर लाते हैं; प्रत्येक तर्क (realm, क्लस्टर, समय विंडो) लेता है और मॉडल को सही क्रम में सही टूल के माध्यम से चलाता है।

प्रॉम्प्टयह क्या करता है
audit_self_registrationहर realm खोजें जो अभी भी स्व-पंजीकरण की अनुमति देता है, एक क्लस्टर या सभी में
review_upgradesKeycloak संस्करण में पीछे क्लस्टरों को पहचानें और अपग्रेड पथ निर्धारित करें
triage_failed_loginsएक realm के लिए हाल के असफल लॉगिन खींचें और उन्हें स्रोत IP द्वारा समूहित करें
review_identity_providersएक realm के SSO कनेक्शन सूचीबद्ध करें और जाँचें कि कोई विशिष्ट सक्षम है या नहीं
review_admin_changesदिखाएँ कि एक realm में हाल ही में किसने क्या बदला, लॉगिन और सुरक्षा सेटिंग्स पर केंद्रित
provision_environmentएक क्लस्टर बनाएं, एक realm जोड़ें, और एक पहचान प्रदाता जोड़ें, प्रत्येक चरण की पुष्टि करते हुए
set_up_custom_domainएक कस्टम डोमेन जोड़ें, सटीक DNS रिकॉर्ड्स लौटाएं, सत्यापित करें, और इसे एक realm पर रूट करें
rotate_client_secretएक एप्लिकेशन के क्लाइंट सीक्रेट को पुनर्जीवित करें, पहले प्रभाव क्षेत्र को स्पष्ट रूप से बताते हुए

प्रॉम्प्ट उसी तरह नियंत्रित होते हैं जैसे वे जिन टूल का नाम लेते हैं: तीन जो परिवर्तन करते हैं, केवल उन सत्रों को दिए जाते हैं जो उनके संदर्भित लेखन टूल को कॉल कर सकते हैं, और उनके निर्देश मॉडल को बताते हैं कि कुछ भी बदलने से पहले आपसे पुष्टि करें। विनाशकारी टूल पर confirm=true आवश्यकता अभी भी शीर्ष पर लागू होती है।

कौशल

जहाँ एक प्रॉम्प्ट एक प्रारंभिक बिंदु है, वहाँ एक कौशल एक पूर्ण परिचालन playbook है जिसे मॉडल मांग पर लोड करता है। सर्वर चार भेजता है, ड्राफ्ट SEP-2640 Skills extension पर परोसा जाता है: यह अपनी क्षमताओं में io.modelcontextprotocol/skills घोषित करता है, skills/list और skills/get का उत्तर देता है, और प्रत्येक SKILL.md को skill://<name>/SKILL.md पर एक सामान्य संसाधन के रूप में अपनी सूची प्रविष्टि में sha256 डाइजेस्ट के साथ परोसता है। OpenAI का प्लगइन निर्देशिका कौशल को ठीक इसी आकार में आयात करता है।

कौशलयह क्या एन्कोड करता है
auth-incident-triage"उपयोगकर्ता लॉगिन नहीं कर सकते" का ट्राइएज: प्लेटफ़ॉर्म आउटेज को हमलों और कॉन्फ़िगरेशन परिवर्तनों से अलग करें, घटनाओं, WAF लॉग और क्लस्टर स्वास्थ्य का उपयोग करके। केवल-पठनीय
enterprise-sso-rolloutएक एंटरप्राइज़ IdP को एक realm में अंत-से-अंत तक जोड़ें: issuer सत्यापन, अपस्ट्रीम ऐप पंजीकरण, broker कॉन्फ़िगरेशन, कनेक्शन परीक्षण, और वास्तविक लॉगिन घटनाओं के विरुद्ध सत्यापन
keycloak-migration-doctorएक Keycloak निर्यात, आयात या माइग्रेशन को उन बाधाओं के विरुद्ध प्रीफ़्लाइट करें जो समर्थन वास्तव में देखता है (स्क्रिप्ट नीतियाँ, विरासत /auth पथ, आंशिक-निर्यात अपेक्षाएँ), और सामान्य डैशबोर्ड सूचना के बजाय वास्तविक error_message पढ़कर एक असफल कार्य का निदान करें
keycloak-upgrade-readinessसंस्करण बहाव का आकलन करें, पता लगाएं कि नया Keycloak संस्करण क्या तोड़ता है (एक्सटेंशन, थीम), और रोलबैक योजना के रूप में निर्यात के साथ पर्यावरणों में रोलआउट का क्रम निर्धारित करें

कौशल उसी तरह नियंत्रित होते हैं जैसे वे जिन टूल का नाम लेते हैं: लेखन टूल के आसपास बने तीन वर्कफ़्लो केवल-पठनीय सत्रों से रोके जाते हैं, और एक स्कोप्ड सत्र को केवल एक कौशल दिया जाता है जिसके टूल उसके पास वास्तव में होते हैं। स्रोत internal/tools/skills/ में रहते हैं, प्रति कौशल एक निर्देशिका, मानक Agent Skills प्रारूप में, इसलिए वे स्थानीय कौशल निर्देशिका में सीधे कॉपी किए जाने पर भी काम करते हैं।

कनेक्ट करना

होस्टेड HTTP के लिए सबसे सरल मार्ग OAuth है, जिसे किसी क्रेडेंशियल की आवश्यकता नहीं होती है:

claude mcp add --transport http skycloak https://mcp.skycloak.io

पहली कॉल आपका ब्राउज़र खोलती है, आप Skycloak लॉगिन पृष्ठ पर अनुमोदन करते हैं, और टूल दिखाई देते हैं। यदि आप एक से अधिक workspace से संबंधित हैं, तो जिसे आप चाहते हैं उसका नाम बताएं:

claude mcp add --transport http skycloak "https://mcp.skycloak.io?workspace=<workspace-id>"

अन्यथा, Skycloak डैशबोर्ड में एक API key बनाएं और अपने MCP क्लाइंट को इसे bearer token के रूप में भेजने के लिए कॉन्फ़िगर करें:

claude mcp add --transport http skycloak https://mcp.skycloak.io --header "Authorization: Bearer sk_sc_XXX"

यह .claude.json में निम्नलिखित जोड़ता है:

{
  "mcpServers": {
    "skycloak": {
      "type": "http",
      "url": "https://mcp.skycloak.io",
      "headers": {
        "Authorization": "Bearer sk_sc_XXX"
      }
    }
  }
}

स्थानीय stdio के लिए, एक बार साइन इन करें, फिर अपने क्लाइंट को skycloak-mcp run पर इंगित करें:

skycloak-mcp init        # one-time browser sign-in; stores a key in your keychain

Claude Desktop / Cursor (स्थानीय, stdio):

{
  "mcpServers": {
    "skycloak": {
      "command": "skycloak-mcp",
      "args": ["run", "--transport", "stdio"]
    }
  }
}

Claude Code:

claude mcp add skycloak -- skycloak-mcp run --transport stdio

हेडलेस / CI (बिना ब्राउज़र) के लिए, init छोड़ें और इसके बजाय कुंजी पास करें: कॉन्फ़िग में "env": { "SKYCLOAK_API_KEY": "sk_sc_..." } जोड़ें, या claude mcp add skycloak --env SKYCLOAK_API_KEY=sk_sc_... -- skycloak-mcp run --transport stdio

--allow-writes केवल तभी जोड़ें जब आप परिवर्तन करने का इरादा रखते हैं (skycloak-mcp init --allow-writes से साइन इन करें, या राइट-स्कोप्ड कुंजी का उपयोग करें)।

होस्टेड HTTP URL पर केवल रीड-ओनली टूल्स को उजागर करने के लिए ?readonly=true जोड़ें, या राइट-सक्षम टूल सतह का अनुरोध करने के लिए ?readonly=false। क्वेरी पैरामीटर डिफ़ॉल्ट रूप से false है, लेकिन राइट टूल्स केवल तभी पंजीकृत होते हैं जब सर्वर --allow-writes के साथ शुरू किया गया हो।

यह चुनने के लिए ?workspace=<uuid> जोड़ें कि OAuth सत्र किस वर्कस्पेस पर कार्य करता है। यह केवल तभी आवश्यक है जब आप एक से अधिक से संबंधित हों; एकल वर्कस्पेस के साथ सर्वर इसे आपके लिए चुनता है, और यदि आप कई से संबंधित हैं और किसी का नाम नहीं लेते हैं, तो कनेक्शन उन्हें सूचीबद्ध करने वाले संदेश के साथ विफल हो जाता है।

HTTP ट्रांसपोर्ट चलाना

skycloak-mcp run --transport http --http-addr :8080

इसे अपनी कोई क्रेडेंशियल की आवश्यकता नहीं है: कॉलर अपनी प्रति अनुरोध प्रदान करते हैं, इसलिए डिप्लॉय समय पर कुछ भी इंजेक्ट नहीं किया जाता है। GET /healthz और GET /readyz अनप्रमाणित हैं और केवल रिपोर्ट करते हैं कि प्रक्रिया चालू है; वे जानबूझकर Skycloak API की जांच नहीं करते हैं, इसलिए एक अपस्ट्रीम ब्लिप सभी रेप्लिका के प्रोब को एक साथ विफल नहीं कर सकता। सर्वर कोई सत्र स्थिति नहीं रखता है, इसलिए रेप्लिका को सत्र आत्मीयता की आवश्यकता नहीं है और उन्हें स्वतंत्र रूप से स्केल या रोल किया जा सकता है। SIGTERM नए कनेक्शन रोकता है और चल रहे कॉल को खत्म करता है।

OAuth पथ तब चालू होता है जब SKYCLOAK_ISSUER और SKYCLOAK_DASHBOARD_URL सेट होते हैं, जो वे डिफ़ॉल्ट रूप से होते हैं। GET /.well-known/oauth-protected-resource तब अनप्रमाणित रूप से परोसा जाता है, जो क्षेत्र को प्राधिकरण सर्वर के रूप में नामित करता है। इसका resource मान SKYCLOAK_PUBLIC_URL से लिया जाता है जब सेट होता है, और अन्यथा अनुरोध के अपने Host और स्कीम से, इसलिए एक इनग्रेस के पीछे एकल-होस्ट डिप्लॉयमेंट को अतिरिक्त कॉन्फ़िगरेशन की आवश्यकता नहीं होती है। स्कीम X-Forwarded-Proto से आती है जब मौजूद होती है, और अन्यथा लूपबैक होस्ट के अलावा किसी भी चीज़ के लिए https पर डिफ़ॉल्ट होती है, क्योंकि TLS अपस्ट्रीम पर समाप्त होता है और http:// पहचानकर्ता प्रकाशित करना उस URL से मेल नहीं खाएगा जिससे क्लाइंट जुड़ा था। SKYCLOAK_PUBLIC_URL सेट करें यदि आपका इनग्रेस Host को फिर से लिखता है। दस्तावेज़ openid profile email को अपने scopes_supported के रूप में भी सूचीबद्ध करता है, और WWW-Authenticate चुनौती उन्हें scope पैरामीटर के रूप में दोहराती है, इसलिए दोनों में से किसी एक को पढ़ने वाला क्लाइंट उनके लिए क्षेत्र से पूछता है: openid आवश्यक है, क्योंकि टोकन एक्सचेंज डैशबोर्ड को Keycloak के userinfo एंडपॉइंट को कॉल करता है और Keycloak इसके बिना दिए गए टोकन को अस्वीकार करता है। एक टोकन जो इसके बिना आता है उसे 401 और चुनौती के साथ सत्यापन पर अस्वीकार कर दिया जाता है, न कि एक एक्सचेंज में ले जाया जाता है जो सफल नहीं हो सकता, इसलिए पहले से अनुदान रखने वाला क्लाइंट पुनः प्रयास करना बंद कर देता है और फिर से साइन इन करता है। जारीकर्ता या डैशबोर्ड चर में से किसी एक को खाली करने से OAuth पूरी तरह से बंद हो जाता है, और सर्वर केवल API कुंजी के लिए चुनौती देने पर वापस चला जाता है और कुछ और नहीं।

OPENAI_APPS_CHALLENGE_TOKEN OpenAI के प्लगइन-निर्देशिका डोमेन सत्यापन टोकन को /.well-known/openai-apps-challenge पर सादे पाठ के रूप में और कुछ और नहीं परोसता है। अनसेट होने पर, रूट पंजीकृत नहीं होता है और पथ 404 देता है।

स्टार्टअप हल किए गए वायरिंग के साथ एक पंक्ति लॉग करता है (oauth=, issuer=, dashboard=, public_url=, endpoint=, allow_writes=), ताकि गलत कॉन्फ़िगर किया गया डिप्लॉयमेंट बिना रीडिप्लॉय के पहचाना जा सके। OAuth पथ पर अस्वीकार किया गया प्रत्येक अनुरोध विफल चरण का नाम देने वाली एक पंक्ति लॉग करता है (verify, exchange या scopes), कॉलर को मिली स्थिति, और अंतर्निहित त्रुटि। एक सत्यापन विफलता उस जांच को जोड़ती है जिसने टोकन को अस्वीकार कर दिया (expired, wrong_issuer, bad_signature, unknown_key_id, wrong_token_type, no_openid_scope, और इसी तरह); एक एक्सचेंज विफलता डैशबोर्ड की स्थिति और कॉल किए गए होस्ट को जोड़ती है। कॉलर सत्यापित होने के बाद टोकन के विषय के रूप में दिखाई देता है, और कभी भी क्रेडेंशियल के रूप में नहीं: एक्सेस टोकन, Authorization हेडर और मिंटेड API कुंजी कभी लॉग नहीं होते हैं।

कॉन्फ़िगरेशन

Env varडिफ़ॉल्ट
SKYCLOAK_API_KEYकोई नहीं (stdio के लिए वैकल्पिक; HTTP क्लाइंट इसके बजाय API-Key हेडर प्रदान करते हैं)
SKYCLOAK_ENDPOINThttps://api.skycloak.io
SKYCLOAK_API_VERSIONवर्तमान API संस्करण
SKYCLOAK_ISSUERhttps://login.app.skycloak.io/realms/skycloak (CLI साइन-इन, और प्राधिकरण सर्वर जिसके खिलाफ HTTP ट्रांसपोर्ट टोकन सत्यापित करता है)
SKYCLOAK_CLIENT_IDskycloak-mcp (CLI डिवाइस फ्लो केवल)
SKYCLOAK_DASHBOARD_URLhttps://app.skycloak.io (CLI कुंजी और HTTP सत्र कुंजी मिंट करता है)
SKYCLOAK_PUBLIC_URLकोई नहीं (प्रत्येक अनुरोध से व्युत्पन्न; इसे सेट करें जब इनग्रेस Host को फिर से लिखता है)
OPENAI_APPS_CHALLENGE_TOKENOpenAI के प्लगइन-निर्देशिका सत्यापन टोकन को /.well-known/openai-apps-challenge पर परोसता है। अनसेट होने पर, वह पथ 404 देता है।

कमांड: init (ब्राउज़र साइन-इन), run (सर्व करें), logout (संग्रहीत कुंजी हटाएं)। init --workspace <id>, --allow-writes, --allow-credentials, और --ttl-days (डिफ़ॉल्ट 90) स्वीकार करता है।

फ़्लैगडिफ़ॉल्टविवरण
--transportstdiostdio या http
--http-addr:8080HTTP ट्रांसपोर्ट के लिए सुनने का पता
--allow-writesfalsestdio के लिए म्यूटेटिंग टूल्स सक्षम करें और readonly=false वाले HTTP सत्रों को राइट टूल्स पंजीकृत करने की अनुमति दें

विकास

make build      # build the server binary
make test       # unit tests
make run        # run on stdio for local testing
make inspector  # MCP Inspector against the local binary
make lint       # golangci-lint
make generate   # regenerate the API client from the OpenAPI spec

internal/apiclient के तहत API क्लाइंट oapi-codegen के साथ Skycloak OpenAPI विनिर्देश से उत्पन्न होता है।

API के साथ सिंक में रखना

internal/apiclient में क्लाइंट oapi-codegen के साथ internal/apiclient/openapi.yaml से उत्पन्न होता है; इसे ताज़ा करने के लिए make generate चलाएं। यदि प्रतिबद्ध जनरेटेड कोड विनिर्देश से विचलित होता है तो CI विफल हो जाता है। अनुरोधों को 429/5xx पर Retry-After-जागरूक बैकऑफ़ के साथ पुनः प्रयास किया जाता है।

वितरण

GitHub बाइनरी और प्रत्येक टैग पर एक ghcr.io/sky-cloak/skycloak-mcp कंटेनर छवि के रूप में जारी किया गया, और MCP रजिस्ट्री पर io.skycloak/skycloak-mcp के रूप में प्रकाशित किया गया। अधिकांश लोगों को किसी की आवश्यकता नहीं है: होस्टेड सर्वर को कोई इंस्टॉल की आवश्यकता नहीं है।

सुरक्षा

कृपया कमजोरियों की निजी रिपोर्ट करें। SECURITY.md देखें।

योगदानकर्ता

Skycloak में Guilliano Molaire, Neville Omangi और Aphilas द्वारा निर्मित। रिपॉजिटरी इतिहास को खोले जाने पर स्क्वैश किया गया था, इसलिए कमिट लॉग यह प्रतिबिंबित नहीं करता कि किसने क्या लिखा।

लाइसेंस

Apache-2.0internal/apiclient/openapi.yaml में OpenAPI विवरण Skycloak प्लेटफ़ॉर्म API से उत्पन्न होता है और (c) Skycloak है; इसे यहां शामिल किया गया है ताकि क्लाइंट उत्पन्न और सत्यापित किया जा सके। NOTICE देखें।