delinea-mcp

官方

Delinea Secret Server 和 Platform API 的官方 Delinea MCP 服务器

你可以用 Delinea MCP 做什么?

  • 搜索和获取机密 — 使用 searchfetch 查找机密并检索其详细信息,对象类型由 search_objectsfetch_objects 配置限制。
  • 管理机密而不暴露值 — 通过 create_secret_with_generated_passwordupdate_secret_generated_password 在服务器端创建或轮换密码,使机密值不进入模型上下文。
  • 运行 SQL 报告 — 使用 run_report 执行临时查询,或使用 ai_generate_and_run_report 从描述生成 SQL(需要 Azure OpenAI)。
  • 处理访问请求和收件箱 — 使用 handle_access_request 批准或拒绝待处理请求,通过 get_pending_access_requests 列出它们,并使用 get_inbox_messagesmark_inbox_messages_read 管理收件箱消息。
  • 管理用户、组和角色 — 通过 user_managementgroup_managementrole_management 以及相关的成员资格工具(如 user_role_managementgroup_role_management)管理 Secret Server 实体。
  • 检查服务健康状态 — 使用 health_check 查询 Secret Server 状态端点,以验证服务是否正常运行。

文档

DelineaMCP

用于 Delinea Secret Server 和 Platform API 的 MCP 服务器

License


新闻

  • 2026年8月11日 — MCP 协议 v2(规范修订版 2026-07-28,可流式 HTTP)和实验性 StrongDM API 支持已发布 — 请参阅发布说明
  • 2026年8月11日 — 我们是"LLM 无法看到机密信息"的保险库用例的原始提供者 — 谨防模仿者 ;)

功能特性

  • 自动对 Secret Server 进行身份验证
  • 全面的 Secret Server 工具集,用于管理文件夹、机密、用户、组和角色。包括收件箱和访问请求辅助工具以及编码代理实用程序。
  • ChatGPT 兼容工具(searchfetch),用于受控的 AI 交互。
  • 可选的 Delinea Platform 用户管理工具
  • 可选的实验性 StrongDM (SDM) 工具 — 访问授权、权限审计、用户/角色生命周期、健康与活动报告(参见 docs/strongdm.md;使用 pip install "delinea-mcp[strongdm]" 安装)
  • 可流式 HTTP(/mcp)、旧版 Server-Sent Events(/mcp/sse)和 STDIO 传输
  • 根据 MCP 规范进行动态客户端注册的 OAuth 2.0
  • 支持 TLS 安全连接
  • 开箱即用的 Docker 镜像和开发服务器入口点
  • 已通过 ChatGPT、Claude Desktop、远程 Claude 连接器、VSCode Copilot 和 openwebui 测试

安装

[!NOTE]

本项目使用 uvhttps://github.com/astral-sh/uv),但如果您希望在没有它的情况下运行命令,可以按需照常执行 pipvenv 命令。

  • 安装 Uv
  • 初始化项目:uv pip sync requirements.txt
  • 使用 uv run server.py --config config.json

配置

密码等机密信息继续来自环境变量。请在您的 shell 环境中提供 DELINEA_PASSWORD。可选功能依赖于其他变量,例如 AZURE_OPENAI_KEYPLATFORM_SERVICE_PASSWORD

非机密参数属于 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": []
}

对于 Secret Server Cloud,直接使用云 URL,无需 /SecretServer。指定 ssl_keyfilessl_certfile 以启用 HTTPS。对于 Let's Encrypt,请使用 privkey.pemfullchain.pem 文件。

