Skycloak

offiziell

MCP-Server für Skycloak-verwaltetes Keycloak. Verwalten Sie Cluster, Realms, Anwendungen, SSO und Benutzer über jeden MCP-Client.

Was kann man mit Skycloak MCP machen?

Verwalten Sie Ihre Skycloak- (verwaltetes Keycloak-) Cluster, Realms und SSO von jedem MCP-Client aus.

  • Cluster-Upgrade-Überprüfung — Fragen Sie, welche Cluster bei Keycloak-Upgrades zurückliegen, und erhalten Sie den Upgrade-Pfad über list_cluster_upgrades und get_cluster_upgrade_path.
  • Realm-Bereitstellung — Erstellen Sie ein Realm mit Google- und GitHub-Anmeldung über create_realm und create_identity_provider.
  • SIEM-Weiterleitung — Richten Sie ein SIEM-Ziel ein, das Admin-Ereignisse über create_siem_destination an einen Datadog-Webhook weiterleitet.
  • Einrichtung einer benutzerdefinierten Domäne — Fügen Sie eine benutzerdefinierte Domäne hinzu, rufen Sie DNS-Einträge ab und verifizieren Sie diese mit create_domain und verify_domain.

Dokumentation

skycloak-mcp

Smithery

Offizieller Model Context Protocol-Server für Skycloak (verwaltetes Keycloak): Verwalten Sie Ihre Cluster, Realms, Anwendungen und SSO von jedem MCP-Client aus (Claude Desktop, Claude Code, Cursor).

Status: frühe Veröffentlichung. Die Tool-Abdeckung wächst; siehe das Changelog für das, was verfügbar ist.

Schnellstart

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

Kein API-Schlüssel, keine Client-ID, keine Konfiguration. Ihr Browser öffnet sich, Sie melden sich bei Skycloak an, und die Tools erscheinen. Jeder MCP-Client, der streambares HTTP spricht, funktioniert auf dieselbe Weise: Geben Sie ihm die URL und sonst nichts.

Dann fragen Sie zum Beispiel:

  • „Welche meiner Keycloak-Cluster sind bei Upgrades im Rückstand?"
  • „Erstelle ein Staging-Realm auf dem EU-Cluster mit Google- und GitHub-Anmeldung."
  • „Wer wurde in der letzten Woche zum Produktions-Realm hinzugefügt?"
  • „Richte ein SIEM-Ziel ein, das Admin-Ereignisse an unseren Datadog-Webhook weiterleitet."

