Red Hat VEX MCP 服务器
一个用于查询Red Hat VEX(漏洞可利用性交换)文档和安全公告的MCP(模型上下文协议)服务器。
概述
此MCP服务器提供了工具,用于查询Red Hat的CSAF/VEX文档,以回答有关CVE(通用漏洞披露)和RHSAs(Red Hat安全公告)的安全相关问题。它支持需求中概述的特定用例:
支持的问题:
- ✅ package123是否受到CVE-123的影响?
- ✅ package456 是否已通过 RHSA-456 修复?
- ✅ 哪些软件包受到了CVE-123/RHSA-456的影响?
设计上不支持:
- ❌ package123 受哪些 CVE 影响?
- ❌ 哪个RHSA(Red Hat Security Advisory,红帽安全公告)修复了包456的漏洞?
特点/功能
- CVE 查询为特定的CVE ID检索详细的VEX文档
- RHSA 查询检索特定RHSA ID的CSAF咨询文档
- 包裹状态查询检查软件包是否受特定CVE的影响
- 包裹修复状态检查软件包是否已通过特定的RHSAs(Red Hat Security Advisories,红帽安全公告)修复
- 受影响的软件包列表列出所有受CVE或RHSA影响的软件包
- 产品标识符解析将VEX/RHSA产品标识符解析为底层的CPE和PURL标识符
- 软件包漏洞状态获取所有类别中特定软件包的全面漏洞状态
- 分页处理大型结果集时,使用可配置的分页功能(默认:50项,最大:500项)
- 自动引用所有回复均包含VEX/RHSA来源引用及URL链接
- 缓存内置缓存以提高性能并减少API调用
数据来源
- VEX 文档https://access.redhat.com/security/data/csaf/v2/vex/ 翻译为中文是:红帽访问网站的安全数据/CSAF(Cybersecurity and Infrastructure Security Agency,网络安全和基础设施安全局)/版本2/VEX(Vulnerability and Exposure Markup Language,漏洞和暴露标记语言)页面
- CSAF(中央安全管理局或类似机构,具体根据上下文确定)公告/通告https://security.access.redhat.com/data/csaf/v2/advisories/(红帽安全公告CSAF v2数据)
安装
# Clone the repository
git clone https://github.com/crozzy/vex-mcp.git
cd vex-mcp
# Build the server
go build -o vex-mcp-server .依赖项
- Claircore CSAF 类型(
github.com/quay/claircore/toolkit/types/csaf) - MCP-Golang(
github.com/metoro-io/mcp-golang)
使用方法
运行服务器
./vex-mcp-server服务器通过stdio使用MCP协议进行通信。
配置
- 日志级别可以通过环境变量进行配置:
VEX_MCP_LOG=debug ./vex-mcp-server支持的值: debug, info (默认), warn, error。
可用工具
1. lookup_cve
查找特定CVE ID的详细Red Hat VEX文档信息。
参数:
cve(必填):要查询的CVE ID(例如,“CVE-2024-1234”)
示例:
{
"cve": "CVE-2024-1234"
}2. lookup_rhsa
查找具有特定RHSA ID的Red Hat CSAF详细公告信息。
参数:
rhsa(必填):要查询的RHSA ID(例如,“RHSA-2024:1234”)
示例:
{
"rhsa": "RHSA-2024:1234"
}3. is_package_affected_by_cve
检查特定软件包是否受到某个CVE(通用漏洞和披露)的影响。
参数:
cve(必填):要检查的CVE IDpackage(必填):要检查是否受影响的包名limit(可选):要返回的最大匹配产品数量(默认:50,最大:500)offset(可选):要跳过的匹配产品数量(默认:0)
匹配行为:对PURL名称段进行精确匹配(区分大小写),例如。, postgresql, postgresql-server, qt6-qtbase。
示例:
{
"cve": "CVE-2024-1234",
"package": "kernel",
"limit": 20,
"offset": 0
}4. is_package_fixed_by_rhsa
检查特定的软件包是否已通过RHSA(Red Hat Security Advisory,红帽安全公告)修复。
参数:
rhsa(必填):要检查的RHSA IDpackage(必需):要检查是否已修复的包名limit(可选):要返回的最大匹配产品数量(默认:50,最大:500)offset(可选):要跳过的匹配产品数量(默认:0)
匹配行为:对PURL名称段进行精确匹配(区分大小写),例如。, postgresql, postgresql-server, qt6-qtbase。
示例:
{
"rhsa": "RHSA-2024:1234",
"package": "kernel",
"limit": 20,
"offset": 0
}5. list_affected_packages
列出所有受CVE或RHSA影响的软件包。
参数:
id(必需):用于列出受影响包的CVE或RHSA IDlimit(可选):每个状态类别返回的最大包裹数量(默认:50,最大:500)offset(可选):每个状态类别中要跳过的包数(默认:0)
示例:
{
"id": "CVE-2024-1234",
"limit": 25,
"offset": 0
}6. resolve_product_identifiers
将VEX/RHSA产品标识符解析为其底层的CPE和PURL标识符。
参数:
id(必填):用于确定产品的CVE或RHSA IDproduct_ids(可选):需解析的具体产品ID列表(如果为空,则解析所有未受影响的产品)
示例:
{
"id": "CVE-2024-7348",
"product_ids": ["red_hat_enterprise_linux_10:postgresql", "red_hat_enterprise_linux_10:postgresql-server"]
}示例 - 解决所有未受影响的产品问题:
{
"id": "CVE-2024-7348"
}7. get_package_vulnerability_status
获取特定包在所有类别(如存在漏洞、已修复、不受影响等)中的全面漏洞状态。
参数:
id(必填):CVE 或 RHSA 编号package(必填):用于过滤的包名limit(可选):每个状态类别下的最大包裹数(默认:50,最大:500)offset(可选):每个类别中要跳过的包数(默认:0)
匹配行为:对持久统一资源定位符(PURL)名称段进行精确匹配(区分大小写),例如。, postgresql, postgresql-server, qt6-qtbase。
示例:
检查PostgreSQL针对某个CVE(通用漏洞披露)的状态:
{
"id": "CVE-2024-7348",
"package": "postgresql"
}检查分页情况:
{
"id": "CVE-2024-7348",
"package": "postgresql",
"limit": 25,
"offset": 0
}发展
运行测试
go test ./vex -v