supply-chain-mcp-server
v0.2.1
Published
Software supply chain security MCP server — vulnerability scanning, package analysis, provenance verification, typosquatting detection, dependency intelligence across npm, PyPI, crates.io, Go, and more
Downloads
149
Maintainers
Readme
问题所在
供应链安全情报是现代软件开发中缺失的一环。漏洞数据库、包注册表、来源验证、漏洞利用预测评分、许可证合规、安全评分卡、仿冒检测 — 你需要的数据分散在数十个平台中,每个平台都有自己的 API、认证、速率限制和输出格式。如今你需要在一个标签页中查看 OSV,在另一个标签页中查看 NVD,调出 npm 安全公告,在 FIRST.org 上查看 EPSS 分数,在另一个标签页中验证 Sigstore 来源,查找 OpenSSF Scorecard,交叉引用 CISA KEV,然后花一个小时手动将这些信息拼凑在一起。
传统供应链安全工作流:
检查漏洞 -> OSV + NVD + GitHub Advisories(3 个独立界面)
评估被利用的可能性 -> EPSS 评分(独立 API)
检查主动利用 -> CISA KEV 目录(独立 JSON 源)
验证包来源 -> Sigstore/Rekor + npm 证明(多个 CLI)
检查安全实践 -> OpenSSF Scorecard + Best Practices Badge(2 个界面)
审计依赖关系 -> deps.dev + Libraries.io(又 2 个界面)
检查注册表元数据 -> npm + PyPI + crates.io + Go(4 个注册表)
检查仿冒 -> 手动名称比较(容易出错)
验证许可证合规 -> ClearlyDefined(又一个界面)
检查发行版打包 -> Repology(又一个界面)
────────────────────────────────
合计:每次包审计 45 分钟以上,大部分时间在切换上下文supply-chain-mcp-server 通过 Model Context Protocol 为你的 AI 代理提供 7 个复合工具(内部编排 90 种技术),跨 21 个数据源。代理调用一个工具如 vuln_scan 或 package_info,它会自动并行地分发到正确的技术,关联漏洞数据与漏洞利用预测,验证来源,检查安全态势,并呈现统一的供应链风险评估 — 在一次对话中完成。
使用 supply-chain-mcp-server:
你:"审计 express npm 包的安全态势"
代理:-> vuln_scan(mode:"package", ecosystem:"npm", name:"express")
内部运行:osv_query + ghsa_package + epss_batch + kev_lookup
-> package_info(ecosystem:"npm", name:"express", version:"4.21.2")
内部运行:npm_package + npm_downloads + npm_maintainers + npm_scripts + npm_provenance
-> quality(mode:"scorecard", owner:"expressjs", repo:"express")
内部运行:scorecard_repo
-> "express 拥有强健的安全态势。2 个已知漏洞但
都未被主动利用(不在 KEV 中)。一个 CVE 的 EPSS 较高
需优先修补。通过 Sigstore 验证了来源。
OpenSSF Scorecard 8.2/10。"有何不同
现有工具一次只给你一个来源的原始数据。supply-chain-mcp-server 让你的 AI 代理能够同时跨漏洞、来源和包情报进行推理。
快速开始
方式一:npx(无需安装)
npx supply-chain-mcp-server7 个复合工具(90 种技术)立即可用。大多数数据源无需 API 密钥 — 21 个源中 18 个完全免费。
方式二:克隆
git clone https://github.com/badchars/supply-chain-mcp-server.git
cd supply-chain-mcp-server
bun install环境变量(可选)
export GITHUB_TOKEN=your-token # GHSA + Scorecard 更高速率限制
export LIBRARIES_API_KEY=your-key # Libraries.io 工具必需
export NVD_API_KEY=your-key # 50 请求/30秒(无密钥 5 请求/30秒)所有 API 密钥均为可选。无密钥时仍可使用 7 个复合工具中的 6 个 — 仅 Libraries.io(在 dep_tree 中)需要 API 密钥。
连接到 AI 代理
# 使用 npx
claude mcp add supply-chain-mcp-server -- npx supply-chain-mcp-server
# 使用本地克隆
claude mcp add supply-chain-mcp-server -- bun run /path/to/supply-chain-mcp-server/src/index.ts添加到 ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"supply-chain": {
"command": "npx",
"args": ["-y", "supply-chain-mcp-server"],
"env": {
"GITHUB_TOKEN": "optional",
"LIBRARIES_API_KEY": "optional",
"NVD_API_KEY": "optional"
}
}
}
}相同的 JSON 配置格式。将命令指向 npx supply-chain-mcp-server 或本地安装路径。
开始查询
你:"检查 [email protected] 是否有已知漏洞并验证其来源"就这样。代理自动处理漏洞查询、EPSS 评分、KEV 检查、来源验证等。
AI 能做什么
完整包审计
你:"对 lodash npm 包进行完整的安全审计"
代理:-> vuln_scan {mode: "package", ecosystem: "npm", name: "lodash"}
↳ osv_query + ghsa_package + epss_batch + kev_lookup(并行)
-> package_info {ecosystem: "npm", name: "lodash", version: "4.17.21"}
↳ npm_package + npm_downloads + npm_maintainers + npm_scripts + npm_provenance + npm_attestations + npm_audit_bulk(并行)
-> quality {mode: "scorecard", owner: "lodash", repo: "lodash"}
↳ scorecard_repo
-> license {mode: "lookup", type: "npm", name: "lodash", version: "4.17.21"}
↳ license_lookup
-> "[email protected] 安全审计:
漏洞:3 个历史漏洞(全部在 4.17.21 中修复),
包括原型污染 CVE-2020-8203。
来源:无 Sigstore 证明(在来源时代之前发布)。
OpenSSF Scorecard:6.1/10 — 无分支保护,无模糊测试。
依赖:零运行时依赖(自包含)。
许可证:MIT(ClearlyDefined 确认)。
生命周期脚本:无 — 干净。
建议:使用最新版本是安全的。考虑
迁移到 lodash-es 以支持 tree-shaking。"漏洞分类
你:"分类 CVE-2024-3094 — 有多紧急?"
代理:-> vuln_scan {mode: "cve", cve_id: "CVE-2024-3094"}
↳ nvd_cve + osv_id + ghsa_id + epss_score + kev_lookup(并行)
-> "CVE-2024-3094(xz-utils 后门):
CVSS:10.0 严重 — xz-utils 5.6.0/5.6.1 中的后门
EPSS:0.95(第99百分位)— 极有可能被利用
CISA KEV:是 — 正在被主动利用,截止日期 2024 年 3 月
影响:Linux 上的 xz-utils/liblzma(通过 systemd 影响 sshd)
这是紧急事件。需要立即行动:
1. 将 xz-utils 降级到 5.4.x 或删除 5.6.0/5.6.1
2. 检查所有系统中是否有受影响的版本
3. 这是一次通过妥协维护者实施的复杂供应链攻击。"依赖风险评估
你:"评估将 fastapi 添加到我们 Python 项目的供应链风险"
代理:-> package_info {ecosystem: "pypi", name: "fastapi"}
↳ pypi_package + pypi_releases + pypi_maintainers(并行)
-> vuln_scan {mode: "package", ecosystem: "PyPI", name: "fastapi"}
↳ osv_query + ghsa_package + epss + kev(并行)
-> dep_tree {mode: "dependencies", ecosystem: "pypi", name: "fastapi", version: "0.115.0"}
↳ deps_dependencies + deps_requirements + libraries_deps(并行)
-> quality {mode: "full", owner: "tiangolo", repo: "fastapi", repo_url: "https://github.com/tiangolo/fastapi"}
↳ scorecard_repo + badge_by_repo(并行)
-> security_check {mode: "typosquat", name: "fastapi", ecosystem: "pypi"}
↳ typosquat_check
-> "fastapi 供应链风险评估:
漏洞:1 个低严重性(已在最新版本修复)。
依赖:5 个直接依赖(starlette、pydantic 等),23 个传递依赖。
OpenSSF Scorecard:7.4/10 — 良好的 CI/CD,签名发布。
维护者:单一主要维护者(tiangolo)。
仿冒:'fast-api' 和 'fastapi2' 存在 — 请验证
安装的是正确的包。
风险:低。维护良好,活跃社区,良好的安全
实践。单一维护者风险因强大的
自动化和社区监督而被缓解。"仿冒检测
你:"我准备从 PyPI 安装 'reqeusts' — 这安全吗?"
代理:-> security_check {mode: "typosquat", name: "reqeusts", ecosystem: "pypi"}
↳ typosquat_check
-> security_check {mode: "compare_names", name_a: "reqeusts", name_b: "requests"}
↳ typosquat_compare
-> "警告:'reqeusts' 很可能是 'requests' 的仿冒包。
编辑距离:2('ue' -> 'eu' 转置)
相似度:87.5%
合法的包是 'requests'(月下载量 8 亿+)。
'reqeusts' 下载量极低,很可能是为利用拼写错误而发布的。
不要安装此包。
正确命令:pip install requests"复合工具(7 工具,90 技术)
AI 代理仅看到 7 个复合工具(约 1K tokens),每个工具内部并行编排多种技术。
| 复合工具 | 技术数 | 模式 | 描述 |
|---|---|---|---|
| vuln_scan | 24 | package cve batch recent go_module | 跨 OSV、GHSA、NVD、EPSS、CISA KEV、Go Vuln DB 的漏洞情报 |
| package_info | 33 | 按生态系统 | 包元数据 — 自动分发到 npm (10)、PyPI (4)、crates.io (4)、Go (3)、RubyGems (4)、NuGet (4)、Packagist (4) |
| dep_tree | 14 | dependencies dependents project similar search full | 通过 deps.dev + Libraries.io 的依赖图情报 |
| security_check | 7 | typosquat compare_names provenance verify_hash search_log | 供应链威胁检测:仿冒、来源、Sigstore |
| quality | 8 | scorecard badge distro compare full | 项目质量:OpenSSF Scorecard、Best Practices Badge、Repology |
| license | 3 | lookup batch search | 通过 ClearlyDefined 的许可证合规分析 |
| meta | 1 | — | 列出所有数据源及配置状态 |
个体技术(90)
运行 npx supply-chain-mcp-server --list-all 查看完整列表。
| 工具 | 描述 |
|------|------|
| osv_query | 查询 OSV 数据库中影响特定包和可选版本的已知漏洞 |
| osv_query_commit | 查询 OSV 数据库中与特定 git commit hash 关联的漏洞 |
| osv_query_purl | 使用 Package URL (purl) 查询 OSV 数据库中的已知漏洞 |
| osv_batch | 批量查询 OSV 数据库中多个包的漏洞 |
| osv_id | 通过 ID 从 OSV 获取完整漏洞详情(OSV、CVE、GHSA、RUSTSEC、PYSEC 等) |
| 工具 | 描述 |
|------|------|
| ghsa_id | 通过 GHSA 或 CVE 标识符获取 GitHub 安全公告 |
| ghsa_search | 按关键词、生态系统和严重性搜索 GitHub 安全公告 |
| ghsa_package | 列出影响特定生态系统中特定包的 GitHub 安全公告 |
| ghsa_recent | 列出最近更新的 GitHub 安全公告 |
| 工具 | 描述 |
|------|------|
| nvd_cve | 通过 CVE ID 从 NVD(NIST 国家漏洞数据库)获取完整 CVE 详情 |
| nvd_search | 按关键词和可选的 CVSS v3 严重性搜索 NVD 中的 CVE |
| nvd_recent | 获取指定天数内最近发布的 NVD CVE |
| 工具 | 描述 |
|------|------|
| epss_score | 获取单个 CVE ID 的 EPSS 漏洞利用概率和百分位 |
| epss_batch | 单次请求中批量获取多个 CVE 的 EPSS 分数(最多 100 个) |
| epss_top | 获取 EPSS 分数最高的 CVE(最有可能被利用的) |
| epss_above_threshold | 查找 EPSS 分数高于指定阈值的 CVE |
| 工具 | 描述 |
|------|------|
| kev_lookup | 检查 CVE 是否在 CISA 已知被利用漏洞 (KEV) 目录中 |
| kev_search | 按关键词搜索 KEV 条目(匹配供应商、产品、名称、描述) |
| kev_recent | 获取最近 N 天内添加的 KEV 条目 |
| kev_stats | 获取 KEV 目录统计:总数、热门供应商、每年条目数和勒索软件使用情况 |
| 工具 | 描述 |
|------|------|
| npm_package | 获取 npm 包元数据,包括描述、最新版本、维护者、许可证、仓库、主页和发布时间线 |
| npm_version | 获取特定 npm 包版本的元数据,包括依赖、分发信息(tarball、shasum、integrity)、脚本和废弃状态 |
| npm_downloads | 获取指定时期内 npm 包的下载计数(last-day、last-week、last-month) |
| npm_search | 在 npm 注册表中搜索匹配查询字符串的包 |
| npm_maintainers | 提取 npm 包的维护者和发布时间线 — 对检测维护者接管攻击至关重要 |
| npm_scripts | 提取并分析特定 npm 包版本的生命周期脚本 — 标记常用于供应链攻击的可疑命令(curl、wget、eval、exec 等) |
| npm_provenance | 检查 npm 包版本是否有 Sigstore 来源证明和签名 |
| npm_audit_bulk | 批量查询一组包和版本的 npm 安全公告 |
| npm_attestations | 获取 npm 包版本的完整 Sigstore 证明捆绑包 — 返回 SLSA 来源和发布证明 |
| npm_download_range | 获取日期范围内逐日的 npm 下载计数 — 用于检测下载异常或依赖混淆攻击 |
| 工具 | 描述 |
|------|------|
| pypi_package | 获取 PyPI 包元数据,包括作者、许可证、摘要、项目 URL、分类器和 Python 版本要求 |
| pypi_version | 获取特定 PyPI 包版本的元数据,包括发布 URL 和上传时间、文件大小、摘要和撤回状态 |
| pypi_releases | 列出 PyPI 包的所有版本及上传日期、大小和撤回状态 — 用于检测可疑的快速版本升级 |
| pypi_maintainers | 提取 PyPI 包的作者和维护者信息 — 用于检测所有权变更 |
| 工具 | 描述 |
|------|------|
| crate_info | 获取 crates.io crate 元数据,包括描述、下载计数、最大版本、仓库、主页、分类和关键词 |
| crate_versions | 列出 crate 的所有版本及版本号、撤回状态、许可证、crate 大小、创建日期和下载计数 |
| crate_deps | 获取特定 crate 版本的依赖,包括依赖种类(normal/dev/build)、版本要求和可选标志 |
| crate_owners | 列出 crates.io 上 crate 的所有者 — 用于检测所有权变更 |
| 工具 | 描述 |
|------|------|
| gem_info | 获取 RubyGems gem 元数据,包括名称、版本、作者、描述、下载计数、项目 URI 和源代码 URI |
| gem_versions | 列出 RubyGems gem 的所有版本及发布日期、平台信息和版本号 |
| gem_search | 在 RubyGems 注册表中搜索匹配查询字符串的 gem |
| gem_reverse_deps | 获取 RubyGems gem 的反向依赖 — 用于评估被入侵包的影响范围 |
| 工具 | 描述 |
|------|------|
| nuget_package | 获取 NuGet 包注册元数据,包括所有版本、依赖组、描述和目录条目 |
| nuget_search | 在 NuGet 注册表中搜索匹配查询字符串的包 |
| nuget_versions | 列出 NuGet 包的所有已发布版本 |
| nuget_catalog_entry | 获取 NuGet 特定版本的详细信息,包括依赖组、描述、许可证和目录元数据 |
| 工具 | 描述 |
|------|------|
| composer_package | 从 Packagist 获取 PHP/Composer 包元数据,包括版本、描述、维护者和仓库信息 |
| composer_search | 在 Packagist 中搜索匹配查询字符串的 PHP 包 |
| composer_stats | 获取 Packagist 包下载统计,包括总计、月度和每日下载计数 |
| composer_advisories | 获取 Packagist 中 PHP 包的安全公告 — 返回已知漏洞和 CVE |
| 工具 | 描述 |
|------|------|
| go_module | 从模块代理获取 Go 模块信息:最新版本和所有可用版本 |
| go_version | 获取特定 Go 模块版本的信息和 go.mod 内容 — 返回解析的依赖列表 |
| go_sum | 在校验和数据库 (sum.golang.org) 中查询 Go 模块版本以进行哈希验证 |
| 工具 | 描述 |
|------|------|
| go_vuln_id | 从 Go 漏洞数据库按 ID 获取 Go 漏洞 |
| go_vuln_list | 列出数据库索引中所有 Go 漏洞 ID |
| go_vuln_db_info | 获取 Go 漏洞数据库元数据,包括最后修改时间 |
| go_vuln_by_module | 查找影响特定模块的 Go 漏洞 |
| 工具 | 描述 |
|------|------|
| deps_package | 在 deps.dev 上查找包以获取元数据、版本和安全信息 |
| deps_version | 从 deps.dev 获取特定包版本的详细信息,包括链接、许可证和公告 |
| deps_dependencies | 从 deps.dev 获取特定包版本的依赖树 |
| deps_dependents | 获取依赖于 deps.dev 上特定包版本的包 |
| deps_advisory | 从 deps.dev 按密钥获取安全公告(如 GHSA-xxxx-xxxx-xxxx) |
| deps_project | 通过仓库 URL 从 deps.dev 获取项目信息 |
| deps_query | 通过 SHA256 artifact hash 在 deps.dev 上查找包 |
| deps_requirements | 从 deps.dev 获取特定包版本的依赖要求(版本约束) |
| deps_similar_packages | 在 deps.dev 上查找相似名称的包用于仿冒检测 |
| deps_purl_lookup | 通过 Package URL (purl) 在 deps.dev 上查找包 |
| 工具 | 描述 |
|------|------|
| scorecard_repo | 获取 GitHub 仓库的 OpenSSF Scorecard 安全分数,包括各项检查结果 |
| scorecard_compare | 并排比较 2-5 个 GitHub 仓库的 OpenSSF Scorecard 安全分数 |
| 工具 | 描述 |
|------|------|
| badge_project | 通过 ID 获取项目的 OpenSSF Best Practices badge 状态和标准 |
| badge_search | 搜索 OpenSSF Best Practices badge 项目 |
| badge_by_repo | 通过 GitHub 仓库 URL 查找 OpenSSF Best Practices badge |
| 工具 | 描述 |
|------|------|
| libraries_package | 从 Libraries.io 获取包元数据,包括仓库信息、版本和受欢迎度指标 |
| libraries_deps | 从 Libraries.io 获取特定包版本的依赖 |
| libraries_dependents | 获取依赖于 Libraries.io 上特定包的包 |
| libraries_sourcerank | 从 Libraries.io 获取包的 SourceRank 质量分数明细 |
| 工具 | 描述 |
|------|------|
| license_lookup | 从 ClearlyDefined 获取软件组件的策展许可证数据 |
| license_batch | 通过 ClearlyDefined 批量许可证查询多个组件 |
| license_search | 在 ClearlyDefined 中按模式搜索组件 |
| 工具 | 描述 |
|------|------|
| rekor_search | 通过邮箱、SHA256 哈希或公钥指纹搜索 Rekor 透明日志 |
| rekor_entry | 通过 UUID 检索特定 Rekor 透明日志条目,包括正文、证明和包含证明 |
| rekor_log_info | 获取当前 Rekor 透明日志状态,包括 rootHash、treeSize 和 signedTreeHead |
| rekor_entries_search | 通过 UUID 或日志索引在单次请求中检索多个 Rekor 日志条目 |
| rekor_verify | 验证 SHA256 artifact hash 是否已记录在 Rekor 透明日志中 |
| 工具 | 描述 |
|------|------|
| repology_project | 从 Repology 获取跨所有 Linux 发行版的包版本 |
| repology_problems | 查找 Repology 上仓库的打包问题 |
| repology_search | 在 Repology 中按名称搜索项目 |
| 工具 | 描述 |
|------|------|
| typosquat_check | 检查包名是否与热门包可疑地相似(潜在仿冒)— 返回编辑距离 <= 2 的匹配 |
| typosquat_compare | 直接比较两个包名以评估仿冒风险,显示编辑距离、相似度百分比、字符级差异和易混淆字符警告 |
| 工具 | 描述 |
|------|------|
| supplychain_list_sources | 列出所有 21 个供应链安全数据源及配置状态、API 密钥状态和工具计数 |
CLI 使用
# 列出 7 个复合工具
npx supply-chain-mcp-server --list
# 列出所有 90 种个体技术
npx supply-chain-mcp-server --list-all
# 运行复合工具
npx supply-chain-mcp-server --tool vuln_scan '{"mode":"cve","cve_id":"CVE-2024-3094"}'
npx supply-chain-mcp-server --tool vuln_scan '{"mode":"package","ecosystem":"npm","name":"express"}'
npx supply-chain-mcp-server --tool package_info '{"ecosystem":"npm","name":"express","version":"4.21.2"}'
npx supply-chain-mcp-server --tool security_check '{"mode":"typosquat","name":"reqeusts","ecosystem":"pypi"}'
npx supply-chain-mcp-server --tool quality '{"mode":"scorecard","owner":"expressjs","repo":"express"}'
npx supply-chain-mcp-server --tool dep_tree '{"mode":"dependencies","ecosystem":"npm","name":"express","version":"4.21.2"}'
# 个体技术也可使用(向后兼容)
npx supply-chain-mcp-server --tool osv_query '{"ecosystem":"npm","name":"express"}'
npx supply-chain-mcp-server --tool epss_score '{"cve_id":"CVE-2024-3094"}'数据源(21)
| 来源 | 认证 | 速率限制 | 提供的数据 |
|------|------|---------|-----------|
| OSV.dev | 无 | 1 请求/秒 | 跨生态系统漏洞数据库(npm、PyPI、Go、Rust 等) |
| GitHub Advisory Database | 可选 | 1 请求/秒 | GitHub 跟踪的包的安全公告 |
| NIST NVD | 可选 | 5 请求/30秒(有密钥 50) | CVE 详情、CVSS 分数、CPE 匹配、关键词搜索 |
| FIRST EPSS | 无 | 2 请求/秒 | 漏洞利用预测评分系统 — CVE 被利用概率 |
| CISA KEV | 无 | 0.5 请求/秒 | 已知被利用漏洞目录及修复截止日期 |
| npm Registry | 无 | 2 请求/秒 | 包元数据、版本、脚本、来源、证明、公告 |
| PyPI | 无 | 2 请求/秒 | Python 包元数据、版本、发布、维护者信息 |
| crates.io | 无 | 1 请求/秒 | Rust crate 元数据、版本、依赖、所有者 |
| RubyGems | 无 | 1 请求/秒 | Ruby gem 元数据、版本、反向依赖 |
| NuGet | 无 | 2 请求/秒 | .NET 包元数据、版本、依赖组 |
| Packagist | 无 | 1 请求/秒 | PHP/Composer 包、下载统计、安全公告 |
| Go Module Proxy | 无 | 2 请求/秒 | Go 模块版本、go.mod 内容、校验和验证 |
| Go Vulnerability Database | 无 | 2 请求/秒 | Go 特有的按模块漏洞公告 |
| Google deps.dev | 无 | 5 请求/秒 | 跨生态系统依赖图、公告、项目信息、purl 查询 |
| OpenSSF Scorecard | 可选 | 1 请求/秒 | 仓库安全评分,涵盖 18 项检查 |
| OpenSSF Best Practices | 无 | 1 请求/秒 | Best Practices badge 状态和标准 |
| Libraries.io | LIBRARIES_API_KEY | 1 请求/秒 | 包受欢迎度、SourceRank、跨平台依赖数据 |
| ClearlyDefined | 无 | 2 请求/秒 | 跨生态系统策展许可证数据 |
| Sigstore Rekor | 无 | 2 请求/秒 | 软件签名透明日志 — 来源验证 |
| Repology | 无 | 1 请求/秒 | 跨 Linux 发行版的包版本 |
| Typosquatting Detection | 无 | N/A | 内置 Levenshtein 距离 + 易混淆字符分析 |
架构
src/
index.ts # CLI 入口(--help、--list、--list-all、--tool、stdio 服务器)
composite/ # 7 个复合工具(MCP 注册)
helpers.ts # callTool()、callToolsParallel()、buildCompositeResponse()、TOOL_REGISTRY
vuln-scan.ts # vuln_scan — 24 种技术(5 种模式)
package-info.ts # package_info — 33 种技术(7 个生态系统)
dep-tree.ts # dep_tree — 14 种技术(6 种模式)
security-check.ts # security_check — 7 种技术(5 种模式)
quality.ts # quality — 8 种技术(5 种模式)
license.ts # license — 3 种技术(3 种模式)
meta.ts # meta — 1 种技术
index.ts # compositeTools 统一导出
protocol/
mcp-server.ts # MCP 服务器设置(stdio 传输)
tools.ts # 工具注册表 — 导入 compositeTools
types/
index.ts # 共享类型(ToolDef、ToolContext、ToolResult)
utils/
rate-limiter.ts # 按提供者的速率限制器
cache.ts # API 响应的 TTL 缓存
http.ts # 原生 fetch() 封装及错误处理
require-key.ts # API 密钥验证辅助
osv/ # 5 种技术 govuln/ # 4 种技术
ghsa/ # 4 种技术 depsdev/ # 10 种技术
nvd/ # 3 种技术 scorecard/ # 2 种技术
epss/ # 4 种技术 badge/ # 3 种技术
kev/ # 4 种技术 libraries/ # 4 种技术
npm/ # 10 种技术 clearlydefined/# 3 种技术
pypi/ # 4 种技术 rekor/ # 5 种技术
crates/ # 4 种技术 repology/ # 3 种技术
rubygems/ # 4 种技术 typosquat/ # 2 种技术
nuget/ # 4 种技术 meta/ # 1 种技术
packagist/ # 4 种技术
go/ # 3 种技术设计决策:
- 复合架构 — 7 个复合工具在 MCP 注册,每个编排多种个体技术。LLM 上下文从约 12K tokens(90 个工具定义)减少到约 1K tokens(7 个复合工具)。
- 22 个提供者,1 个服务器 — 每个数据源都是独立模块。复合工具根据模式/生态系统分发到正确的提供者技术。
- 按提供者速率限制 — 每个数据源都有自己的
RateLimiter实例,针对该 API 的限制进行校准。无共享瓶颈。 - TTL 缓存 — 漏洞数据(5-30分钟)、包元数据(5-15分钟)、KEV 目录(60分钟)、scorecard 数据(30分钟)被缓存,以避免多工具工作流中的冗余 API 调用。
- 优雅降级 — 缺少 API 密钥不会导致服务器崩溃。工具返回描述性错误消息:"Set LIBRARIES_API_KEY to enable Libraries.io tools."
- 2 个依赖 —
@modelcontextprotocol/sdk和zod。所有 HTTP 通过原生fetch()。无需外部 HTTP 库。 - 向后兼容 —
--toolCLI 接受复合和个体技术名称。--list-all显示所有 90 种技术。
限制
- Libraries.io 工具需要来自 libraries.io 的(免费)API 密钥
- NVD 免费层限制为 5 请求/30秒(有 API 密钥为 50)
- GHSA 和 Scorecard 使用
GITHUB_TOKEN可获得更高速率限制 - CISA KEV 作为单个 JSON 文件(约 2MB)获取,缓存 60 分钟
- 仿冒检测与热门 npm/PyPI 包的策展列表进行比较(非详尽)
- Go 校验和数据库 (sum.golang.org) 对于非常旧的或仅供 vendor 使用的模块可能返回 404
- Repology API 有严格的速率限制,可能会节流激进的查询
- ClearlyDefined 覆盖范围因生态系统而异 — npm 和 Maven 覆盖最好
- macOS / Linux 已测试(Windows 未测试)
MCP 安全套件
| 项目 | 领域 | 工具 | |------|------|------| | hackbrowser-mcp | 基于浏览器的安全测试 | 39 工具,Firefox,注入测试 | | cloud-audit-mcp | 云安全(AWS/Azure/GCP) | 38 工具,60+ 检查 | | github-security-mcp | GitHub 安全态势 | 39 工具,45 检查 | | cve-mcp | 漏洞情报 | 23 工具,5 来源 | | osint-mcp-server | OSINT 与侦察 | 37 工具,12 来源 | | darknet-mcp-server | 暗网与威胁情报 | 66 工具,16 来源 | | fingerprint-mcp | 数字指纹 | 13 工具,103 技术 | | supply-chain-mcp-server | 软件供应链安全 | 7 工具,90 技术,21 来源 |
