依赖跟踪MCP服务器

一个为OWASP Dependency Track提供的MCP服务器,支持AI助手与软件组成分析平台交互。

  • by secprog
  • Python
  • 本地部署
  • 5 星标
  • 更新于
在 GitHub 查看 secprog/dependency-track-mcp

使用说明

依赖跟踪MCP服务器

MCP(模型上下文协议)服务器 OWASP依赖性跟踪 -使AI助手能够与您的软件组合分析平台进行交互。

✨ API全面覆盖:100%的依赖性跟踪API v4.13.6端点实现了909个通过测试和100%的代码覆盖率。

特性

🎯 核心SCA功能

  • 项目管理 (28个工具):完整生命周期、层次结构、克隆、批处理操作、标签
  • 成分分析 (24种工具):依赖关系、CPE/PURL/SWID、内部识别、许可
  • 漏洞管理 (22个工具):CRUD操作、任务分配、受影响的项目查询
  • 查找分析 (12个工具):分类决策、分析状态、评论、压制
  • 信息系统安全度量 (16个工具):投资组合/项目指标、历史数据、趋势
  • 政策合规 (18个工具):政策管理、条件、违规行为、执行
  • SBOM运营 (8个工具):上传/导出CycloneDX/SPDX、验证、基于令牌的上传
  • 搜索 (6个工具):跨项目、组件、漏洞、服务的高级搜索

📚 参考数据和元数据

  • 许可证 (10个工具):支持SPDX的许可证和许可证组管理
  • 标签 (9个工具):项目/政策标签、收集项目
  • 警戒与报警设备 (2个工具):常见弱点枚举参考数据
  • 仓库 (8个工具):存储库类型管理、元数据解析
  • 服务 (8个工具):服务组件跟踪和管理
  • 使烦恼 (3个工具):漏洞利用交换文档

🔧 管理和配置

  • 团队 (8个工具):团队管理,API密钥生成
  • 用户 (11个工具):LDAP和托管用户、团队成员
  • 权限 (4个工具):细粒度权限管理
  • ACL (7个工具):项目团队访问控制映射
  • 通知 (17个工具):发布者、规则、警报、测试(Slack、电子邮件、webhooks等)
  • 轻量级目录访问协议 (3个工具):LDAP集成和团队同步
  • 开放ID连接 (6个工具):OpenID Connect组管理和映射
  • 属性 (11个工具):自定义项目/组件属性、系统配置

🛠️ 系统和集成

  • 版本 (1个工具):应用程序版本和构建信息
  • 徽章 (3个工具):SVG徽章生成漏洞
  • 计算器 (1个工具):CVSS v2/v3分数计算
  • 集成 (4个工具):第三方集成管理
  • 事件 (1个工具):系统事件监控

安装

pip install dependency-track-mcp

或者从源代码安装:

git clone https://github.com/secprog/dependency-track-mcp.git
cd dependency-track-mcp
pip install -e .

配置

安全警告⚠️ - 需要OAuth 2.1

此MCP服务器需要OAuth 2.1承载令牌身份验证 如所述 MCP授权规范.

所有请求都必须包含有效的OAuth 2.1承载令牌:

Authorization: Bearer <your_oauth2_token>

遵循以下安全最佳实践:

  • 配置OAuth 2.1发行者 -设置 MCP_OAUTH_ISSUER 您的OAuth提供商
  • 永远不要提交API密钥 -基于以下内容使用环境变量或环境文件 .env.示例 (已被忽略 微笑。)
  • 仅使用HTTPS -始终使用有效证书通过HTTPS连接到依赖跟踪
  • 最小范围 -仅请求您的用例所需的范围
  • 轮换凭据 -定期更改API密钥和令牌
  • 安全客户端配置 -限制MCP客户端配置文件的文件权限

📖 看 KEYCLOAK_SETUP.md 和 .env.示例 OAuth 2.1设置和配置示例。

环境变量

设置以下环境变量:

# OAuth 2.1 Authorization (REQUIRED)
export MCP_OAUTH_ISSUER=https://auth.example.com
export MCP_OAUTH_JWKS_URL=https://auth.example.com/.well-known/jwks.json  # Optional (auto-derived if omitted)
export MCP_OAUTH_AUDIENCE=dependency-track-mcp  # Optional
export MCP_OAUTH_REQUIRED_SCOPES="read:projects read:vulnerabilities"  # Optional
export MCP_OAUTH_RESOURCE_URI=https://your-mcp-host.example.com/mcp  # Optional

# Dependency Track Backend (for server-to-API auth only)
export DEPENDENCY_TRACK_URL=https://dependency-track.example.com
export DEPENDENCY_TRACK_API_KEY=your-dtrack-api-key

# Optional
export DEPENDENCY_TRACK_TIMEOUT=30
export DEPENDENCY_TRACK_VERIFY_SSL=true
export DEPENDENCY_TRACK_MAX_RETRIES=3

# Server Settings (HTTPS by default)
export MCP_SERVER_HOST=0.0.0.0
export MCP_SERVER_PORT=9000
export MCP_SERVER_TLS_CERT="-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----"
export MCP_SERVER_TLS_KEY="-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----"
export MCP_SERVER_TLS_CA_CERTS="-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----"  # Optional
export MCP_SERVER_TLS_KEYFILE_PASSWORD=your_password  # Optional

或者基于以下内容创建环境文件 .env.示例.

OAuth 2.1设置

  1. 配置您的OAuth提供程序 使用JWT令牌支持OpenID Connect
  2. 发布JWKS端点 用于令牌签名验证
  3. 设置令牌声明 包括 sub, iat, exp,以及 scope 或 scopes
  4. 使用HTTPS 适用于所有OAuth端点
  5. 设置适当的令牌生存期 (例如,1小时)

获取依赖关系跟踪API密钥

API密钥用于 仅服务器到API身份验证 并且不暴露于MCP客户端。

  1. 以管理员身份登录依赖跟踪
  2. 导航到管理>访问管理>团队
  3. 选择或创建团队
  4. 为团队生成新的API密钥
  5. 复制密钥(不会再次显示)
  6. 将其存储在 DEPENDENCY_TRACK_API_KEY 环境变量

用法

运行服务器

# Using the installed entry point
dependency-track-mcp

# Or run directly
python -m dependency_track_mcp.main

这将启动一个具有OAuth 2.1 JWT身份验证的FastAPI服务器,并在以下位置挂载MCP端点 /mcp。如果提供了TLS证书,则它提供HTTPS。仅当满足以下条件时才允许使用HTTP MCP_DEV_ALLOW_HTTP=true.

HTTP端点

  • /mcp -MCP协议端点(受OAuth 2.1承载令牌保护)
  • /.well-known/oauth-protected-resource -OAuth资源元数据(RFC 8707)
  • /health -健康检查

生产配置

所需的环境变量(或基于以下内容的环境文件 .env.示例):

# OAuth 2.1 (required)
MCP_OAUTH_ISSUER=https://keycloak.example.com/realms/mcp
MCP_OAUTH_AUDIENCE=mcp-api

# TLS certificates (required for HTTPS)
MCP_SERVER_TLS_CERT="-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----"
MCP_SERVER_TLS_KEY="-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----"

# Dependency Track backend
DEPENDENCY_TRACK_URL=https://dtrack.example.com
DEPENDENCY_TRACK_API_KEY=your-api-key

本地开发

对于使用HTTP的本地开发(永远不要在生产中使用):

# Enable HTTP for local testing
MCP_DEV_ALLOW_HTTP=true
MCP_OAUTH_ISSUER=http://localhost:8083/realms/mcp
DEPENDENCY_TRACK_URL=http://localhost:8081

看 KEYCLOAK_SETUP.md 用于设置本地Keycloak。

快速启动脚本

如果您更喜欢带有环境文件验证的简单启动器,请使用 start_services.py.

