delinea-mcp
offiziellOffizieller 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
searchundfetch, um Geheimnisse zu finden und deren Details abzurufen, wobei die Objekttypen durch die Konfiguration vonsearch_objectsundfetch_objectseingeschränkt werden. - Geheimnisse verwalten, ohne Werte offenzulegen — Erstellen oder rotieren Sie Passwörter serverseitig über
create_secret_with_generated_passwordundupdate_secret_generated_password, sodass Geheimniswerte nicht im Modellkontext erscheinen. - SQL-Berichte ausführen — Führen Sie Ad-hoc-Abfragen mit
run_reportaus oder generieren Sie SQL aus einer Beschreibung mitai_generate_and_run_report(erfordert Azure OpenAI). - Zugriffsanfragen und Posteingang verwalten — Genehmigen oder ablehnen Sie ausstehende Anfragen mit
handle_access_request, listen Sie diese überget_pending_access_requestsauf und verwalten Sie Posteingangsnachrichten mitget_inbox_messagesundmark_inbox_messages_read. - Benutzer, Gruppen und Rollen verwalten — Verwalten Sie Secret-Server-Entitäten über
user_management,group_management,role_managementsowie zugehörige Mitgliedschaftswerkzeuge wieuser_role_managementundgroup_role_management. - Dienststatus prüfen — Fragen Sie den Status-Endpunkt des Secret Servers mit
health_checkab, um zu überprüfen, ob der Dienst betriebsbereit ist.
Dokumentation
DelineaMCP
MCP-Server für die Delinea Secret Server- und Plattform-APIs
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 (
searchundfetch) 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 Siepip- undvenv-Befehle wie gewohnt verwenden, falls gewünscht.
- Uv installieren
- Projekt initialisieren:
uv pip sync requirements.txt uv run server.py --config config.jsonverwenden
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 UmgebungsvariablenSDM_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 (
noneoderoauth). OAuth funktioniert offensichtlich nicht mit STDIO-Transport. - transport_mode -
stdiofür die Befehlszeile oderssefür HTTP. Imsse-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/mcpohne serverseitige Sitzungen aus (empfohlen für Remote-Connectors). Setzen Siefalse, 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 aberuser,folder,groupundroleenthalten. - fetch_objects - Zulässige Objekttypen für das
fetch-Tool. Standard:["secret"], kann aber dieselben Werte wiesearch_objectsenthalten.
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üsselsearch_objectsbegrenzt (Standard: nur Geheimnisse).fetch(id)- ein einzelnes Objekt abrufen, das vonsearchangezeigt wird; begrenzt durchfetch_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; erfordertconfirm=Trueplus einen nicht leeren Audit-Kommentar und zeigt Vorschauen, wenn nicht bestätigt.role_management(action, role_id=None, data=None, params=None)- Rollen verwalten.actionkannlist,get,createoderupdatesein. Übergeben Sie optionale Abfrageparameter mitparamsbeim 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.actionistget,addoderremoveundrole_idsist eine Liste von Rollen-IDs für Hinzufügen/Entfernen-Operationen.group_management(action, group_id=None, data=None, params=None)- Gruppen verwalten.actionkannget,list,createoderdeletesein. Geben Siegroup_idfür get/delete unddatabeim Erstellen einer Gruppe an.folder_management(action, folder_id=None, data=None, params=None)- Ordner verwalten.actionkannget,list,create,updateoderdeletesein. Geben Siefolder_idfür get, update oder delete an und liefern Siedatabeim Erstellen oder Aktualisieren eines Ordners.user_group_management(action, user_id, group_ids=None)- Gruppenmitgliedschaft für einen Benutzer verwalten.actionistget,addoderremove. Liefern Sie eine Liste vongroup_idsbeim Hinzufügen oder Entfernen der Mitgliedschaft.group_role_management(action, group_id, role_ids=None)- Rollen auf einer Gruppe steuern. Verwenden Sie Aktionenlist,addoderremove. Geben Sierole_idsbeim 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.actionakzeptiertget,create,update,deleteodersearch.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,addoderremoveBenutzer auf einer Plattform-Rolle.platform_user_management(...)- veralteter Alias vonuser_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:
- ChatGPT Custom Connector
- Claude Desktop
- Remote Claude Connector
- openwebui für die Verwaltung
- VSCode Copilot
Docker-Schnellstart
Ein Dockerfile wird bereitgestellt, um den MCP-Server auszuführen, ohne Python-Abhängigkeiten lokal zu installieren.
- Erstellen Sie das Image:
docker build -t dev.local/delinea-mcp:latest .
- 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_PASSWORDzusammen mitPLATFORM_HOSTNAME,PLATFORM_SERVICE_ACCOUNTundPLATFORM_TENANT_IDaktiviert die Benutzerverwaltungswerkzeuge.AZURE_OPENAI_KEYzusammen mitAZURE_OPENAI_ENDPOINTundAZURE_OPENAI_DEPLOYMENTaktiviert den KI-Berichtsgenerierungs-Assistenten.SDM_API_ACCESS_KEYundSDM_API_SECRET_KEYaktivieren die experimentellen StrongDM-Werkzeuge (erfordert das Extrastrongdm; 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), plustransports/(SSE + streamable HTTP) undauth/(der eingebettete OAuth-Autorisierungsserver).server.py- schlanker Einstiegspunkt, der alles beim MCP-Server registriert.docs/- Projektdokumentation und das generiertedelinea-secret-server-openapi-spec.json.scripts/- Hilfsbeispiele einschließlichmanual_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 Geheimnisregistration_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-resourceplusWWW-Authenticate-Header bei 401/403-Antworten). - Stellen Sie immer mit TLS bereit (
ssl_keyfile/ssl_certfileoder 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
- Passthrough-Authentifizierung
- 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) - 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.