关于 Delinea Mcp
面向使用 Delinea Secret Server 与 Platform API 的团队的 MCP 服务,提供密钥、用户、群组和角色管理工具。支持多种传输方式,并可在服务端处理密钥,避免密钥值传给模型。
主要功能
- 01管理密钥、文件夹与访问请求
- 02管理用户、群组和角色
- 03支持 ChatGPT 搜索与获取工具
- 04提供 stdio、SSE 和可流式 HTTP 传输
- 05服务端生成或轮换密码
适用场景
- 01搜索并读取 Secret Server 密钥
- 02处理访问请求和收件箱消息
- 03管理目录用户与角色
- 04在不向模型暴露密钥值的情况下轮换密码
MCP 相关
该 MCP 服务将 Secret Server 工具及可选的 Delinea Platform、StrongDM 工具开放给 MCP 客户端。支持 stdio、SSE 和可流式 HTTP,并提供 OAuth 2.0。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
DelineaMCP
适用于 Delinea Secret Server 和 Platform API 的 MCP 服务
新闻
- 2026 年 8 月 11 日 — MCP Protocol v2(规范修订版 2026-07-28,支持可流式 HTTP) 和实验性的 StrongDM API 支持现已推出 — 请参阅 发布说明。
- 2026 年 8 月 11 日 — 我们是“LLM 无法查看机密”保管库用例的原创提供方 — 谨防仿冒者 ;)
功能
- 自动向 Secret Server 进行身份验证
- 丰富的 Secret Server 工具集,可管理文件夹、机密、用户、组和角色。 包含收件箱和访问请求辅助工具,以及编码 Agent 实用工具。
- ChatGPT 兼容工具(
search和fetch),用于受控的 AI 交互。 - 可选的 Delinea Platform 用户管理工具
- 可选的实验性 StrongDM(SDM)工具 — 访问授权、权限审计、用户/角色生命周期管理、运行状况和活动报告(请参阅
docs/strongdm.md;使用
pip install "delinea-mcp[strongdm]"安装) - 可流式 HTTP(
/mcp)、旧版服务器发送事件(/mcp/sse)和 STDIO 传输方式 - 根据 MCP 规范实现的 OAuth 2.0 动态客户端注册
- 支持 TLS 安全连接
- 可直接运行的 Docker 镜像和开发服务器入口点
- 已通过 ChatGPT、Claude Desktop、远程 Claude connector、VSCode Copilot 和 openwebui 测试
安装
说明
本项目使用
uv(https://github.com/astral-sh/uv),不过如果你更喜欢不使用它,也可以按需照常使用pip和venv命令。
- 安装 Uv
- 初始化项目:
uv pip sync requirements.txt - 使用
uv run server.py --config config.json
配置
密码等机密信息仍通过环境变量提供。
在 shell 环境中设置 DELINEA_PASSWORD。
可选功能依赖其他变量,例如 AZURE_OPENAI_KEY 或 PLATFORM_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_keyfile 和 ssl_certfile 以启用 HTTPS。
对于 Let's Encrypt,请使用 privkey.pem 和 fullchain.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 端点。仅在需要自动生成报告时设置(大多数 Agent 都能自行生成报告 SQL,因此除非有需要,否则不要启用)。
- azure_openai_deployment - Azure OpenAI 部署名称。
- auth_mode - 身份验证模式(
none或oauth)。显然,OAuth 无法与 stdio 传输方式配合使用。 - transport_mode - 命令行使用
stdio,HTTP 使用sse。在sse模式下,服务会同时公开/mcp上的可流式 HTTP 端点(当前 MCP 传输方式,支持 2024-11-05 至 2026-07-28 的协议修订版本)以及旧版 HTTP+SSE 端点/mcp/sse+/messages/。 - streamable_http_stateless - 默认值为
true;运行/mcp时不使用服务端会话(推荐用于远程连接器)。设置为false可启用 基于会话的运行方式,并使用独立的 GET 流。 - streamable_http_json_response - 默认值为
true;在/mcp上使用纯 JSON 响应,而不是 SSE 封装的响应。 - chatgpt_disable_scope_checks - 跳过对 ChatGPT 请求的 scope 验证。仅在连接 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"],也可以包含user、folder、group和role。 - fetch_objects -
fetch工具允许的对象类型。 默认为["secret"],也可以包含与search_objects相同的值。
运行服务
在本地以开发模式启动服务:
python server.py
启动时,服务会请求一个 bearer 令牌,并将其保存以供后续 API 请求使用。 本项目将持续扩展,以集成更多 Secret Server API 功能。
MCP 工具
该服务提供适用于 Secret Server、Delinea Platform 身份目录以及(可选)StrongDM 的 MCP 工具。每个工具都会通过 tools/list 发布行为注释(只读/破坏性提示)。
ChatGPT / deep-research 兼容性
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 的 事件处理组合工具。场景包括:compromise、offboard、unlock、reenable、force_logout;要求confirm=True且审计注释非空,未确认时会显示预览。role_management(action, role_id=None, data=None, params=None)- 管理角色。action可以是list、get、create或update。 列出角色时,可使用params传递可选查询参数。 示例:role_management("update", role_id=3, data={"name": "New Role"})。user_role_management(action, user_id, role_ids=None)- 为用户分配或移除角色。action为get、add或remove,role_ids是用于添加或移除操作的角色标识符列表。group_management(action, group_id=None, data=None, params=None)- 管理用户组。action可以是get、list、create或delete。 执行 get/delete 时提供group_id,创建用户组时提供data。folder_management(action, folder_id=None, data=None, params=None)- 管理文件夹。action可以是get、list、create、update或delete。 执行 get、update 或 delete 时提供folder_id,创建或更新文件夹时提供data。user_group_management(action, user_id, group_ids=None)- 管理用户的用户组成员资格。action为get、add或remove。 添加或移除成员资格时,提供group_ids列表。group_role_management(action, group_id, role_ids=None)- 管理用户组的角色。 使用list、add或remove操作。 添加或移除角色时,提供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接受get、create、update、delete或search。search_users(query)- 搜索 Platform 用户目录。platform_role_management(action, role_id=None, data=None, page_size=100, query="%")- Platform 角色 CRUD(list、get、create、update、delete);角色 变更操作基于发现机制,在 API 范围未开放相关操作的租户上会返回操作指引。platform_user_role_management(action, role_id, user_principals=None)- 在 Platform 角色上对用户执行list、add或remove操作。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 用户操作:get、create、update、delete、list_sessions、reset_2fa、reset_password、lock_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.md。sdm_search、sdm_audit_access、sdm_grant_access
(限时即时授权或长期授权)、sdm_revoke_access、
sdm_user_management(入职/离职流程)、sdm_role_management、
sdm_resource_health、sdm_access_requests、sdm_activity_report、
sdm_network_status。破坏性操作需要通过确认门控,并附带审计备注;名称匹配不明确时会返回候选项,而不会进行变更。
使用上文介绍的服务配置变量进行身份验证。
如果缺少 Azure OpenAI 变量,AI 工具会自动禁用。
只有 config.json 中列出的工具名称才会注册。
空列表表示启用所有工具。
使用场景
文档介绍了将工具连接到服务的多种工作流:
Docker 快速入门
提供了 Dockerfile,用于运行 MCP 服务,而无需在本地安装 Python 依赖项。
- 构建镜像:
docker build -t dev.local/delinea-mcp:latest .
- 运行服务(通过环境变量传递凭据):
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
如上所示,在 config.json 中填入用户名和 URL。
容器会将 oauth.db 和 jwt.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 脚本展示了如何获取特定 secret ID 的 OAuth 令牌:
python scripts/manual_secret_request.py <Secret_ID>
运行脚本前,请为该 secret 设置环境变量 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_USERNAME、DELINEA_PASSWORD,以及可选的 DELINEA_BASE_URL)。
可选功能依赖其他变量:
- 配置
PLATFORM_SERVICE_PASSWORD,以及PLATFORM_HOSTNAME、PLATFORM_SERVICE_ACCOUNT和PLATFORM_TENANT_ID,即可启用用户管理工具。 - 配置
AZURE_OPENAI_KEY,以及AZURE_OPENAI_ENDPOINT和AZURE_OPENAI_DEPLOYMENT,即可启用 AI 报告生成助手。 - 配置
SDM_API_ACCESS_KEY和SDM_API_SECRET_KEY,即可启用实验性的 StrongDM 工具(需要strongdmextra;参见 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(
/.well-known/oauth-protected-resource,以及 401/403 响应中的WWW-Authenticate标头)。 - 始终通过 TLS 部署(使用
ssl_keyfile/ssl_certfile或终止 TLS 的代理)——每个请求都会传输持有者令牌和机密信息。 - 使用
enabled_tools按使用场景限制工具的开放范围;按照设计,机密 值 不会进入模型上下文(服务端密码生成、通过环境变量间接调用脚本、密码字段防护)。
发布说明
请参阅 CHANGELOG.md,了解最新功能和路线图事项的摘要。
路线图
- 透传式身份验证
- 支持 OAuth 客户端 ID 元数据文档(CIMD)客户端(自 MCP 协议修订版 2026-07-28 起,动态客户端注册已弃用;受 PSK 保护的
/oauth/register流程仍适用于当前连接器) - 扩展 Delinea Platform 的工具覆盖范围,并添加其他 Delinea 产品
贡献
欢迎贡献! 如有任何改进,请提交问题或拉取请求。 所有新代码都应包含单元测试,并通过现有测试套件。
许可证
本项目采用 MIT 许可证 授权。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。