客户端配置(HTTP传输)

将MCP客户端指向HTTP端点并包含Bearer令牌:

  • MCP端点: https://<host>:<port>/mcp (使用 http:// 只有当 MCP_DEV_ALLOW_HTTP=true)
  • 授权标头: Authorization: Bearer <oauth2_token>

安全说明:

  • 依赖跟踪API密钥仅存储在服务器端(不向客户端公开)
  • OAuth令牌在运行时传输(不存储在配置中)
  • TLS证书可以作为PEM内容提供(使用 \n 对于新生儿)
  • 限制任何包含机密的客户端配置上的文件权限

MCP范围

服务器实现 细粒度OAuth 2.1作用域 为了实现精确的访问控制:

核心SCA运营

范围 描述
read:projects 列出和查看项目
write:projects 创建、更新和删除项目
read:components 列出和查看组件
write:components 创建/更新组件
read:vulnerabilities 查看漏洞和发现
write:vulnerabilities 创建、更新、删除漏洞
write:analysis 记录分析决策(分诊)
read:metrics 查看安全指标
read:policies 查看违反策略的行为
write:policies 创建/更新策略
upload:bom 上传SBOM文件
upload:vex 上传VEX文档
search 搜索功能

参考数据

范围 描述
read:licenses 列出和查看许可证
write:licenses 创建/更新许可证组
read:tags 列出和查看标签
write:tags 创建/更新标签
read:services 列出和查看服务
write:services 创建/更新服务
read:repositories 列出和查看存储库
write:repositories 创建/更新存储库
read:cwe 查看CWE参考数据

管理(细粒)

范围 描述
read:teams 列出并查看团队
write:teams 创建、更新、删除团队
manage:api-keys 生成、重新生成、删除API密钥
read:users 列出和查看用户
write:users 创建、更新、删除用户
manage:user-teams 在团队中添加/删除用户
read:permissions 列出权限
write:permissions 授予/撤销权限
read:acl 查看访问控制映射
write:acl 管理访问控制映射
read:notifications 列出通知发布者和规则
write:notification-publishers 创建/更新/删除通知发布者
write:notification-rules 创建/更新/删除通知规则
test:notifications 发送测试通知
read:ldap 列出LDAP组
write:ldap 管理LDAP团队映射
read:oidc 检查OIDC可用性,列出组
write:oidc 管理OIDC组和映射
read:config 列出/查看配置属性
write:config 更新配置属性

系统和集成

范围 描述
system:version 版本和系统信息
system:badges 项目徽章
system:calculator CVSS计算器
system:integrations 管理集成
system:events 查看系统事件

令牌范围声明:您的OAuth令牌应包含以下格式之一的作用域:

"scope": "read:projects read:vulnerabilities write:analysis"
"scopes": "read:projects read:vulnerabilities write:analysis"

可用工具

API全面覆盖:实现并测试了依赖性跟踪API 4.13.6版中的所有160多个端点。

工具组已在中注册 src/redependy_track_mcp/tools:

核心SCA工具

  • 项目 (28个工具):完整的项目生命周期、层次结构、克隆、批处理操作
  • 组件 (24个工具):组件管理、依赖关系、CPE、PURL、SWID
  • 漏洞 (22个工具):漏洞CRUD、任务、受影响的项目
  • 研究结果 (12个工具):查找分析、分类、评论、抑制
  • 指标 (16个工具):包含历史数据的投资组合和项目指标
  • 政策 (18个工具):政策管理、条件、违规行为、执行
  • 物料清单 (8个工具):上传/导出SBOM(CycloneDX/SPDX),基于令牌的上传
  • 搜索 (6个工具):跨项目、组件、漏洞的高级搜索

参考数据工具

  • 许可证 (10个工具):许可证和许可证组管理
  • 标签 (9个工具):标签管理、项目/政策关联
  • 警戒与报警设备 (2个工具):常见弱点枚举参考
  • 仓库 (8个工具):存储库类型管理和元数据
  • 服务 (8个工具):服务组件跟踪
  • 使烦恼 (3个工具):漏洞利用交换文档

