@cyanheads/nist-nvd-mcp-服务器
通过关键词、严重程度、CWE、CISA KEV状态和通过NIST国家脆弱性数据库进行CPE的搜索和审计。 (原始内容存档于2012-10-12). STIO or Streamable HTTP.
概览
CVE和CPE数据来自NIST国家脆弱性数据库. 通过关键词,严重性,CWE,或CISA KEV状态进行搜索和审计的弱点,将产品解析为CPE名称,并跟踪一个CVE的修订历史.
工具
| 工具 | 说明 |
|---|---|
nvd_search_cves | 通过关键词,严重性,CWE,日期范围,或CISA KEV状态来搜索 CVEs. |
nvd_get_cve | 通过 ID 获取一个或多个 CVES —— 完整的 CVSS 分数, CWE, CPE 配置, KEV 字段, 以及引用 . |
nvd_search_cpes | 通过产品关键词或部分匹配字符串来搜索NVD CPE词典. |
nvd_audit_cpe | 通过CPE名称或虚拟匹配字符串查找所有影响特定产品版本的 CVES. |
nvd_get_cve_history | 检索一个CVE的变迁历史——分数修订,状态过渡和参考添加. |
资源
| 资源 | 说明 |
|---|---|
nvd://cve/{cveId} | 以 ID 进行完整 CVE 记录——与 nvd_get_cve 对于一个单一的ID,作为注射语境的稳定URI. |
skill://nist-nvd-guide/SKILL.md | 产品适用性、识别链、严重程度解释和覆盖指导. |
CVE 资源数据也可通过 nvd_get_cve。所出版的指南也可用于插件安装 skills/nist-nvd-guide/SKILL.md。 。 。 .
能力参考
默认的超大小读取限制夹: 2000 用于 CVE 搜索,审计,和历史; 10000 用于 CPE 搜索; 100 ID 用于批量搜索. 中断通话报告 requestedLimit, (中文(简体) ), effectiveLimit,并在两个输出表面发出通知。 批量查找验证每个提供的ID和清单,除已处理的前缀外,还要正常、复制 unprocessedIds· ; missingIds 封面只询问身份证。 设定 NVD_CLAMP_LIMITS=false 在启动前恢复所公布的最大比例并拒绝过大的请求。 0,负,分数限制仍然无效.
nvd_search_cves 工具
- 全文关键词搜索(AND语义跨字),或
exactPhrase: true用于精确的句式匹配 —— 需要keyword - 过滤器: CVSS 重度波段(低/中/高/高/低等)
severityVersion: "v3"或者说"v4"),CWEID,CISA KEV状态,noRejected(默认真实) - 日期过滤器 :
pubDays编号 :lastModDays方便短手(自动密闭到120天,在浓缩中报告的夹克)或明确的ISO 8601射程(最长为120天,两端都需要);每轴两种形式相互排斥 - 接通
limit(截至2000年,缺省20个)和offset - 总是返回简短摘要, 并带有简略描述; 调用
nvd_get_cve详细情况
nvd_get_cve 工具
- 每拨100 CVE 身份证
- 全模式 (默认): CVSS 得分跨越 v2.0/v3.0/v3.1.v4.0, CWE 弱点, CPE 配置, CISA KEV 字段, 引用
brief: true返回已修剪的行(ID、状态、最重度、KEV名称、简略描述)——建议批次超过10个includeReferences财务报告和审定财务报表includeConfigurations默认为真; 设置出错以省略两个输出表面的字段.allLanguages: true保留所有本地化描述, 而不是只使用英语missingIds浓缩字段列出任何请求的ID NVD没有返回- 输出表面都包含每个选定的参考和CPE配置;在NVD提供时会出现可选的SSVC评估
nvd_search_cpes 工具
- 关键词搜索( 如.
"apache http server")或部分CPEv2.3图案通过cpeMatchString- 至少需要一个 - 返回完整的CPE名称、人可读标题、贬值状态和替换CPE
- 接通
limit(最多10 000人,缺省20人)和offset——供应商级关键词可以匹配上万个条目,因此页面而不是进一步缩小 - 使用时间
nvd_audit_cpe解决产品需要的确切CPE名称
nvd_audit_cpe 工具
- 两种模式:精确
cpeName(NVD自动应用)isVulnerable)或(或)virtualMatchString可选versionStart编号 :versionEnd界限(包括/排他性) - 客户端
severityMin在所有 CVSS 度量标准中以最高的重度波段过滤取取的页面;标题仍然遵循最高的分数。 它只能去除什么limit检索 - 返回完整的 CVE 记录( CVSS 分数、 CWE、 CPE 配置、 KEV 字段、 引用)
includeReferences财务报告和审定财务报表includeConfigurations默认为真; 假将字段从两个输出表面省去。 SSVC评估仍然是可选的- 接通
limit(截至2000年,缺省20个)和offset- 页数限制不大,而不是提高,因为每项结果都是完整的记录 auditTarget浓缩场与使用的CPE标识符相呼应,因此调用者可以验证正确的产品被询问
nvd_get_cve_history 工具
- 返回更改事件: CVSS 修订,状态过渡,引用添加,CPE配置更新
order选择锚端——newest(默认)读最近第一,oldest读取 NVD 的本地顺序- 通过
limit(截至2000年,缺省20个)和offset,从结尾计算order锁定到 - 没有 API 密钥, 历史终点明显会慢得多 —— set
NVD_API_KEY提高NVD_REQUEST_TIMEOUT_MS
nvd://cve/{cveId} 资源
- 完整 CVE 记录为
application/json数据与nvd_get_cve包含参考文献和仅使用英文的描述 cveId必须匹配CVE-YYYY-NNNNN; 形状良好但未知的ID抛出cve_not_found
特征
建造在 @cyanheads/mcp-ts-core: stdio和可流式的 HTTP 传输器,可插接式(none 编号 : jwt 编号 : oauth),可互换存储(in-memory, (中文(简体) ), filesystem, (中文(简体) ), Supabase, (中文(简体) ), Cloudflare KV/R2/D1),结构化记录,可选择的OpenTeleometry tracking.
NVD 特性 :
- 请求节奏器执行 NVD 的 5 req/ 30s( 无键) 和 50 req/ 30s( 有键) 限制, 自动排队, 至少从窗口和限制中产生请求间间隔
- 重试将起搏器包起来,而不是坐在里面——每一次尝试都会在排队时自己转弯,所以重试与速率预算相对比,而不是冲过去
- 403号
Retry-After在 NVD 窗口重排之前, 保留整个队列; 无密钥, 403 失败速度和名称NVD_API_KEY而不是将5个要求的预算花在30秒窗口内无法超过的重试上 - 决定性的拒绝会很快失败, 而不是消耗重试 —— NVD 回答一个糟糕的参数和一个被拒绝的 API 密钥, 仅用 HTTP 404 分隔
message标题,所以一个被拒绝的密钥表面作为配置断层命名NVD_API_KEY而不是作为一个不正确的 CVE ID - NVD 块页面返回一个不可重试的被封请求错误; 配置错误的 JSON 和响应信封返回一个无效的响应错误, 并带有回收指导
- 通过响应机构读取请求超时和取消呼叫程序仍然有效
方便代理输出 :
- 一个
enrichment,每个响应,在两个structuredContent和已公布的文本——总结果、返回数、页偏移、实际应用的过滤器、以及任何日期解密事件,因此代理商可以对所询问的真实内容提出理由 missingIds在批量 CVE 中查找——每ID的等同检查而不是默不作声的部分结果- CPE在审计答复中回响——
cpeName或者说virtualMatchString反射回射,以便呼叫者能够验证正确的产品 - 点出原因的空结果通知 — 一个无与伦比的查询, 一个清空页面的重度阈值, 一个经过结果集结尾的抵消, 一个干净的审计("没有已知的弱点") 被分解, 而不是全部读取为错误或"没有发现"
开始
公共托管实例
可在 https://nist-nvd.caseyjhand.com/mcp 无需安装。 通过可流式HTTP将 MCP 客户端指向它 :
{
"mcpServers": {
"nist-nvd-mcp-server": {
"type": "streamable-http",
"url": "https://nist-nvd.caseyjhand.com/mcp"
}
}
}
自有/当地
在您的 MCP 客户端配置文件中添加以下内容 .
{
"mcpServers": {
"nist-nvd-mcp-server": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/nist-nvd-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info",
"NVD_API_KEY": "your-api-key"
}
}
}
}
或者用 npx( 不需要 Bun) :
{
"mcpServers": {
"nist-nvd-mcp-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@cyanheads/nist-nvd-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info",
"NVD_API_KEY": "your-api-key"
}
}
}
}
或与道克相会:
{
"mcpServers": {
"nist-nvd-mcp-server": {
"type": "stdio",
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "MCP_TRANSPORT_TYPE=stdio",
"-e", "NVD_API_KEY=your-api-key",
"ghcr.io/cyanheads/nist-nvd-mcp-server:latest"
]
}
}
}
对于可流式HTTP,设置传输并启动服务器:
MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 NVD_API_KEY=... bun run start:http
# Server listens at http://localhost:3010/mcp
先决条件
- Bun v1.4.0 (英语) 或更高(或Node.js v24+).
- 可选 : NVD API 密钥 ——免费,将费率限额从5 req/30提高到50 req/30.
安装
- 清除仓库 :
git clone https://github.com/cyanheads/nist-nvd-mcp-server.git
- 导航到目录 :
cd nist-nvd-mcp-server
- 安装依赖性 :
bun install
- 配置环境 :
cp .env.example .env
# edit .env and set NVD_API_KEY if you have one
配置
| 变量 | 说明 | 默认 |
|---|---|---|
NVD_API_KEY | NVD API 密钥 。 没有它,利率限制为5雷克/30;加上它,50雷克/30。 一个免费的 nvd.nist.gov/ 开发者/请求- api- key。 。 。 . | —— 说 |
NVD_REQUEST_TIMEOUT_MS | 请求超时数以毫秒计 没有 API 密钥, 历史终点很慢 — 如果使用的话, 将提高到 60000 nvd_get_cve_history 没有钥匙. | 10000 |
NVD_CLAMP_LIMITS | 克兰普超大小读取到2000 CVES/events, 10000 CPE,或 100 CVE IDs. false 恢复计划最大和拒绝. | true |
MCP_TRANSPORT_TYPE | 运输: stdio 或者说 http。 。 。 . | stdio |
MCP_HTTP_PORT | HTTP 服务器端口 . | 3010 |
MCP_AUTH_MODE | Auth 模式 : none, (中文(简体) ), jwt,或 oauth。 。 。 . | none |
MCP_LOG_LEVEL | 日志级别(RFC 5424). | info |
LOGS_DIR | 日志文件目录(只有Node.js). | <project-root>/logs |
OTEL_ENABLED | 启用 OpenTelemet 仪器。 。 。 . | false |
见 .env.example 用于完整可选覆盖列表.
节点和邦加载 .env 从工作目录中解析服务器配置。 导出变量优先 。 无效 NVD_CLAMP_LIMITS 数值失败配置验证; 使用 true 或者说 false。 。 。 .
运行服务器
地方发展
-
构建和运行 :
# One-time build bun run rebuild # Run the built server bun run start:stdio # or bun run start:http -
运行检查和测试 :
bun run devcheck # Lint, format, typecheck, security bun run test # Vitest test suite bun run lint:mcp # Validate MCP definitions against spec
夹克
docker build -t nist-nvd-mcp-server .
docker run --rm -e NVD_API_KEY=your-key -p 3010:3010 nist-nvd-mcp-server
Dockerfile 默认为 HTTP 传输、 无国籍会话模式和日志到 /var/log/nist-nvd-mcp-server。默认情况下安装了 OpenTeleometry 端端依赖性 --build-arg OTEL_ENABLED=false 以略去它们.
项目结构
| 目录 | 目的 |
|---|---|
src/index.ts | createApp() 进入点——登记工具/资源及其服务. |
src/config | 服务器特定环境变量与Zod解析并验证. |
src/mcp-server/tools | 工具定义*.tool.ts) (中文(简体) ). |
src/mcp-server/resources | 资源定义*.resource.ts) (中文(简体) ). |
src/services/nvd-http | NVD HTTP 客户端带有速率限制间隔并重试. |
src/services/nvd-cve | CVE服务——搜索,逐一获取ID,CPE审计,改变历史,正常化. |
src/services/nvd-cpe | CPE服务——字典搜索与正常化. |
src/services/nvd-source | Source service——解决NVD贡献者对其已公布名称的标识. |
tests/ | 单位和综合测试镜像 src/。 。 。 . |
发展指南
见 CLAUDE.md 发展准则和建筑规则。 简本:
- 搬运工投掷,框架渔获量——否
try/catch在工具逻辑中 - 使用
ctx.log请求范围伐木,ctx.state租户范围储存 - 通过桶登记新的工具和资源
src/mcp-server/*/definitions/index.ts - 环绕外部 API 调用: 验证 生 → 规范到域类型 → 返回输出计划; 永远不要编织缺失的字段
捐款
问题值得欢迎。 提交前进行检查和测试:
bun run devcheck
bun run test
许可证
阿帕奇-2.0 — 见 自由主义 详细情况.