Authentifizierung & Sicherheit

  • Gehostetes HTTP, mit OAuth (keine Anmeldedaten zu konfigurieren). Richten Sie Ihren Client auf https://mcp.skycloak.io ohne Header. Der Server antwortet 401 mit einem Verweis auf seine RFC 9728-Metadaten unter /.well-known/oauth-protected-resource, der Client führt den Browser-Autorisierungscode-Flow gegen das Skycloak-Login-Realm aus, und das Zugriffstoken, das er zurückerhält, wird gegen einen kurzlebigen, workspace-bezogenen API-Schlüssel eingetauscht, mit dem die Sitzung läuft. Der Schlüssel hält eine Stunde und wird automatisch erneuert. Nichts wird in Ihrer Client-Konfiguration gespeichert.
  • Gehostetes HTTP, mit einem API-Schlüssel. Erstellen Sie einen Schlüssel im Skycloak-Dashboard und senden Sie ihn als Authorization: Bearer <key> (oder API-Key: <key>). Jede Anfrage trägt ihre eigene Anmeldeinformation und handelt nur als der Workspace dieser Anmeldeinformation. Der Server speichert keinen Sitzungszustand, sodass eine Anfrage niemals die eines anderen Aufrufers erbt. Schlüssel werden vor der Verwendung nicht verifiziert: Die Skycloak-API ist die Autorität, sodass ein ungültiger Schlüssel als 401 beim ersten Tool-Aufruf erscheint, nicht beim Verbinden.
  • Tools entsprechen Ihrer Rolle. Über OAuth wird die Tool-Liste auf das beschnitten, was die Bereiche der Sitzung erlauben, sodass einem schreibgeschützten Workspace-Mitglied keine Schreib-Tools angezeigt werden, die 403 beantworten würden. Mit einem API-Schlüssel ist die gesamte Oberfläche registriert, weil die Bereiche eines Schlüssels für den Server nicht sichtbar sind, und ein nicht autorisierter Aufruf erscheint als 403 von der API.
  • Lokales stdio. Führen Sie skycloak-mcp init aus und genehmigen Sie in Ihrem Browser (OAuth-2.0-Geräteautorisierungs-Flow). Es erstellt einen workspace-bezogenen API-Schlüssel, speichert ihn in Ihrem Betriebssystem-Schlüsselbund und erkennt Ihren Standard-Workspace automatisch (übergeben Sie --workspace <id>, um einen anderen zu wählen). skycloak-mcp logout entfernt den gespeicherten Schlüssel.
  • Headless / CI. Setzen Sie die SKYCLOAK_API_KEY-Umgebungsvariable (erstellen Sie einen Schlüssel im Skycloak-Dashboard), um den Browser vollständig zu überspringen. Sie hat immer Vorrang vor dem Schlüsselbund.
  • Schreibvorgänge werden durch Ihre Anmeldeinformation gesteuert, nicht durch ein Flag. Der gehostete Server unter https://mcp.skycloak.io läuft schreibfähig, und was Sie tatsächlich ändern können, wird durch die Bereiche Ihres Schlüssels und Ihre Workspace-Rolle begrenzt: Ein schreibgeschütztes Mitglied kann nichts verändern, egal was die Tool-Liste sagt. Fügen Sie ?readonly=true zur URL hinzu, um eine schreibgeschützte Tool-Oberfläche für eine Sitzung zu erzwingen. Die lokale Binärdatei ist umgekehrt und registriert keine Schreib-Tools, es sei denn, sie wird mit --allow-writes gestartet.
  • Cluster-Anmeldedaten sind optional. get_cluster_credentials gibt die Keycloak-Admin-Anmeldedaten eines Clusters zurück, die ein Assistent, der den Schlüssel hält, dann sehen würde, daher fordert init diesen Bereich standardmäßig nicht an. Verwenden Sie einen Schlüssel, der ihn trägt: Erstellen Sie einen im Dashboard, oder melden Sie sich über stdio mit skycloak-mcp init --allow-credentials an. Ohne ihn gibt das Tool ein 403 zurück, das beide Wege erklärt.
  • Destruktive Tools erfordern Bestätigung: Das Löschen eines Realms erfordert beispielsweise ein explizites confirm=true-Argument.
  • Anfragen werden gemäß Ihrem Skycloak-Plan ratenbegrenzt; bei einer 429-Antwort zeigt der Server Retry-After an.

Tools

129 Tools: 58 schreibgeschützt und 71 schreibend. Schreibgeschützte Tools sind immer verfügbar. Auf dem gehosteten Server sind die Schreib-Tools ebenfalls registriert und durch die Bereiche Ihrer Anmeldeinformation gesteuert; die lokale Binärdatei registriert sie nur, wenn sie mit --allow-writes gestartet wird.

Tool-Namen tragen ein skycloak_-Präfix, das die folgende Tabelle weglässt, sodass list_clusters in Ihrem Client skycloak_list_clusters ist.

BereichSchreibgeschütztSchreibend (--allow-writes)
Clusterlist_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
Edge-Sicherheitget_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
Anwendungenlist_applications, get_application, list_application_roles, list_application_sessionscreate_application, update_application, delete_application, assign_application_role, remove_application_role, rotate_application_secret
Identitätsanbieterlist_identity_providers, get_identity_provider, list_identity_provider_templates, discover_oidccreate_identity_provider (OIDC), update_identity_provider, delete_identity_provider, test_identity_provider
Benutzer, Rollen & Gruppenlist_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
Benutzerdefinierte Domainslist_domains, get_domain, list_domain_routes, get_domain_routecreate_domain, verify_domain, delete_domain, create_domain_route, update_domain_route, delete_domain_route
Branding & Themeslist_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
Erweiterungenlist_extensions, list_cluster_extensionsinstall_extension, upgrade_extension, update_extension, uninstall_extension, delete_extension
SMTPget_smtpupsert_smtp, delete_smtp, test_smtp
Exporte & Protokollelist_exports, get_export, get_logs, get_security_logs, query_eventscreate_export, delete_export, export_cluster_events
Realm-Import & -Exportget_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

