searchLABSCO SUMMARY
The secret never reaches the model, by design.
That is the question anyone asks about connecting a vault to an assistant, and the answer here is structural rather than a promise. Passwords are generated and rotated inside Secret Server and only metadata comes back; when a value genuinely has to move, the server hands you a shell script that moves it locally. update_secret_fields refuses password-marked fields unless you say otherwise. bulk_user_response is the other piece worth noticing — the incident scenarios are named and confirm-gated with a required audit comment, so a compromise response is one deliberate call instead of a dozen improvised ones.
What it is
Delinea's MCP server for Secret Server and the Delinea Platform identity directory, with an optional StrongDM backend. The design decision that shapes it: password operations are done server-side and return only sanitized metadata, so the value never reaches the model that requested the change.
What you get
- Secrets and folders — get_secret, get_folder, search_secrets, search_folders and folder_management for creating, updating and deleting folders
- Password work that keeps the value away from the model — create_secret_with_generated_password and update_secret_generated_password generate and rotate server-side, returning metadata only
- update_secret_fields, which reads the template, changes non-password fields and verifies the result, and refuses password-marked fields unless you explicitly allow them
- get_secret_environment_variable and set_secret_field_environment_variable, which emit a shell script you run locally — the value moves between your machine and Secret Server without passing through the conversation
- Access requests and inbox — get_pending_access_requests, handle_access_request, get_inbox_messages and mark_inbox_messages_read
- Reporting — run_report for a temporary report from SQL, list_example_reports for sample queries and table information, and ai_generate_and_run_report which writes the SQL from a description when Azure OpenAI is configured
- Platform identity — user_management, search_users, platform_role_management and platform_user_role_management, with secretserver_local_user_management and search_secretserver_local_users for Secret Server-only deployments
- bulk_user_response, an incident combinator over bulk user operations with named scenarios — compromise, offboard, unlock, reenable and force_logout — which previews unless you confirm and requires an audit comment
- Secret Server roles and groups — role_management, user_role_management, group_management, user_group_management and group_role_management
- Templates — check_secret_template, check_secret_template_field and get_secret_template_field, plus health_check for service status
- search and fetch, a unified pair for clients that expect that shape, with the object types they can reach set in config and limited to secrets by default
- Every tool publishes read-only and destructive hints, so a client can treat them differently
- An experimental StrongDM backend — sdm_search, sdm_audit_access, sdm_grant_access for time-boxed just-in-time grants, sdm_revoke_access, sdm_user_management, sdm_role_management, sdm_access_requests, sdm_resource_health, sdm_activity_report and sdm_network_status — which the README says has not been verified against a live organization
Requirements
A Secret Server instance and credentials — DELINEA_BASE_URL, DELINEA_USERNAME and DELINEA_PASSWORD. The Platform user and role tools need PLATFORM_HOSTNAME, PLATFORM_TENANT_ID and PLATFORM_SERVICE_ACCOUNT with PLATFORM_SERVICE_PASSWORD; without them those tools return guidance rather than failing. StrongDM is an optional extra needing SDM_API_ACCESS_KEY and SDM_API_SECRET_KEY, and AI-generated reports need Azure OpenAI configured. A Dockerfile is provided. The server speaks streamable HTTP; its embedded OAuth authorization server is described as a development convenience, so read the security notes before exposing it.
Setup effort
Follow the published steps — uv run server.py --config config.json
USE CASES
Rotating a credential without seeing it
Have the new password generated inside Secret Server; only metadata comes back.
Getting a credential into your shell
Generate the script that fetches it locally, so the value never appears in the conversation.
Responding to a compromised account
Run the named scenario over the affected users, review the preview, then confirm with an audit comment.
Clearing a queue of access requests
List what is pending and approve or deny with a comment and an expiry.
Answering an audit question about your vault
Describe the report you need, let it write the SQL, and run it as a temporary report.
Onboarding or offboarding someone
Create or remove the Platform user and set their roles and group membership.
Finding where a credential lives
Search secrets and folders, then read the metadata without pulling the value.
46 tools
Listed in project docs. Your client may show a different list.
fetchrun_reportai_generate_and_run_reportlist_example_reportsget_secretget_foldersearch_secretssearch_foldersget_secret_environment_variablecheck_secret_templatecheck_secret_template_fieldget_secret_template_fieldhandle_access_requestget_pending_access_requestsget_inbox_messagesmark_inbox_messages_readcreate_secret_with_generated_passwordupdate_secret_generated_passwordupdate_secret_fieldsset_secret_field_environment_variablebulk_user_responserole_managementuser_role_managementgroup_managementfolder_managementuser_group_managementgroup_role_managementhealth_checkuser_managementsearch_usersplatform_role_managementplatform_user_role_managementplatform_user_managementsecretserver_local_user_managementsearch_secretserver_local_userssdm_searchsdm_audit_accesssdm_grant_accesssdm_revoke_accesssdm_user_managementsdm_role_managementsdm_resource_healthsdm_access_requestssdm_activity_reportsdm_network_statusBEFORE YOU INSTALL
What to know first
Tools you get
46 tools named in the project's documentation.
Requires
DELINEA_PASSWORD in your environment
INSTALLATION
Connect your client
Server setup
git clone https://github.com/DelineaXPM/delinea-mcp
cd delinea-mcpInstall uv (https://docs.astral.sh/uv/getting-started/installation/)
Initialize project:
uv pip sync requirements.txtCreate config.json with delinea_username / delinea_base_url etc.
Export DELINEA_PASSWORD (and any optional-feature secrets) in your shell
uv run server.py --config config.jsonMCP Clients
Claude Desktop — Local
{
"mcpServers": {
"DelineaMCP": {
"command": "<YOUR_PATH_TO_VENV>/bin/python",
"args": [
"<YOUR_PATH_TO_DELINEA_MCP>/server.py",
"--config",
"<YOUR_PATH_TO_CONFIG>"
],
"env": {
"DELINEA_PASSWORD": "<YOUR_DELINEA_PASSWORD>",
"PLATFORM_SERVICE_PASSWORD": "<YOUR_PLATFORM_SERVICE_PASSWORD>",
"DELINEA_DEBUG": "1"
}
}
}
}VS Code
{
"servers": {
"delinea": {
"command": "<YOUR_PATH_TO_VENV>/bin/python",
"args": [
"<YOUR_PATH_TO_DELINEA_MCP>/server.py",
"--config",
"<YOUR_PATH_TO_CONFIG>"
],
"env": {
"DELINEA_PASSWORD": "<YOUR_DELINEA_PASSWORD>"
}
}
}
}ChatGPT — SSE, OAuth
In config.json set auth_mode to "oauth", transport_mode to "sse", external_hostname to your server's hostname (no scheme or port) and registration_psk to a shared secret you choose
Set enabled_tools to ["search", "fetch", "search_secrets", "get_secret"] — ChatGPT uses search and fetch, and those two need the other two
Set ssl_keyfile and ssl_certfile so the server answers over HTTPS
Export DELINEA_PASSWORD (plus any optional secrets), then start the server
uv run server.py --config config.jsonIn ChatGPT, create a custom connector pointing to the server's /mcp endpoint; clients that only speak HTTP+SSE use /mcp/sse
Provide the OAuth client credentials the server generates, and approve the registration in the browser with your registration_psk
Claude.ai — Remote, Claude Desktop — Remote
In config.json set auth_mode to "oauth", transport_mode to "sse", external_hostname to your server's hostname (no scheme or port) and registration_psk to a shared secret you choose
List the tools to expose in enabled_tools — the guide's read-only reporting set is run_report, ai_generate_and_run_report and list_example_reports
Set ssl_keyfile and ssl_certfile so the server answers over HTTPS
Export DELINEA_PASSWORD (plus any optional secrets), then start the server
uv run server.py --config config.jsonIn Claude, add a custom connector pointing to the server's /mcp endpoint; older HTTP+SSE clients use /mcp/sse
Provide the OAuth client credentials the server generates, and approve the registration in the browser with your registration_psk
Open WebUI — mcpo
In config.json keep auth_mode "none" and transport_mode "stdio", and list the tools to expose in enabled_tools — the guide's administration set is every tool except get_secret_environment_variable
Install mcpo and make sure the MCP server is reachable
In Open WebUI, create a new connection that runs mcpo with your configuration file
Other routes
Docker
docker build -t dev.local/delinea-mcp:latest .
docker run --rm -p 8000:8000 \
-e DELINEA_PASSWORD=<YOUR_DELINEA_PASSWORD> \
-e PLATFORM_SERVICE_PASSWORD=<YOUR_PLATFORM_SERVICE_PASSWORD> \
-e DELINEA_DEBUG=1 \
-e AZURE_OPENAI_KEY=<YOUR_AZURE_OPENAI_KEY> \
-v $(pwd)/config.json:/app/config.json:ro \
-v mcp-data:/app/data \
dev.local/delinea-mcp:latest