配置文件支持以下键:

  • delinea_username - Secret Server 用户名。必须是具有执行所需任务权限的程序化用户。
  • delinea_base_url - 您的 Secret Server 实例的基础 URL。
  • platform_hostname - Platform 租户主机名(启用 Platform 工具)。
  • platform_service_account - 用于 Platform API 的服务账户。
  • platform_tenant_id - Platform API 请求的租户 ID。
  • strongdm_api_host - StrongDM 控制平面(默认 app.strongdm.com:443;提供英国/欧盟变体)。凭据来自 SDM_API_ACCESS_KEY / SDM_API_SECRET_KEY 环境变量;参见 docs/strongdm.md
  • azure_openai_endpoint - Azure OpenAI 端点。仅当您需要自动报告生成时使用(大多数代理可以生成自己的报告 SQL,因此除非需要,否则不要启用)。
  • azure_openai_deployment - Azure OpenAI 的部署名称。
  • auth_mode - 身份验证模式(noneoauth)。OAuth 显然不适用于 stdio 传输。
  • transport_mode - 命令行使用 stdio,HTTP 使用 sse。在 sse 模式下,服务器同时暴露 /mcp 上的可流式 HTTP 端点(当前 MCP 传输,支持协议修订版 2024-11-05 至 2026-07-28)以及 /mcp/sse + /messages/ 上的旧版 HTTP+SSE 端点。
  • streamable_http_stateless - 默认 true;在无服务器端会话的情况下运行 /mcp(推荐用于远程连接器)。设置 false 以启用基于会话的操作和独立 GET 流。
  • streamable_http_json_response - 默认 true;在 /mcp 上以纯 JSON 响应,而不是 SSE 框架响应。
  • chatgpt_disable_scope_checks - 跳过 ChatGPT 请求的范围验证。仅当您遇到连接 ChatGPT 的问题时才启用。
  • port - sse 模式下 HTTP 服务器的端口。
  • debug - 启用详细日志记录。
  • external_hostname - 构建 OAuth 令牌受众时使用的主机名。不要添加 HTTP(S) 前缀或端口。
  • ssl_keyfile - HTTPS 的 SSL 密钥路径。(例如 privkey.pem
  • ssl_certfile - HTTPS 的 SSL 证书路径。(例如 fullchain.pem
  • registration_psk - 注册 OAuth 客户端所需的预共享密钥。您需要在浏览器中输入此机密以批准 OAuth 连接。
  • jwt_key_path - 用于 OAuth 令牌的 RSA 密钥对的位置。默认为 .cache/jwt.json。如果不存在则自动生成。
  • oauth_db_path - OAuth 数据库文件的路径。默认为 .cache/oauth.db。如果不存在则自动生成。
  • enabled_tools - 要注册的工具名称列表。空列表启用所有工具。强烈建议根据用例或任务有选择地启用工具。参见 docs/ 文件夹中的一些示例。
  • search_objects - search 工具允许的对象类型。默认为 ["secret"],但可以包括 userfoldergrouprole
  • fetch_objects - fetch 工具允许的对象类型。默认为 ["secret"],但可以包括与 search_objects 相同的值。

运行服务器

在开发模式下本地启动服务器:

python server.py

启动时,服务器请求一个 bearer 令牌并将其存储以供后续 API 请求使用。本项目将进一步扩展以与 Secret Server API 集成。

MCP 工具

服务器为 Secret Server、Delinea Platform 身份目录以及(可选)StrongDM 提供 MCP 工具。每个工具都通过 tools/list 发布行为注解(只读/破坏性提示)。

ChatGPT / 深度研究兼容性

  • search(query) - 统一搜索,返回 {id, title, url} 条结果;对象类型受 search_objects 配置键限制(默认:仅机密)。
  • fetch(id) - 检索由 search 呈现的单个对象;受 fetch_objects 限制。

Secret Server

  • run_report(sql_query, report_name=None) - 创建并执行临时报告。
  • ai_generate_and_run_report(description) - 使用 Azure OpenAI 生成 SQL 并运行。需要 Azure OpenAI 变量。
  • list_example_reports() - 列出示例查询和表信息。
  • get_secret(id, summary=False) - 检索机密或摘要详细信息。
  • get_folder(id) - 获取文件夹元数据和子项。
  • search_secrets(query, lookup=False) - 搜索或查找机密。
  • search_folders(query, lookup=False) - 搜索或查找文件夹。
  • get_secret_environment_variable(secret_id, environment) - 输出用于在指定 shell 中获取机密凭据的脚本。
  • check_secret_template(template_id) - 获取机密模板详细信息。
  • check_secret_template_field(template_id, field_id) - 检查模板是否包含某个字段。
  • get_secret_template_field(field_id) - 按 ID 检索特定机密模板字段的详细信息。
  • handle_access_request(request_id, status, response_comment, start_date=None, expiration_date=None) - 批准或拒绝访问请求。
  • get_pending_access_requests() - 列出待处理的访问请求。
  • get_inbox_messages(read_status_filter=None, take=20, skip=0) - 检索收件箱消息。
  • mark_inbox_messages_read(message_ids, read=True) - 将消息标记为已读或未读。
  • create_secret_with_generated_password(name, secret_template_id, password_field_id, items, folder_id=None, site_id=None, comment=None) - 创建密码在服务器端生成的机密;仅返回经过清理的元数据,值永远不会到达模型。
  • update_secret_generated_password(secret_id, field_slug, password_field_id, comment=None) - 在服务器端轮换机密的密码,而不暴露该值。
  • update_secret_fields(secret_id, field_updates, comment=None, allow_password_fields=False) - 读取模板 → 修改非密码字段 → 验证流程;除非明确允许,否则拒绝密码标记的字段。
  • set_secret_field_environment_variable(secret_id, field_slug, environment, source="stdin", comment=None) - 生成一个 shell 脚本(bash/powershell/cmd),在本地读取值并将其推送到机密字段中,从而使该值完全绕过模型。
  • bulk_user_response(user_ids, scenario, comment, confirm=False) - 基于批量用户操作 API 的定制化事件组合器。场景:compromiseoffboardunlockreenableforce_logout;需要 confirm=True 加上非空的审计注释,并在未确认时预览。
  • role_management(action, role_id=None, data=None, params=None) - 管理角色。action 可以是 listgetcreateupdate。列出角色时使用 params 传递可选的查询参数。示例:role_management("update", role_id=3, data={"name": "New Role"})
  • user_role_management(action, user_id, role_ids=None) - 向用户分配或移除角色。actiongetaddremoverole_ids 是用于添加/移除操作的角色标识符列表。
  • group_management(action, group_id=None, data=None, params=None) - 处理组。action 可以是 getlistcreatedelete。为 get/delete 提供 group_id,创建组时提供 data
  • folder_management(action, folder_id=None, data=None, params=None) - 管理文件夹。action 可以是 getlistcreateupdatedelete。为 get、update 或 delete 提供 folder_id,创建或更新文件夹时提供 data
  • user_group_management(action, user_id, group_ids=None) - 管理用户的组成员资格。actiongetaddremove。添加或移除成员资格时提供 group_ids 列表。
  • group_role_management(action, group_id, role_ids=None) - 控制组上的角色。使用 listaddremove 操作。添加或移除时提供 role_ids
  • health_check() - 查询 Secret Server 健康检查端点并返回当前服务状态。

Delinea Platform 用户和角色

自 v1.0.0 起,规范用户工具面向 Delinea Platform 身份目录(需要 platform_hostname + PLATFORM_SERVICE_* 凭据;没有这些凭据时,工具会返回指导信息而不是失败):

  • user_management(action, user_id=None, data=None, username=None) - Platform 用户 CRUD。action 接受 getcreateupdatedeletesearch
  • search_users(query) - 搜索 Platform 用户目录。
  • platform_role_management(action, role_id=None, data=None, page_size=100, query="%") - Platform 角色 CRUD(listgetcreateupdatedelete);角色变更由发现驱动,对于 API 范围不暴露角色的租户,会返回指导信息。
  • platform_user_role_management(action, role_id, user_principals=None) - 在 Platform 角色上 listaddremove 用户。
  • platform_user_management(...) - user_management 的已弃用别名。

Secret Server 本地用户(旧版)

适用于未配置 Platform 的仅 SS 部署:

  • secretserver_local_user_management(action, user_id=None, data=None, skip=0, take=20, is_exporting=False) - v1.0.0 之前的 Secret Server 用户操作:getcreateupdatedeletelist_sessionsreset_2fareset_passwordlock_out。示例:secretserver_local_user_management("reset_password", user_id=42, data={"newPassword": "Pa$$w0rd"})
  • search_secretserver_local_users(query) - 搜索 Secret Server 的本地用户存储。

StrongDM 工具(可选,实验性)

实验性:StrongDM 后端尚未针对真实的 SDM 组织进行验证(仅针对 SDK 表面进行了单元测试)。可能存在粗糙之处,请报告问题。通过 strongdm 附加组件安装;完整指南参见 docs/strongdm.mdsdm_searchsdm_audit_accesssdm_grant_access(限时的即时或长期授权)、sdm_revoke_accesssdm_user_management(入职/离职流程)、sdm_role_managementsdm_resource_healthsdm_access_requestssdm_activity_reportsdm_network_status。破坏性操作需要确认并附带审计注释;名称匹配不明确时返回候选而不进行变更。

使用上述服务器配置变量进行身份验证。如果缺少 Azure OpenAI 变量,AI 工具将自动禁用。仅注册 config.json 中列出的工具名称。空列表启用所有工具。

使用场景

文档涵盖了将工具连接到服务器的几种工作流程:

Docker 快速入门

提供了一个 Dockerfile,用于在本地不安装 Python 依赖的情况下运行 MCP 服务器。

  1. 构建镜像:
docker build -t dev.local/delinea-mcp:latest .
  1. 运行服务器(通过环境变量传递您的凭据):
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

如上所示,用您的用户名和 URL 填充 config.json

容器将 oauth.dbjwt.json 存储在 /app/data 中。 挂载一个卷(如上所示的 mcp-data),以便这些文件和任何 HTTPS 证书在运行之间持久保存。

<https://your-secret-server/SecretServer> 替换为您的 Secret Server 实例的基础 URL,以避免连接错误。

服务器默认使用 python server.py 在端口 8000 上启动。 在 config.json 中设置 port 选项以覆盖默认值。 启用 debug: true 以记录所有传入的 HTTP 请求。

示例脚本

manual_secret_request.py 脚本演示了如何为特定密钥 ID 检索 OAuth 令牌:

python scripts/manual_secret_request.py <Secret_ID>

在运行脚本之前,为密钥设置环境变量 SECRET_USERNAME_<id>SECRET_PASSWORD_<id>。 可选地设置 DELINEA_BASE_URL 以覆盖默认的 https://localhost/SecretServer

运行测试

运行带覆盖率检测的单元测试(CI 强制要求最低 70%):

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

实时测试

某些集成测试需要有效的凭据。 在运行测试套件之前,设置以下环境变量和可选的 LIVE_SECRET_ID

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>

当这些变量存在时,实时测试将执行真实的 API 请求。

生产部署

依赖项固定在 requirements.txt 中,发布版本使用语义化版本控制进行标记。 从标记的提交构建 Docker 镜像并将其部署到您的生产环境,传递所需的环境变量(DELINEA_USERNAMEDELINEA_PASSWORD,可选 DELINEA_BASE_URL)。 可选功能依赖其他变量:

  • PLATFORM_SERVICE_PASSWORDPLATFORM_HOSTNAMEPLATFORM_SERVICE_ACCOUNTPLATFORM_TENANT_ID 一起启用用户管理工具。
  • AZURE_OPENAI_KEYAZURE_OPENAI_ENDPOINTAZURE_OPENAI_DEPLOYMENT 一起启用 AI 报告生成辅助功能。
  • SDM_API_ACCESS_KEYSDM_API_SECRET_KEY 启用实验性的 StrongDM 工具(需要 strongdm 附加组件;请参阅 docs/strongdm.md)。

当使用 OAuth 或 SSE 传输运行时,您可能需要提供 registration_psk 并配置 external_hostname 或 HTTPS 证书文件。

仓库结构

  • delinea_mcp/ - 包含 MCP 工具的包:tools.py(Secret Server)、user_platform_tools.py(Delinea Platform)、secretserver_users.py(SS 本地用户)、strongdm_tools.py(StrongDM,可选),以及 transports/(SSE + 可流式 HTTP)和 auth/(嵌入式 OAuth 授权服务器)。
  • server.py - 将所有内容注册到 MCP 服务器的轻量入口点。
  • docs/ - 项目文档和生成的 delinea-secret-server-openapi-spec.json
  • scripts/ - 辅助示例,包括 manual_secret_request.py

安全注意事项

嵌入式 OAuth 授权服务器是为开发、测试和小规模部署提供的便利;较大规模的部署应在其组织身份提供商前放置该服务器。当前的安全防护措施:

  • 客户端注册(/oauth/register)和授权表单都需要 registration_psk 共享密钥(使用恒定时间比较)。
  • redirect_uri 值会在授权表单和代码重定向上根据为客户端注册的 URI 进行验证。
  • 访问令牌是绑定受众的 RS256 JWT;资源发现遵循 RFC 9728(401/403 响应上的 /.well-known/oauth-protected-resourceWWW-Authenticate 标头)。
  • 始终使用 TLS 部署(ssl_keyfile/ssl_certfile 或终止代理)——每个请求都会传输承载令牌和密钥。
  • 使用 enabled_tools 按用例限定工具暴露范围;密钥_值_在设计上不进入模型上下文(服务器端密码生成、环境变量脚本间接引用、密码字段保护)。

发布说明

有关最新功能和路线图项目的摘要,请参阅 CHANGELOG.md

路线图

  1. 透传认证
  2. OAuth 客户端 ID 元数据文档(CIMD)客户端支持(自 MCP 协议修订版 2026-07-28 起,动态客户端注册已弃用;受 PSK 保护的 /oauth/register 流程仍适用于当前连接器)
  3. 扩展 Delinea Platform 上的工具覆盖范围,并添加其他 Delinea 产品

贡献

欢迎贡献! 如有任何改进,请提交 issue 或 pull request。 所有新代码都应包含单元测试并通过现有测试套件。

许可证

本项目采用 MIT 许可证 授权。