Konventionen: Destruktive Tools (delete_*, uninstall_extension, cancel_cluster_upgrade) erfordern confirm=true. create_cluster ist asynchron: Pollen Sie get_cluster, bis der Cluster available ist. create_domain gibt die DNS-Einträge zurück, die der Kunde erstellen muss; verify_domain löst eine DNS-Prüfung aus. set_theme_assignment aktiviert ein benutzerdefiniertes Theme pro Keycloak-Theme-Typ (leere Zeichenfolge setzt auf die integrierte Standardeinstellung zurück). update_cluster_security lässt CAPTCHA-Einstellungen unberührt. Realm-Import/-Export verschiebt die Konfiguration eines Realms und ist getrennt von create_export, das die Datenbank eines gesamten Clusters sichert: Beide sind asynchron, und das Realm-Archiv ist immer verschlüsselt, sodass das zum Export verwendete Passwort für den erneuten Import benötigt wird. Ein Realm kann direkt aus einem vorhandenen Export importiert werden (source_export_id) oder aus einem hochgeladenen Archiv (create_realm_import_upload_url, PUT, dann upload_s3_key); Importieren erstellt ein Realm und verweigert eine Namenskollision, anstatt zu überschreiben, und benötigt confirm=true, weil es Benutzer und Anmeldedaten mitbringt.

Prompts

Acht Prompts geben Ihnen einen Ausgangspunkt in diese Tool-Oberfläche. Clients zeigen sie als Schrägstrich-Befehle oder vorgeschlagene Aktionen an; jeder nimmt Argumente (Realm, Cluster, Zeitfenster) und führt das Modell in der richtigen Reihenfolge durch die richtigen Tools.

PromptWas er tut
audit_self_registrationFinden Sie jedes Realm, das Selbstregistrierung noch erlaubt, über einen Cluster oder alle
review_upgradesErkennen Sie Cluster, die bei ihrer Keycloak-Version im Rückstand sind, und legen Sie den Upgrade-Pfad dar
triage_failed_loginsRufen Sie kürzlich fehlgeschlagene Anmeldungen für ein Realm ab und gruppieren Sie sie nach Quell-IP
review_identity_providersListen Sie die SSO-Verbindungen eines Realms auf und prüfen Sie, ob eine bestimmte aktiviert ist
review_admin_changesZeigen Sie, wer kürzlich was in einem Realm geändert hat, mit Fokus auf Anmelde- und Sicherheitseinstellungen
provision_environmentErstellen Sie einen Cluster, fügen Sie ein Realm hinzu und richten Sie einen Identitätsanbieter ein, wobei jeder Schritt bestätigt wird
set_up_custom_domainFügen Sie eine benutzerdefinierte Domain hinzu, geben Sie die genauen DNS-Einträge zurück, verifizieren Sie und leiten Sie sie an ein Realm weiter
rotate_client_secretGenerieren Sie das Client-Geheimnis einer Anwendung neu, wobei der Wirkungskreis zuerst dargelegt wird

Prompts sind auf dieselbe Weise gesteuert wie die Tools, die sie benennen: Die drei, die verändern, werden nur Sitzungen angeboten, die die Schreib-Tools aufrufen könnten, auf die sie verweisen, und ihre Anweisungen sagen dem Modell, mit Ihnen zu bestätigen, bevor es etwas ändert. Die confirm=true-Anforderung für destruktive Tools gilt zusätzlich.

Fähigkeiten

