delinea-mcp Server
offiziellOffizieller Delinea MCP-Server für die Delinea Secret Server und Platform APIs
Dokumentation
DelineaMCP
MCP-Server für die Delinea Secret Server- und Plattform-APIs
Funktionen
- Automatische Authentifizierung gegenüber Secret Server
- Umfangreicher Secret-Server-Werkzeugsatz zur Verwaltung von Ordnern, Secrets, Benutzern, Gruppen und Rollen. Enthält Posteingangs- und Zugriffsanforderungs-Helfer sowie Dienstprogramme für Coding-Agenten.
- ChatGPT-Kompatibilitätswerkzeuge (
searchundfetch) für kontrollierte KI-Interaktionen. - Optionale Delinea-Plattform-Benutzerverwaltungswerkzeuge
- Unterstützt sowohl Server-Sent-Events- als auch STDIO-Transportmodi
- OAuth 2.0 mit dynamischer Client-Registrierung gemäß der MCP-Spezifikation
- TLS-Unterstützung für sichere Verbindungen
- Einsatzbereites 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 Siepipundvenv-Befehle wie gewohnt verwenden.
- 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.
Stellen Sie DELINEA_PASSWORD in Ihrer Shell-Umgebung bereit.
Optionale Funktionen benötigen zusätzliche 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-Werkzeuge).
- platform_service_account – Dienstkonto, das mit der Plattform-API verwendet wird.
- platform_tenant_id – Mandanten-ID für Plattform-API-Anfragen.
- azure_openai_endpoint – Azure OpenAI-Endpunkt. Nur erforderlich, wenn Sie die automatische Berichterstellung wünschen (die meisten Agenten können ihr eigenes Berichts-SQL generieren, daher nur aktivieren, wenn nötig).
- azure_openai_deployment – Bereitstellungsname für Azure OpenAI.
- auth_mode – Authentifizierungsmodus (
noneoderoauth). OAuth funktioniert offensichtlich nicht mit stdio-Transport. - transport_mode –
stdiofür Befehlszeile oderssefür HTTP/SSE. - chatgpt_disable_scope_checks – Bereichsvalidierung bei ChatGPT-Anfragen überspringen. Nur aktivieren, wenn Probleme bei der Verbindung mit ChatGPT auftreten.
- port – Port für den HTTP-Server im
sse-Modus. - debug – Ausführliche Protokollierung aktivieren.
- external_hostname – Hostname, der bei der Erstellung 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 vereinbarter Schlüssel, der zur Registrierung 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, das für OAuth-Token verwendet wird. 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 Werkzeugnamen. Eine leere Liste aktiviert alle Werkzeuge. Es wird dringend empfohlen, Werkzeuge selektiv pro Anwendungsfall oder Aufgabe zu aktivieren. Siehe Ordner
docs/für einige Beispiele. - search_objects – Erlaubte Objekttypen für das Werkzeug
search. Standard:["secret"], kann aberuser,folder,groupundroleenthalten. - fetch_objects – Erlaubte Objekttypen für das Werkzeug
fetch. Standard:["secret"], kann aber dieselben Werte wiesearch_objectsenthalten.
Server ausführen
Starten Sie den Server lokal im Entwicklungsmodus:
python server.py
Beim Start fordert der Server ein Bearer-Token an und speichert es für nachfolgende API-Anfragen. Dieses Projekt wird erweitert, um die Integration mit der Secret-Server-API zu vertiefen.
MCP-Werkzeuge
Der Server stellt mehrere MCP-Werkzeuge für die Interaktion mit Secret Server bereit:
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 Secret oder Zusammenfassungsdetails abrufen.get_folder(id)– Ordnermetadaten und untergeordnete Elemente abrufen.search_users(query)– aktive Benutzer suchen.search_secrets(query, lookup=False)– Secrets suchen oder nachschlagen.search_folders(query, lookup=False)– Ordner suchen oder nachschlagen.get_secret_environment_variable(secret_id, environment)– ein Skript zum Abrufen von Secret-Anmeldeinformationen in der angegebenen Shell ausgeben.check_secret_template(template_id)– Details zur Secret-Vorlage 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 Secret-Vorlagenfeld anhand der ID abrufen.handle_access_request(request_id, status, response_comment, start_date=None, expiration_date=None)– eine Zugriffsanforderung genehmigen oder ablehnen.get_pending_access_requests()– ausstehende Zugriffsanforderungen 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.user_management(action, user_id=None, data=None, skip=0, take=20, is_exporting=False)– einheitliche Benutzeroperationen.actionakzeptiertget,create,update,delete,list_sessions,reset_2fa,reset_passwordoderlock_out. Geben Sieuser_idan, wenn erforderlich, und übergeben Sie den Anforderungstext überdatafür Erstellungs-, Aktualisierungs- und Passwort-Zurücksetzungsaktionen. Beispiel:user_management("reset_password", user_id=42, data={"newPassword": "Pa$$w0rd"}).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 entziehen.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 Abrufen/Löschen 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 Abrufen, Aktualisieren oder Löschen an und übergeben Siedatabeim Erstellen oder Aktualisieren eines Ordners.user_group_management(action, user_id, group_ids=None)– Gruppenmitgliedschaft für einen Benutzer verwalten.actionistget,addoderremove. Übergeben Sie eine Liste vongroup_idsbeim Hinzufügen oder Entfernen der Mitgliedschaft.group_role_management(action, group_id, role_ids=None)– Rollen für eine Gruppe steuern. Verwenden Sie die Aktionenlist,addoderremove. Geben Sierole_idsbeim Hinzufügen oder Entfernen an.health_check()– den Secret-Server-Health-Check-Endpunkt abfragen und den aktuellen Dienststatus zurückgeben.
Verwenden Sie die oben beschriebenen Serverkonfigurationsvariablen zur Authentifizierung.
Das KI-Werkzeug wird automatisch deaktiviert, wenn die Azure OpenAI-Variablen fehlen.
Nur die in config.json aufgeführten Werkzeugnamen werden registriert.
Eine leere Liste aktiviert jedes Werkzeug.
Anwendungsfälle
Die Dokumentation behandelt mehrere Workflows zum Verbinden von Werkzeugen mit dem Server:
- ChatGPT Custom Connector
- Claude Desktop
- Remote Claude Connector
- openwebui für Administration
- VSCode Copilot
Docker-Schnellstart
Eine Dockerfile wird bereitgestellt, um den MCP-Server ohne lokale Installation von Python-Abhängigkeiten auszuführen.
- Image erstellen:
docker build -t dev.local/delinea-mcp:latest .
- Server ausführen (übergeben Sie Ihre Anmeldeinformationen ü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
Füllen Sie config.json mit Ihren Benutzernamen und URLs wie oben gezeigt.
Der Container speichert oauth.db und jwt.json in /app/data.
Binden Sie ein Volume ein (oben als mcp-data dargestellt), damit diese Dateien und etwaige 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 Standard 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 Standard https://localhost/SecretServer zu überschreiben.
Tests ausführen
Führen Sie die Unit-Tests mit Abdeckung aus, um 100 % Codeabdeckung sicherzustellen:
pip install -r requirements.txt
coverage run -m pytest -q
coverage report --omit "tests/*"
Live-Tests
Einige Integrationstests erfordern gültige Anmeldeinformationen.
Setzen Sie die folgenden Umgebungsvariablen und das optionale LIVE_SECRET_ID, bevor Sie die Suite 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 durch.
Produktionsbereitstellung
Abhängigkeiten sind in requirements.txt fixiert und Releases werden mit Semantic Versioning getaggt.
Erstellen Sie das Docker-Image von 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 benötigen zusätzliche Variablen:
PLATFORM_SERVICE_PASSWORDzusammen mitPLATFORM_HOSTNAME,PLATFORM_SERVICE_ACCOUNTundPLATFORM_TENANT_IDaktiviert die Benutzerverwaltungswerkzeuge.AZURE_OPENAI_KEYzusammen mitAZURE_OPENAI_ENDPOINTundAZURE_OPENAI_DEPLOYMENTaktiviert den KI-Berichterstellungshelfer.
Bei Ausführung mit OAuth- oder SSE-Transport müssen Sie möglicherweise registration_psk bereitstellen und einen external_hostname oder HTTPS-Zertifikatsdateien konfigurieren.
Repository-Struktur
delinea_mcp/– Paket mit MCP-Werkzeugen.server.py– schlanker Einstiegspunkt, der alles beim MCP-Server registriert.docs/– Projektdokumentation und die generiertedelinea-secret-server-openapi-spec.json.scripts/– Hilfsbeispiele, einschließlichmanual_secret_request.py.
Sicherheitshinweise
Die enthaltenen OAuth-Endpunkte sind für Entwicklung und Tests vorgesehen.
Die Route /oauth/authorize akzeptiert jedes redirect_uri und leitet den Benutzer ohne Validierung weiter.
Bereitstellungen müssen diesen Wert auf genehmigte Callback-URLs beschränken; andernfalls könnten Angreifer eine bösartige URL angeben und Autorisierungscodes abfangen.
Siehe Open Redirection für Hintergrundinformationen.
Versionshinweise
Siehe docs/release_notes.md für eine Zusammenfassung der neuesten Funktionen und Roadmap-Elemente.
Roadmap
- Passthrough-Authentifizierung
- Streaming-HTTP-Transportunterstützung
- Werkzeugabdeckung auf der Delinea-Plattform erweitern und andere Delinea-Produkte hinzufügen
Mitwirken
Beiträge sind willkommen! Bitte eröffnen Sie Issues oder Pull Requests für Verbesserungen. Jeder neue Code sollte Unit-Tests enthalten und die bestehende Testsuite bestehen.
Lizenz
Dieses Projekt ist unter der MIT-Lizenz lizenziert.