delinea-mcp

offiziell

Offizieller Delinea MCP-Server für die Delinea Secret Server und Platform APIs

Was kann man mit Delinea MCP machen?

  • Geheimnisse suchen und abrufen — Verwenden Sie search und fetch, um Geheimnisse zu finden und deren Details abzurufen, wobei die Objekttypen durch die Konfiguration von search_objects und fetch_objects eingeschränkt werden.
  • Geheimnisse verwalten, ohne Werte offenzulegen — Erstellen oder rotieren Sie Passwörter serverseitig über create_secret_with_generated_password und update_secret_generated_password, sodass Geheimniswerte nicht im Modellkontext erscheinen.
  • SQL-Berichte ausführen — Führen Sie Ad-hoc-Abfragen mit run_report aus oder generieren Sie SQL aus einer Beschreibung mit ai_generate_and_run_report (erfordert Azure OpenAI).
  • Zugriffsanfragen und Posteingang verwalten — Genehmigen oder ablehnen Sie ausstehende Anfragen mit handle_access_request, listen Sie diese über get_pending_access_requests auf und verwalten Sie Posteingangsnachrichten mit get_inbox_messages und mark_inbox_messages_read.
  • Benutzer, Gruppen und Rollen verwalten — Verwalten Sie Secret-Server-Entitäten über user_management, group_management, role_management sowie zugehörige Mitgliedschaftswerkzeuge wie user_role_management und group_role_management.
  • Dienststatus prüfen — Fragen Sie den Status-Endpunkt des Secret Servers mit health_check ab, um zu überprüfen, ob der Dienst betriebsbereit ist.

Dokumentation

DelineaMCP

MCP-Server für die Delinea Secret Server- und Plattform-APIs

License


Neuigkeiten

  • 11. Aug. 2026 — MCP-Protokoll v2 (Spezifikationsrevision 2026-07-28, streamable HTTP) und experimentelle StrongDM-API-Unterstützung sind da — siehe die Versionshinweise.
  • 11. Aug. 2026 — Wir sind die ursprünglichen Anbieter des Anwendungsfalls „keine Geheimnis-Sichtbarkeit für das LLM“ — hüten Sie sich vor Nachahmern ;)

Funktionen

  • Automatische Authentifizierung gegenüber Secret Server
  • Umfangreicher Secret-Server-Werkzeugsatz zur Verwaltung von Ordnern, Geheimnissen, Benutzern, Gruppen und Rollen. Enthält Posteingangs- und Zugriffsanfrage-Helfer sowie Codierungsagenten-Dienstprogramme.
  • ChatGPT-Kompatibilitätstools (search und fetch) für kontrollierte KI-Interaktionen.
  • Optionale Delinea-Platform-Benutzerverwaltungstools
  • Optionale experimentelle StrongDM- (SDM-) Tools — Zugriffsberechtigungen, Berechtigungsaudits, Benutzer-/Rollenlebenszyklus, Gesundheits- und Aktivitätsberichte (siehe docs/strongdm.md; Installation mit pip install "delinea-mcp[strongdm]")
  • Streamable HTTP (/mcp), Legacy-Server-Sent-Events (/mcp/sse) und STDIO-Transports
  • OAuth 2.0 mit dynamischer Client-Registrierung gemäß MCP-Spezifikation
  • TLS-Unterstützung für sichere Verbindungen
  • Fertig ausführbares Docker-Image und Entwicklungsserver-Einstiegspunkt
  • Getestet mit ChatGPT, Claude Desktop, Remote-Claude-Connector, VSCode Copilot und openwebui

Installation

[!NOTE]