Wo ein Prompt ein Ausgangspunkt ist, ist eine Fähigkeit ein vollständiges operatives Playbook, das das Modell bei Bedarf lädt. Der Server liefert vier, bereitgestellt über die Entwurfs-SEP-2640 Skills-Erweiterung: Er deklariert io.modelcontextprotocol/skills in seinen Fähigkeiten, beantwortet skills/list und skills/get und liefert jede SKILL.md als gewöhnliche Ressource unter skill://<name>/SKILL.md mit einem sha256-Digest in seinem Listeneintrag. Das Plugin-Verzeichnis von OpenAI importiert Fähigkeiten in genau dieser Form.

FähigkeitWas sie kodiert
auth-incident-triageTriage „Benutzer können sich nicht anmelden": Trennen Sie Plattformausfälle von Angriffen und von Konfigurationsänderungen, unter Verwendung von Ereignissen, WAF-Protokollen und Cluster-Gesundheit. Schreibgeschützt
enterprise-sso-rolloutBinden Sie einen Unternehmens-IdP Ende-zu-Ende in ein Realm ein: Aussteller-Validierung, die Upstream-App-Registrierung, Broker-Konfiguration, Verbindungstests und Verifizierung gegen echte Anmeldeereignisse
keycloak-migration-doctorPrüfen Sie einen Keycloak-Export, -Import oder eine Migration vorab gegen die Blocker, die der Support tatsächlich sieht (Skript-Richtlinien, den veralteten /auth-Pfad, Teil-Export-Erwartungen), und diagnostizieren Sie einen fehlgeschlagenen Job, indem Sie sein echtes error_message lesen, statt der generischen Dashboard-Meldung
keycloak-upgrade-readinessBewerten Sie Versionsabweichungen, arbeiten Sie heraus, was die neue Keycloak-Version bricht (Erweiterungen, Themes), und planen Sie die Einführung über Umgebungen hinweg mit einem Export als Rollback-Plan

Fähigkeiten folgen derselben Steuerung wie die Tools, die sie benennen: Die drei Workflows, die um Schreib-Tools herum aufgebaut sind, werden schreibgeschützten Sitzungen vorenthalten, und einer eingeschränkten Sitzung wird nur eine Fähigkeit angeboten, deren Tools sie tatsächlich hat. Die Quellen liegen in internal/tools/skills/, ein Verzeichnis pro Fähigkeit, im Standard-Agent Skills-Format, sodass sie auch direkt in ein lokales Fähigkeiten-Verzeichnis kopiert funktionieren.

Verbinden

Für gehostetes HTTP ist der einfachste Weg OAuth, das überhaupt keine Anmeldedaten benötigt:

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

Der erste Aufruf öffnet Ihren Browser, Sie genehmigen auf der Skycloak-Anmeldeseite, und die Tools erscheinen. Wenn Sie zu mehr als einem Workspace gehören, benennen Sie den gewünschten:

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

Andernfalls erstellen Sie einen API-Schlüssel im Skycloak-Dashboard und konfigurieren Sie Ihren MCP-Client, ihn als Bearer-Token zu senden:

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

Dies fügt Folgendes zu .claude.json hinzu:

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

Für lokales stdio melden Sie sich einmal an und richten Sie dann Ihren Client auf skycloak-mcp run:

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

Claude Desktop / Cursor (lokal, stdio):

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

Claude Code:

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

Für Headless-/CI-Umgebungen (ohne Browser) überspringen Sie init und übergeben Sie stattdessen den Schlüssel: Fügen Sie "env": { "SKYCLOAK_API_KEY": "sk_sc_..." } zur Konfiguration hinzu, oder claude mcp add skycloak --env SKYCLOAK_API_KEY=sk_sc_... -- skycloak-mcp run --transport stdio.

Fügen Sie --allow-writes nur hinzu, wenn Sie Änderungen vornehmen möchten (Anmeldung mit skycloak-mcp init --allow-writes oder Verwendung eines schreibberechtigten Schlüssels).

Fügen Sie ?readonly=true zu einer gehosteten HTTP-URL hinzu, um für diese HTTP-Sitzung nur lesende Tools verfügbar zu machen, oder ?readonly=false, um die schreibfähige Tool-Oberfläche anzufordern. Der Abfrageparameter standardmäßig auf false, aber Schreib-Tools werden nur registriert, wenn der Server mit --allow-writes gestartet wurde.