属性工具

  • 项目属性 (4个工具):自定义项目元数据
  • 组件属性 (4个工具):自定义组件元数据
  • 配置属性 (3个工具):系统配置管理

管理工具

  • 团队 (8个工具):团队管理和API关键操作
  • 用户 (11个工具):用户管理、LDAP/管理用户、团队成员
  • 权限 (4个工具):权限管理和分配
  • ACL (7个工具):项目团队访问控制映射
  • 通知 (17个工具):发布者、规则、警报和测试
  • 轻量级目录访问协议 (3个工具):LDAP集成和团队映射
  • 开放ID连接 (6个工具):OpenID Connect组管理

系统和集成工具

  • 版本 (1个工具):应用程序版本和构建信息
  • 徽章 (3个工具):为项目生成SVG徽章
  • 计算器 (1个工具):CVSS分数计算
  • 集成 (4个工具):第三方集成管理
  • 事件 (1个工具):系统事件监控

质量与测试

测试覆盖率

  • 909测试 -100%通过
  • 100%代码覆盖率 -所有3313行代码都经过全面测试
  • API覆盖率100% -所有依赖关系跟踪API v4.13.6版端点
  • 单元测试 -客户端、配置、OAuth、模型、作用域、所有工具
  • 集成测试 -端到端工具验证
  • 基于模拟 -使用respx HTTP模拟快速执行

代码质量

  • 拉夫 -所有衣襟规则均通过(E、F、I、N、W、UP)
  • 类型提示 -全类型注释覆盖率
  • 派丹蒂克 -已验证所有API类型的模型
  • 异步优先 -所有I/O操作都使用async/await
  • 错误处理 -全面的异常层次结构

安全标准

  • OAuth 2.1 -使用JWKS进行完整的JWT验证
  • HTTPS/TLS -默认情况下启用证书验证
  • 范围验证 -细粒度权限检查
  • 输入验证 -所有输入的Pydantic模型
  • 日志中没有秘密 -正确屏蔽敏感数据

发展

设置

git clone https://github.com/secprog/dependency-track-mcp.git
cd dependency-track-mcp
pip install -e ".[dev]"

运行测试

# Run all tests (909 tests)
pytest

# Run with coverage report (100% coverage)
pytest --cov=src/dependency_track_mcp --cov-report=html

# Run specific test categories
pytest -m unit              # Unit tests only
pytest -m integration       # Integration tests only

# Run specific test file
pytest tests/test_client.py

# Run with verbose output
pytest -v

# Run tests matching a pattern
pytest -k "test_oauth"

代码格式化

ruff check .
ruff format .

安全

此MCP服务器根据需要实现OAuth 2.1承载令牌授权 MCP规范.

关键安全功能:

  • 🔐 OAuth 2.1承载令牌 -根据MCP规范要求
  • ✅ JWT验证 -结构、到期、发行人和范围验证
  • 🔒 HTTPS/TLS -默认情况下启用证书验证
  • 🔑 安全的API密钥管理 -仅通过环境变量提供后端密钥
  • 🛡️ 输入验证 -所有输入/输出的Pydantic模型
  • 🚫 无令牌传递 -OAuth令牌未发送到后端
  • 📊 基于范围的授权 -细粒度权限控制
  • ⚡ 重试/回退 -具有重试功能的弹性HTTP客户端

OAuth 2.1要求:

  • 所有请求都必须在Authorization标头中包含有效的Bearer令牌
  • 令牌必须是具有所需声明的有效JWT(sub, iat, exp, scope/scopes)
  • 服务器验证令牌过期、颁发者和所需范围
  • MCP客户端负责从OAuth提供程序获取令牌
  • 令牌签名验证使用JWKS(自动从发卡机构导出)执行

要在本地验证您的配置,请运行 verify_security.py.

许可证

MIT许可证-请参阅 许可证 了解详情。

相关项目