Dieses Projekt verwendet uv (https://github.com/astral-sh/uv), aber wenn Sie Befehle lieber ohne dies ausführen möchten, können Sie pip- und venv-Befehle wie gewohnt verwenden, falls gewünscht.

  • Uv installieren
  • Projekt initialisieren: uv pip sync requirements.txt
  • uv run server.py --config config.json verwenden

Konfiguration

Geheimnisse wie Passwörter stammen weiterhin aus Umgebungsvariablen. Geben Sie DELINEA_PASSWORD in Ihrer Shell-Umgebung an. Optionale Funktionen basieren auf zusätzlichen Variablen wie AZURE_OPENAI_KEY oder PLATFORM_SERVICE_PASSWORD.

Nicht-geheime Parameter gehören in config.json:

{
  "delinea_username": "<username>",
  "delinea_base_url": "https://your-secret-server/SecretServer",
  "platform_hostname": "<tenant>.secureplatform.io",
  "platform_service_account": "<service_account>",
  "platform_tenant_id": "<tenant_id>",
  "azure_openai_endpoint": "https://example.openai.azure.com/",
  "azure_openai_deployment": "<deployment_name>",
  "auth_mode": "none",
  "transport_mode": "stdio",
  "chatgpt_disable_scope_checks": false,
  "port": 8000,
  "debug": false,
  "external_hostname": null,
  "ssl_keyfile": null,
  "ssl_certfile": null,
  "registration_psk": null,
  "jwt_key_path": ".cache/jwt.json",
  "oauth_db_path": ".cache/oauth.db",
  "enabled_tools": []
}

Für Secret Server Cloud verwenden Sie einfach die Cloud-URL ohne /SecretServer. Geben Sie ssl_keyfile und ssl_certfile an, um HTTPS zu aktivieren. Für Let's Encrypt verwenden Sie die Dateien privkey.pem und fullchain.pem.

Die Konfigurationsdatei unterstützt die folgenden Schlüssel:

  • delinea_username - Secret-Server-Benutzername. Muss ein programmatischer Benutzer mit Berechtigung für die gewünschten Aufgaben sein.
  • delinea_base_url - Basis-URL Ihrer Secret-Server-Instanz.
  • platform_hostname - Plattform-Mandanten-Hostname (aktiviert Plattform-Tools).
  • platform_service_account - Dienstkonto für die Plattform-API.
  • platform_tenant_id - Mandanten-ID für Plattform-API-Anfragen.
  • strongdm_api_host - StrongDM-Kontrollebene (Standard: app.strongdm.com:443; UK/EU-Varianten verfügbar). Anmeldedaten stammen aus den Umgebungsvariablen SDM_API_ACCESS_KEY / SDM_API_SECRET_KEY; siehe docs/strongdm.md.
  • azure_openai_endpoint - Azure-OpenAI-Endpunkt. Nur wenn Sie die automatische Berichtserstellung wünschen (die meisten Agenten können ihren eigenen Bericht-SQL generieren, also nur aktivieren, wenn Sie es benötigen).
  • azure_openai_deployment - Bereitstellungsname für Azure OpenAI.
  • auth_mode - Authentifizierungsmodus (none oder oauth). OAuth funktioniert offensichtlich nicht mit STDIO-Transport.
  • transport_mode - stdio für die Befehlszeile oder sse für HTTP. Im sse-Modus stellt der Server sowohl den streamable HTTP-Endpunkt unter /mcp (aktueller MCP-Transport, unterstützt Protokollrevisionen 2024-11-05 bis 2026-07-28) als auch die Legacy-HTTP+SSE-Endpunkte unter /mcp/sse + /messages/ bereit.
  • streamable_http_stateless - Standard true; führen Sie /mcp ohne serverseitige Sitzungen aus (empfohlen für Remote-Connectors). Setzen Sie false, um den sitzungsbasierten Betrieb mit dem eigenständigen GET-Stream zu aktivieren.
  • streamable_http_json_response - Standard true; antworten Sie mit einfachem JSON anstelle von SSE-framed Antworten auf /mcp.
  • chatgpt_disable_scope_checks - Überspringen Sie die Bereichsvalidierung bei ChatGPT-Anfragen. Nur aktivieren, wenn Sie Probleme bei der Verbindung zu ChatGPT haben.
  • port - Port für den HTTP-Server im sse-Modus.
  • debug - Ausführliche Protokollierung aktivieren.
  • external_hostname - Hostname, der beim Erstellen von OAuth-Token-Zielgruppen verwendet wird. Kein HTTP(S)-Präfix oder Port hinzufügen.
  • ssl_keyfile - Pfad zum SSL-Schlüssel für HTTPS. (z. B. privkey.pem)
  • ssl_certfile - Pfad zum SSL-Zertifikat für HTTPS. (z. B. fullchain.pem)
  • registration_psk - Vorab geteilter Schlüssel, der zum Registrieren von OAuth-Clients erforderlich ist. Sie müssen dieses Geheimnis in Ihrem Browser eingeben, um OAuth-Verbindungen zu genehmigen.
  • jwt_key_path - Speicherort des RSA-Schlüsselpaars für OAuth-Tokens. Standard: .cache/jwt.json. Wird automatisch generiert, falls nicht vorhanden.
  • oauth_db_path - Pfad zur OAuth-Datenbankdatei. Standard: .cache/oauth.db. Wird automatisch generiert, falls nicht vorhanden.
  • enabled_tools - Liste der zu registrierenden Toolnamen. Eine leere Liste aktiviert alle Tools. Es wird dringend empfohlen, Tools selektiv pro Anwendungsfall oder Aufgabe zu aktivieren. Siehe Ordner docs/ für einige Beispiele.
  • search_objects - Zulässige Objekttypen für das search-Tool. Standard: ["secret"], kann aber user, folder, group und role enthalten.
  • fetch_objects - Zulässige Objekttypen für das fetch-Tool. Standard: ["secret"], kann aber dieselben Werte wie search_objects enthalten.

Ausführen des Servers

Starten Sie den Server lokal im Entwicklungsmodus:

python server.py

Beim Start fordert der Server ein Bearer-Token an und speichert es für spätere API-Anfragen. Dieses Projekt wird erweitert, um weiter mit der Secret-Server-API zu integrieren.

MCP-Tools

Der Server stellt MCP-Tools für Secret Server, das Delinea-Platform-Identitätsverzeichnis und (optional) StrongDM bereit. Jedes Tool veröffentlicht Verhaltensannotationen (schreibgeschützte/destruktive Hinweise) über tools/list.

ChatGPT- / Deep-Research-Kompatibilität

  • search(query) - einheitliche Suche, die {id, title, url} Ergebnisse zurückgibt; Objekttypen sind durch den Konfigurationsschlüssel search_objects begrenzt (Standard: nur Geheimnisse).
  • fetch(id) - ein einzelnes Objekt abrufen, das von search angezeigt wird; begrenzt durch fetch_objects.

Secret Server

  • run_report(sql_query, report_name=None) - einen temporären Bericht erstellen und ausführen.
  • ai_generate_and_run_report(description) - SQL mit Azure OpenAI generieren und ausführen. Erfordert die Azure-OpenAI-Variablen.
  • list_example_reports() - Beispielabfragen und Tabelleninformationen auflisten.
  • get_secret(id, summary=False) - ein Geheimnis oder Zusammenfassungsdetails abrufen.
  • get_folder(id) - Ordner-Metadaten und Kinder abrufen.
  • search_secrets(query, lookup=False) - Geheimnisse suchen oder nachschlagen.
  • search_folders(query, lookup=False) - Ordner suchen oder nachschlagen.
  • get_secret_environment_variable(secret_id, environment) - ein Skript zum Abrufen von Geheimnis-Anmeldedaten in der angegebenen Shell ausgeben.
  • check_secret_template(template_id) - Details zur Geheimnisvorlage abrufen.
  • check_secret_template_field(template_id, field_id) - prüfen, ob eine Vorlage ein Feld enthält.
  • get_secret_template_field(field_id) - Details zu einem bestimmten Geheimnisvorlagenfeld anhand der ID abrufen.
  • handle_access_request(request_id, status, response_comment, start_date=None, expiration_date=None) - eine Zugriffsanfrage genehmigen oder ablehnen.
  • get_pending_access_requests() - ausstehende Zugriffsanfragen auflisten.
  • get_inbox_messages(read_status_filter=None, take=20, skip=0) - Posteingangsnachrichten abrufen.
  • mark_inbox_messages_read(message_ids, read=True) - Nachrichten als gelesen oder ungelesen markieren.
  • create_secret_with_generated_password(name, secret_template_id, password_field_id, items, folder_id=None, site_id=None, comment=None) - ein Geheimnis erstellen, dessen Passwort serverseitig generiert wird; nur bereinigte Metadaten werden zurückgegeben, der Wert erreicht das Modell nie.
  • update_secret_generated_password(secret_id, field_slug, password_field_id, comment=None) - das Passwort eines Geheimnisses serverseitig rotieren, ohne den Wert anzuzeigen.
  • update_secret_fields(secret_id, field_updates, comment=None, allow_password_fields=False) - Vorlage lesen → Nicht-Passwort-Felder ändern → Ablauf verifizieren; verweigert passwortmarkierte Felder, sofern nicht ausdrücklich erlaubt.
  • set_secret_field_environment_variable(secret_id, field_slug, environment, source="stdin", comment=None) - ein Shell-Skript (bash/powershell/cmd) ausgeben, das einen Wert lokal liest und in das Geheimnisfeld einfügt, sodass der Wert das Modell vollständig umgeht.
  • bulk_user_response(user_ids, scenario, comment, confirm=False) - meinungsstarker Vorfall-Kombinator über die Bulk-User-Operations-API. Szenarien: compromise, offboard, unlock, reenable, force_logout; erfordert confirm=True plus einen nicht leeren Audit-Kommentar und zeigt Vorschauen, wenn nicht bestätigt.
  • role_management(action, role_id=None, data=None, params=None) - Rollen verwalten. action kann list, get, create oder update sein. Übergeben Sie optionale Abfrageparameter mit params beim Auflisten von Rollen. Beispiel: role_management("update", role_id=3, data={"name": "New Role"}).
  • user_role_management(action, user_id, role_ids=None) - Rollen einem Benutzer zuweisen oder entfernen. action ist get, add oder remove und role_ids ist eine Liste von Rollen-IDs für Hinzufügen/Entfernen-Operationen.
  • group_management(action, group_id=None, data=None, params=None) - Gruppen verwalten. action kann get, list, create oder delete sein. Geben Sie group_id für get/delete und data beim Erstellen einer Gruppe an.
  • folder_management(action, folder_id=None, data=None, params=None) - Ordner verwalten. action kann get, list, create, update oder delete sein. Geben Sie folder_id für get, update oder delete an und liefern Sie data beim Erstellen oder Aktualisieren eines Ordners.
  • user_group_management(action, user_id, group_ids=None) - Gruppenmitgliedschaft für einen Benutzer verwalten. action ist get, add oder remove. Liefern Sie eine Liste von group_ids beim Hinzufügen oder Entfernen der Mitgliedschaft.
  • group_role_management(action, group_id, role_ids=None) - Rollen auf einer Gruppe steuern. Verwenden Sie Aktionen list, add oder remove. Geben Sie role_ids beim Hinzufügen oder Entfernen an.
  • health_check() - den Health-Check-Endpunkt von Secret Server abfragen und den aktuellen Dienststatus zurückgeben.

Delinea-Platform-Benutzer und -Rollen

Seit v1.0.0 zielen die kanonischen Benutzer-Tools auf das Delinea-Platform-Identitätsverzeichnis (erfordert Anmeldedaten platform_hostname + PLATFORM_SERVICE_*; ohne diese geben die Tools Anleitungen zurück, anstatt zu scheitern):

  • user_management(action, user_id=None, data=None, username=None) - Plattform-Benutzer-CRUD. action akzeptiert get, create, update, delete oder search.
  • search_users(query) - das Plattform-Benutzerverzeichnis durchsuchen.
  • platform_role_management(action, role_id=None, data=None, page_size=100, query="%") - Plattform-Rollen-CRUD (list, get, create, update, delete); Rollenmutationen sind entdeckungsgesteuert und geben Anleitungen für Mandanten zurück, deren API-Umfang sie nicht offenlegt.
  • platform_user_role_management(action, role_id, user_principals=None) - list, add oder remove Benutzer auf einer Plattform-Rolle.
  • platform_user_management(...) - veralteter Alias von user_management.

Secret-Server-Lokalbenutzer (Legacy)

Für reine SS-Bereitstellungen ohne konfigurierte Plattform:

  • secretserver_local_user_management(action, user_id=None, data=None, skip=0, take=20, is_exporting=False) - die Secret-Server-Benutzeroperationen vor v1.0.0: get, create, update, delete, list_sessions, reset_2fa, reset_password, lock_out. Beispiel: secretserver_local_user_management("reset_password", user_id=42, data={"newPassword": "Pa$$w0rd"}).
  • search_secretserver_local_users(query) - den lokalen Benutzerspeicher von Secret Server durchsuchen.

StrongDM-Tools (optional, experimentell)

Experimentell: Das StrongDM-Backend wurde noch nicht gegen eine Live-SDM-Organisation verifiziert (nur Unit-getestet gegen die SDK-Oberfläche). Erwarten Sie raue Kanten und melden Sie Probleme. Installiert über das strongdm-Extra; siehe docs/strongdm.md für die vollständige Anleitung. sdm_search, sdm_audit_access, sdm_grant_access (zeitlich begrenzte Just-in-Time- oder stehende Berechtigungen), sdm_revoke_access, sdm_user_management (Onboard/Offboard-Abläufe), sdm_role_management, sdm_resource_health, sdm_access_requests, sdm_activity_report, sdm_network_status. Destruktive Aktionen sind bestätigungsgesperrt mit Audit-Kommentaren; mehrdeutige Namensübereinstimmungen geben Kandidaten ohne Mutation zurück.

Verwenden Sie die oben beschriebenen Serverkonfigurationsvariablen zur Authentifizierung. Das KI-Tool wird automatisch deaktiviert, wenn die Azure-OpenAI-Variablen fehlen. Nur die in config.json aufgeführten Toolnamen werden registriert. Eine leere Liste aktiviert jedes Tool.

Anwendungsfälle

Die Dokumentation behandelt mehrere Arbeitsabläufe zum Verbinden von Tools mit dem Server:

Docker-Schnellstart

Ein Dockerfile wird bereitgestellt, um den MCP-Server auszuführen, ohne Python-Abhängigkeiten lokal zu installieren.

  1. Erstellen Sie das Image:
docker build -t dev.local/delinea-mcp:latest .
  1. Starten Sie den Server (übergeben Sie Ihre Anmeldedaten über Umgebungsvariablen):
docker run --rm -p 8000:8000 \
  -e DELINEA_PASSWORD=<password> \
  -e PLATFORM_SERVICE_PASSWORD=<password> \
  -e DELINEA_DEBUG=1 \
  -e AZURE_OPENAI_KEY=<your-key-or-appropriate-token> \
  -v $(pwd)/config.json:/app/config.json:ro \
  -v mcp-data:/app/data \
  dev.local/delinea-mcp:latest

Befüllen Sie config.json mit Ihren Benutzernamen und URLs wie oben gezeigt.

Der Container speichert oauth.db und jwt.json in /app/data. Mounten Sie ein Volume (oben als mcp-data gezeigt), damit diese Dateien und alle HTTPS-Zertifikate zwischen den Ausführungen erhalten bleiben.

Ersetzen Sie <https://your-secret-server/SecretServer> durch die Basis-URL Ihrer Secret-Server-Instanz, um Verbindungsfehler zu vermeiden.

Der Server startet standardmäßig auf Port 8000 unter Verwendung von python server.py. Setzen Sie die Option port in config.json, um den Standardwert zu überschreiben. Aktivieren Sie debug: true, um alle eingehenden HTTP-Anfragen zu protokollieren.

Beispielskripte

Das Skript manual_secret_request.py zeigt, wie ein OAuth-Token für eine bestimmte Secret-ID abgerufen wird:

python scripts/manual_secret_request.py <Secret_ID>

Setzen Sie die Umgebungsvariablen SECRET_USERNAME_<id> und SECRET_PASSWORD_<id> für das Secret, bevor Sie das Skript ausführen. Setzen Sie optional DELINEA_BASE_URL, um den Standardwert https://localhost/SecretServer zu überschreiben.

Tests ausführen

Führen Sie die Unit-Tests mit Coverage aus (CI erzwingt ein Minimum von 70 %):

pip install -r requirements.txt
coverage run -m pytest -q
coverage report --omit "tests/*"

Live-Tests

Einige Integrationstests erfordern gültige Anmeldedaten. Setzen Sie die folgenden Umgebungsvariablen und optional LIVE_SECRET_ID, bevor Sie die Testsuite ausführen:

export DELINEA_PASSWORD=<password>
# Optional secret used by tests/test_live.py
export LIVE_SECRET_ID=<id>
export SECRET_USERNAME_<id>=<secret_username>
export SECRET_PASSWORD_<id>=<secret_password>

Wenn diese Variablen vorhanden sind, führen die Live-Tests echte API-Anfragen aus.

Produktionsbereitstellung

Abhängigkeiten sind in requirements.txt festgelegt und Releases werden mit Semantic Versioning getaggt. Erstellen Sie das Docker-Image aus einem getaggten Commit und stellen Sie es in Ihrer Produktionsumgebung bereit, wobei Sie die erforderlichen Umgebungsvariablen übergeben (DELINEA_USERNAME, DELINEA_PASSWORD, optional DELINEA_BASE_URL). Optionale Funktionen sind auf zusätzliche Variablen angewiesen:

  • PLATFORM_SERVICE_PASSWORD zusammen mit PLATFORM_HOSTNAME, PLATFORM_SERVICE_ACCOUNT und PLATFORM_TENANT_ID aktiviert die Benutzerverwaltungswerkzeuge.
  • AZURE_OPENAI_KEY zusammen mit AZURE_OPENAI_ENDPOINT und AZURE_OPENAI_DEPLOYMENT aktiviert den KI-Berichtsgenerierungs-Assistenten.
  • SDM_API_ACCESS_KEY und SDM_API_SECRET_KEY aktivieren die experimentellen StrongDM-Werkzeuge (erfordert das Extra strongdm; siehe docs/strongdm.md).

Wenn Sie mit OAuth- oder SSE-Transport arbeiten, müssen Sie möglicherweise registration_psk bereitstellen und ein external_hostname oder HTTPS-Zertifikatsdateien konfigurieren.

Repository-Struktur

  • delinea_mcp/ - Paket mit den MCP-Werkzeugen: tools.py (Secret Server), user_platform_tools.py (Delinea Platform), secretserver_users.py (SS-lokale Benutzer), strongdm_tools.py (StrongDM, optional), plus transports/ (SSE + streamable HTTP) und auth/ (der eingebettete OAuth-Autorisierungsserver).
  • server.py - schlanker Einstiegspunkt, der alles beim MCP-Server registriert.
  • docs/ - Projektdokumentation und das generierte delinea-secret-server-openapi-spec.json.
  • scripts/ - Hilfsbeispiele einschließlich manual_secret_request.py.

Sicherheitshinweise

Der eingebettete OAuth-Autorisierungsserver ist ein Komfort für Entwicklung, Tests und kleine Bereitstellungen; größere Bereitstellungen sollten den Server mit dem Identitätsanbieter ihrer Organisation absichern. Aktuelle Schutzmaßnahmen:

  • Die Client-Registrierung (/oauth/register) und das Autorisierungsformular erfordern beide das gemeinsame Geheimnis registration_psk (konstant-zeitlich verglichen).
  • redirect_uri-Werte werden gegen die für den Client registrierten URIs validiert, sowohl im Autorisierungsformular als auch bei der Code-Weiterleitung.
  • Zugriffstokens sind zielgruppengebundene RS256-JWTs; die Ressourcenermittlung folgt RFC 9728 (/.well-known/oauth-protected-resource plus WWW-Authenticate-Header bei 401/403-Antworten).
  • Stellen Sie immer mit TLS bereit (ssl_keyfile/ssl_certfile oder einem terminierenden Proxy) — Bearer-Tokens und Geheimnisse durchlaufen jede Anfrage.
  • Begrenzen Sie die Werkzeugfreigabe pro Anwendungsfall mit enabled_tools; Secret-Werte werden bewusst aus dem Modellkontext ferngehalten (serverseitige Passwortgenerierung, Umgebungsvariablen-Skriptindirektion, Passwortfeld-Schutz).

Versionshinweise

Siehe CHANGELOG.md für eine Zusammenfassung der neuesten Funktionen und Roadmap-Punkte.

Roadmap

  1. Passthrough-Authentifizierung
  2. OAuth-Client-ID-Metadaten-Dokumente (CIMD)-Client-Unterstützung (Dynamic Client Registration ist seit der MCP-Protokollrevision 2026-07-28 veraltet; der PSK-gesteuerte /oauth/register-Flow funktioniert weiterhin für aktuelle Konnektoren)
  3. Erweiterung der Werkzeugabdeckung auf der Delinea Platform und Hinzufügen weiterer Delinea-Produkte

Mitwirken

Beiträge sind willkommen! Bitte eröffnen Sie Issues oder Pull Requests für Verbesserungen. Neuer Code sollte Unit-Tests enthalten und die bestehende Testsuite bestehen.

Lizenz

Dieses Projekt ist unter der MIT-Lizenz lizenziert.