Fügen Sie ?workspace=<uuid> hinzu, um auszuwählen, auf welchen Arbeitsbereich eine OAuth-Sitzung wirkt. Dies ist nur erforderlich, wenn Sie zu mehr als einem gehören; bei einem einzelnen Arbeitsbereich wählt der Server ihn für Sie aus, und wenn Sie zu mehreren gehören und keinen benennen, schlägt die Verbindung mit einer Meldung fehl, die diese auflistet.

Ausführen des HTTP-Transports

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

Er benötigt keine eigenen Anmeldeinformationen: Aufrufer liefern ihre eigenen pro Anfrage, sodass zur Bereitstellungszeit nichts injiziert wird. GET /healthz und GET /readyz sind nicht authentifiziert und melden nur, dass der Prozess läuft; sie prüfen bewusst nicht die Skycloak-API, sodass ein vorgelagerter Ausfall nicht alle Replica-Probes gleichzeitig zum Scheitern bringen kann. Der Server hält keinen Sitzungszustand, sodass Replicas keine Sitzungsaffinität benötigen und frei skaliert oder ausgerollt werden können. SIGTERM stoppt neue Verbindungen und lässt laufende Aufrufe auslaufen.

Der OAuth-Pfad ist immer aktiv, wenn SKYCLOAK_ISSUER und SKYCLOAK_DASHBOARD_URL gesetzt sind, was standardmäßig der Fall ist. GET /.well-known/oauth-protected-resource wird dann nicht authentifiziert bereitgestellt und benennt den Realm als Autorisierungsserver. Sein resource-Wert wird aus SKYCLOAK_PUBLIC_URL übernommen, wenn gesetzt, andernfalls aus dem Host und Schema der Anfrage selbst, sodass eine Einzelhost-Bereitstellung hinter einem Ingress keine zusätzliche Konfiguration benötigt. Das Schema stammt aus X-Forwarded-Proto, wenn vorhanden, und standardmäßig aus https für alles außer einem Loopback-Host, da TLS vorgelagert terminiert und die Veröffentlichung eines http://-Bezeichners nicht mit der URL übereinstimmen würde, mit der der Client verbunden ist. Setzen Sie SKYCLOAK_PUBLIC_URL, wenn Ihr Ingress Host umschreibt. Das Dokument listet auch openid profile email als sein scopes_supported auf, und die WWW-Authenticate-Challenge wiederholt sie als scope-Parameter, sodass ein Client, der eines von beiden liest, den Realm danach fragt: openid ist erforderlich, da der Token-Austausch das Dashboard dazu bringt, den Userinfo-Endpunkt von Keycloak aufzurufen, und Keycloak ein Token verweigert, das ohne es gewährt wurde. Ein Token, das ohne es ankommt, wird bei der Verifizierung mit einem 401 und der Challenge abgelehnt, anstatt zu einem Austausch getragen zu werden, der nicht gelingen kann, sodass ein Client, der noch eine Gewährung von zuvor hält, aufhört, es erneut zu versuchen, und sich erneut anmeldet. Das Leeren einer der Issuer- oder Dashboard-Variablen schaltet OAuth vollständig aus, und der Server fordert wieder nur einen API-Schlüssel an und sonst nichts.

OPENAI_APPS_CHALLENGE_TOKEN bedient das Domain-Verifizierungstoken des OpenAI-Plugin-Verzeichnisses unter /.well-known/openai-apps-challenge als Klartext und sonst nichts. Wenn nicht gesetzt, ist die Route nicht registriert und der Pfad gibt 404 zurück.

Der Start protokolliert eine Zeile mit der aufgelösten Verdrahtung (oauth=, issuer=, dashboard=, public_url=, endpoint=, allow_writes=), sodass eine fehlkonfigurierte Bereitstellung ohne erneutes Bereitstellen erkannt werden kann. Jede auf dem OAuth-Pfad abgelehnte Anfrage protokolliert eine Zeile, die die fehlgeschlagene Stufe benennt (verify, exchange oder scopes), den Status, den der Aufrufer erhalten hat, und den zugrunde liegenden Fehler. Ein Verifizierungsfehler fügt die Prüfung hinzu, die das Token abgelehnt hat (expired, wrong_issuer, bad_signature, unknown_key_id, wrong_token_type, no_openid_scope usw.); ein Austauschfehler fügt den Status des Dashboards und den aufgerufenen Host hinzu. Der Aufrufer erscheint als Subjekt des Tokens, sobald es verifiziert ist, und niemals als Anmeldeinformation: Das Zugriffstoken, der Authorization-Header und der geprägte API-Schlüssel werden niemals protokolliert.

Konfiguration

UmgebungsvariableStandard
SKYCLOAK_API_KEYkeine (optional für stdio; HTTP-Clients stellen stattdessen API-Key-Header bereit)
SKYCLOAK_ENDPOINThttps://api.skycloak.io
SKYCLOAK_API_VERSIONaktuelle API-Version
SKYCLOAK_ISSUERhttps://login.app.skycloak.io/realms/skycloak (CLI-Anmeldung und der Autorisierungsserver, gegen den der HTTP-Transport Token verifiziert)
SKYCLOAK_CLIENT_IDskycloak-mcp (nur CLI-Gerätefluss)
SKYCLOAK_DASHBOARD_URLhttps://app.skycloak.io (prägt CLI-Schlüssel und HTTP-Sitzungsschlüssel)
SKYCLOAK_PUBLIC_URLkeine (aus jeder Anfrage abgeleitet; setzen Sie es, wenn der Ingress Host umschreibt)
OPENAI_APPS_CHALLENGE_TOKENBedient das Verifizierungstoken des OpenAI-Plugin-Verzeichnisses unter /.well-known/openai-apps-challenge. Wenn nicht gesetzt, gibt dieser Pfad 404 zurück.

Befehle: init (Browser-Anmeldung), run (bereitstellen), logout (gespeicherten Schlüssel entfernen). init akzeptiert --workspace <id>, --allow-writes, --allow-credentials und --ttl-days (Standard 90).

FlagStandardBeschreibung
--transportstdiostdio oder http
--http-addr:8080Listen-Adresse für den HTTP-Transport
--allow-writesfalseAktiviert mutierende Tools für stdio und erlaubt HTTP-Sitzungen mit readonly=false zur Registrierung von Schreib-Tools

Entwicklung

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

Der API-Client unter internal/apiclient wird aus der Skycloak-OpenAPI-Spezifikation mit oapi-codegen generiert.

Synchron mit der API bleiben

Der Client in internal/apiclient wird aus internal/apiclient/openapi.yaml mit oapi-codegen generiert; führen Sie make generate aus, um ihn zu aktualisieren. CI schlägt fehl, wenn der eingecheckte generierte Code von der Spezifikation abweicht. Anfragen werden bei 429/5xx mit Retry-After-bewusstem Backoff erneut versucht.

Verteilung

Veröffentlicht als GitHub-Binärdateien und ein ghcr.io/sky-cloak/skycloak-mcp-Container-Image bei jedem Tag und im MCP-Registry als io.skycloak/skycloak-mcp veröffentlicht. Die meisten Menschen benötigen keines von beiden: Der gehostete Server benötigt keine Installation.

Sicherheit

Bitte melden Sie Schwachstellen privat. Siehe SECURITY.md.

Mitwirkende

Erstellt bei Skycloak von Guilliano Molaire, Neville Omangi und Aphilas. Die Repository-Historie wurde beim Öffnen zusammengeführt, sodass das Commit-Protokoll nicht widerspiegelt, wer was geschrieben hat.

Lizenz

Apache-2.0. Die OpenAPI-Beschreibung in internal/apiclient/openapi.yaml wird aus der Skycloak-Plattform-API generiert und ist (c) Skycloak; sie ist hier enthalten, damit der Client generiert und verifiziert werden kann. Siehe NOTICE.