English |
简体中文 |
繁體中文 |
한국어 |
Deutsch |
Español |
Français |
Italiano |
Dansk |
日本語 |
Polski |
Русский |
Bosanski |
العربية |
Norsk |
Português (Brasil) |
ไทย |
Türkçe |
Українська |
বাংলা |
Ελληνικά |
Tiếng Việt |
हिन्दी
为 AI agent 提供供应链安全情报。
OSV, GHSA, NVD, EPSS, CISA KEV, npm, PyPI, crates.io, RubyGems, NuGet, Packagist, Go, deps.dev, Scorecard, Libraries.io, ClearlyDefined, Rekor, Repology, typosquatting detection — 统一集成到单个 MCP server 中。
你的 AI agent 可以按需获取全频谱供应链情报,而无需打开 21 个浏览器标签页并进行手动比对。
存在的问题 •
独特优势 •
快速开始 •
AI 能做什么 •
工具 (7 + 90) •
数据源 •
架构 •
更新日志 •
参与贡献
## 存在的问题
供应链安全情报是现代软件开发中缺失的一环。漏洞数据库、包注册表、来源验证、漏洞利用预测评分、许可证合规性、安全记分卡、typosquatting(域名/包名抢注)检测 — 你需要的数据散落在数十个平台上,每个平台都有自己的 API、自己的身份验证、自己的速率限制以及自己的输出格式。如今,你需要在一个标签页查看 OSV,在另一个查看 NVD,拉取 npm 安全公告,在 FIRST.org 上检查 EPSS 评分,在又一个标签页中验证 Sigstore 来源,查找 OpenSSF Scorecard,交叉比对 CISA KEV,然后花一个小时手动将所有信息拼凑起来。
```
Traditional supply chain security workflow:
check vulnerabilities -> OSV + NVD + GitHub Advisories (3 separate UIs)
assess exploit likelihood -> EPSS scores (separate API)
check active exploitation -> CISA KEV catalog (separate JSON feed)
verify package provenance -> Sigstore/Rekor + npm attestations (multiple CLIs)
check security practices -> OpenSSF Scorecard + Best Practices Badge (2 UIs)
audit dependencies -> deps.dev + Libraries.io (2 more UIs)
check registry metadata -> npm + PyPI + crates.io + Go (4 registries)
check for typosquatting -> manual name comparison (error-prone)
verify license compliance -> ClearlyDefined (another UI)
check distro packaging -> Repology (yet another UI)
────────────────────────────────
Total: 45+ minutes per package audit, most of it switching contexts
```
**supply-chain-mcp-server** 通过 [Model Context Protocol](https://modelcontextprotocol.io) 为你的 AI agent 提供了涵盖 21 个数据源的 7 个复合工具(内部协调了 90 项技术)。agent 只需调用单个工具(如 `vuln_scan` 或 `package_info`),就会自动并行分发到相应的技术,将漏洞数据与漏洞利用预测进行关联,验证来源,检查安全态势,并在单次对话中呈现统一的供应链风险评估。
```
With supply-chain-mcp-server:
You: "Audit the security posture of the express npm package"
Agent: -> vuln_scan(mode:"package", ecosystem:"npm", name:"express")
internally runs: osv_query + ghsa_package + epss_batch + kev_lookup
-> package_info(ecosystem:"npm", name:"express", version:"4.21.2")
internally runs: npm_package + npm_downloads + npm_maintainers + npm_scripts + npm_provenance
-> quality(mode:"scorecard", owner:"expressjs", repo:"express")
internally runs: scorecard_repo
-> "express has a strong security posture. 2 known vulns but
neither actively exploited (not in KEV). High EPSS on one
CVE warrants patching priority. Provenance verified via
Sigstore. OpenSSF Scorecard 8.2/10."
```
## 独特优势
现有工具只能一次从一个来源获取原始数据。而 supply-chain-mcp-server 赋予你的 AI agent **同时对漏洞、来源和包情报进行推理**的能力。
|
传统方法 |
supply-chain-mcp-server |
| 接口 |
21 种不同的 Web UI、CLI 和 API |
MCP — AI agent 通过对话方式调用工具 |
| 漏洞数据 |
分别检查 OSV、NVD、GHSA |
Agent 并行查询全部 3 个来源 + EPSS + KEV |
| 包注册表 |
分别查询 npm、PyPI、crates.io、Go、RubyGems、NuGet、Packagist |
7 个生态系统在一个 server 中 — agent 自动选择合适的来源 |
| 来源验证 |
手动验证 Sigstore/Rekor,检查 npm 证明 |
Agent 检查 npm 来源 + Rekor 日志 + 证明捆绑包 |
| 许可证合规性 |
手动逐个包查找 ClearlyDefined |
Agent 支持批量解析跨生态系统的许可证 |
| 安全态势 |
分别检查 OpenSSF Scorecard 和最佳实践徽章 |
Agent 结合 Scorecard + 徽章 + deps.dev + Libraries.io SourceRank |
| typosquatting |
手动进行名称比对,极易遗漏 |
内置 Levenshtein 距离算法 + 易混淆字符检测 |
| API keys |
大多数平台都需要 |
21 个来源中有 18 个可免费使用 — API keys 用于解锁更高的速率限制 |
| 设置 |
安装多个工具,分别管理每个配置 |
npx supply-chain-mcp-server — 一条命令,零配置 |
## 快速开始
### 选项 1:npx(无需安装)
```
npx supply-chain-mcp-server
```
7 个复合工具(90 项技术)可立即使用。大多数数据源不需要 API keys — 21 个来源中有 18 个完全免费。
### 选项 2:克隆仓库
```
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 higher rate limits
export LIBRARIES_API_KEY=your-key # Required for Libraries.io tools
export NVD_API_KEY=your-key # 50 req/30s vs 5 req/30s without key
```
所有的 API keys 都是可选的。即使没有它们,你仍然可以完全使用 7 个复合工具中的 6 个 — 只有 Libraries.io(在 `dep_tree` 内)需要 API key。
### 连接到你的 AI agent
Claude Code
```
# 使用 npx
claude mcp add supply-chain-mcp-server -- npx supply-chain-mcp-server
# 使用本地 clone
claude mcp add supply-chain-mcp-server -- bun run /path/to/supply-chain-mcp-server/src/index.ts
```
Claude Desktop
添加到 `~/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"
}
}
}
}
```
Cursor / Windsurf / 其他 MCP 客户端
使用相同的 JSON 配置格式。将命令指向 `npx supply-chain-mcp-server` 或你的本地安装路径。
### 开始查询
```
You: "Check if express@4.17.1 has any known vulnerabilities and verify its provenance"
```
就是这么简单。agent 会自动处理漏洞查找、EPSS 评分、KEV 检查、来源验证等操作。
## AI 能做什么
### 全面包审计
```
You: "Do a complete security audit of the lodash npm package"
Agent: -> vuln_scan {mode: "package", ecosystem: "npm", name: "lodash"}
↳ osv_query + ghsa_package + epss_batch + kev_lookup (parallel)
-> 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 (parallel)
-> quality {mode: "scorecard", owner: "lodash", repo: "lodash"}
↳ scorecard_repo
-> license {mode: "lookup", type: "npm", name: "lodash", version: "4.17.21"}
↳ license_lookup
-> "lodash@4.17.21 security audit:
Vulnerabilities: 3 historical (all fixed in 4.17.21),
including prototype pollution CVE-2020-8203.
Provenance: No Sigstore attestation (published pre-provenance era).
OpenSSF Scorecard: 6.1/10 — no branch protection, no fuzzing.
Dependencies: Zero runtime deps (self-contained).
License: MIT (ClearlyDefined confirmed).
Lifecycle scripts: None — clean.
Recommendation: Safe to use at latest version. Consider
migrating to lodash-es for tree-shaking."
```
### 漏洞分类
```
You: "Triage CVE-2024-3094 — how urgent is this?"
Agent: -> vuln_scan {mode: "cve", cve_id: "CVE-2024-3094"}
↳ nvd_cve + osv_id + ghsa_id + epss_score + kev_lookup (parallel)
-> "CVE-2024-3094 (xz-utils backdoor):
CVSS: 10.0 Critical — backdoor in xz-utils 5.6.0/5.6.1
EPSS: 0.95 (99th percentile) — extremely likely to be exploited
CISA KEV: YES — actively exploited, deadline March 2024
Affects: xz-utils/liblzma on Linux (sshd via systemd)
This is CRITICAL. Immediate action required:
1. Downgrade xz-utils to 5.4.x or remove 5.6.0/5.6.1
2. Check all systems for affected versions
3. This was a sophisticated supply chain attack via
a compromised maintainer."
```
### 依赖风险评估
```
You: "Assess the supply chain risk of adding fastapi to our Python project"
Agent: -> package_info {ecosystem: "pypi", name: "fastapi"}
↳ pypi_package + pypi_releases + pypi_maintainers (parallel)
-> vuln_scan {mode: "package", ecosystem: "PyPI", name: "fastapi"}
↳ osv_query + ghsa_package + epss + kev (parallel)
-> dep_tree {mode: "dependencies", ecosystem: "pypi", name: "fastapi", version: "0.115.0"}
↳ deps_dependencies + deps_requirements + libraries_deps (parallel)
-> quality {mode: "full", owner: "tiangolo", repo: "fastapi", repo_url: "https://github.com/tiangolo/fastapi"}
↳ scorecard_repo + badge_by_repo (parallel)
-> security_check {mode: "typosquat", name: "fastapi", ecosystem: "pypi"}
↳ typosquat_check
-> "fastapi supply chain risk assessment:
Vulnerabilities: 1 low-severity (fixed in latest).
Dependencies: 5 direct (starlette, pydantic, etc.), 23 transitive.
OpenSSF Scorecard: 7.4/10 — good CI/CD, signed releases.
Maintainer: single primary maintainer (tiangolo).
Typosquatting: 'fast-api' and 'fastapi2' exist — verify
you're installing the correct package.
Risk: LOW. Well-maintained, active community, good security
practices. Single-maintainer risk is mitigated by strong
automation and community oversight."
```
### typosquatting 检测
```
You: "I'm about to install 'reqeusts' from PyPI — is this safe?"
Agent: -> security_check {mode: "typosquat", name: "reqeusts", ecosystem: "pypi"}
↳ typosquat_check
-> security_check {mode: "compare_names", name_a: "reqeusts", name_b: "requests"}
↳ typosquat_compare
-> "WARNING: 'reqeusts' is a likely typosquat of 'requests'.
Edit distance: 2 (transposed 'ue' -> 'eu')
Similarity: 87.5%
The legitimate package is 'requests' (800M+ monthly downloads).
'reqeusts' has very low downloads and was likely published
to exploit typos. DO NOT install this package.
Correct command: pip install requests"
```
## 复合工具(7 个工具,90 项技术)
AI agent 只能看到 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` | 供应链威胁检测:typosquatting、来源、Sigstore |
| `quality` | 8 | `scorecard` `badge` `distro` `compare` `full` | 项目质量:OpenSSF Scorecard、最佳实践徽章、Repology |
| `license` | 3 | `lookup` `batch` `search` | 通过 ClearlyDefined 进行许可证合规性分析 |
| `meta` | 1 | — | 列出所有数据源及其配置状态 |
## 单项技术(90 项)
所有 90 项技术均可通过 --tool CLI 访问,以确保向后兼容
运行 `npx supply-chain-mcp-server --list-all` 查看完整列表。
OSV.dev 漏洞 (5) — 无需 API key
| 工具 | 描述 |
|------|-------------|
| `osv_query` | 查询 OSV 数据库中影响特定包及可选版本的已知漏洞 |
| `osv_query_commit` | 查询 OSV 数据库中与特定 git commit hash 关联的漏洞 |
| `osv_query_purl` | 使用 Package URL (purl) 查询 OSV 数据库以获取已知漏洞 |
| `osv_batch` | 批量查询 OSV 数据库,一次性获取多个包的漏洞信息 |
| `osv_id` | 通过 ID(OSV、CVE、GHSA、RUSTSEC、PYSEC 等)从 OSV 获取完整的漏洞详情 |
GitHub Advisory GHSA (4) — 无需 API key(GITHUB_TOKEN 可选,用于提高速率限制)
| 工具 | 描述 |
|------|-------------|
| `ghsa_id` | 通过 GHSA 或 CVE 标识符获取 GitHub Security Advisory |
| `ghsa_search` | 按关键字、生态系统和严重程度搜索 GitHub Security Advisories |
| `ghsa_package` | 列出影响特定生态系统中特定包的 GitHub Security Advisories |
| `ghsa_recent` | 列出最近更新的 GitHub Security Advisories |
NIST NVD (3) — 无需 API key(NVD_API_KEY 可选,用于提高速率限制)
| 工具 | 描述 |
|------|-------------|
| `nvd_cve` | 通过 CVE ID 从 NVD(NIST 国家漏洞数据库)获取完整的 CVE 详情 |
| `nvd_search` | 按关键字和可选的 CVSS v3 严重程度搜索 NVD 中的 CVE |
| `nvd_recent` | 从 NVD 获取指定天数内最新发布的 CVE |
EPSS 漏洞利用预测 (4) — 无需 API key
| 工具 | 描述 |
|------|-------------|
| `epss_score` | 获取单个 CVE ID 的 EPSS 漏洞利用概率和百分位数 |
| `epss_batch` | 在单次请求中批量获取多个 CVE(最多 100 个)的 EPSS 分数 |
| `epss_top` | 获取 EPSS 得分最高的 CVE(最有可能被利用的漏洞) |
| `epss_above_threshold` | 查找 EPSS 得分高于特定阈值的 CVE |
CISA KEV (4) — 无需 API key
| 工具 | 描述 |
|------|-------------|
| `kev_lookup` | 检查某个 CVE 是否在 CISA 已知被利用漏洞 (KEV) 目录中 |
| `kev_search` | 按关键字搜索 KEV 条目(匹配供应商、产品、名称、描述) |
| `kev_recent` | 获取过去 N 天内新增的 KEV 条目 |
| `kev_stats` | KEV 目录统计信息:总数、顶级供应商、每年的条目数以及勒索软件使用情况明细 |
npm Registry (10) — 无需 API key
| 工具 | 描述 |
|------|-------------|
| `npm_package` | 获取 npm 包元数据,包括描述、最新版本、维护者、许可证、仓库、主页和发布时间线 |
| `npm_version` | 获取特定 npm 包版本的元数据,包括依赖项、分发信息(tarball、shasum、完整性)、脚本和弃用状态 |
| `npm_downloads` | 获取指定时间段内(最近一天、最近一周、最近一个月)包的 npm 下载量统计 |
| `npm_search` | 在 npm registry 中搜索匹配查询字符串的包 |
| `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 (4) — 无需 API key
| 工具 | 描述 |
|------|-------------|
| `pypi_package` | 获取 PyPI 包元数据,包括作者、许可证、摘要、项目 URL、分类器和 Python 版本要求 |
| `pypi_version` | 获取特定 PyPI 包版本的元数据,包括带有上传时间、文件大小、哈希摘要的发布 URL 以及撤回状态 |
| `pypi_releases` | 列出 PyPI 包的所有发布,包括上传日期、大小和撤回状态 — 用于检测可疑的快速版本刷号行为 |
| `pypi_maintainers` | 从 PyPI 包中提取作者和维护者信息 — 用于检测所有权变更 |
crates.io (4) — 无需 API key
| 工具 | 描述 |
|------|-------------|
| `crate_info` | 获取 crates.io crate 元数据,包括描述、下载量、最高版本、仓库、主页、类别和关键字 |
| `crate_versions` | 列出 crate 的所有版本,包括版本号、撤回状态、许可证、crate 大小、创建日期和下载量 |
| `crate_deps` | 获取特定 crate 版本的依赖项,包括依赖类型(普通/开发/构建)、版本要求和可选标志 |
| `crate_owners` | 列出 crates.io 上 crate 的所有者 — 用于检测所有权变更 |
RubyGems (4) — 无需 API key
| 工具 | 描述 |
|------|-------------|
| `gem_info` | 获取 RubyGems gem 元数据,包括名称、版本、作者、描述、下载量、项目 URI 和源代码 URI |
| `gem_versions` | 列出 RubyGems gem 的所有版本,包括发布日期、平台信息和版本号 |
| `gem_search` | 在 RubyGems registry 中搜索匹配查询字符串的 gem |
| `gem_reverse_deps` | 获取 RubyGems gem 的反向依赖项 — 用于评估包被入侵后的波及范围 |
NuGet (4) — 无需 API key
| 工具 | 描述 |
|------|-------------|
| `nuget_package` | 获取 NuGet 包注册元数据,包括所有版本、依赖项组、描述和 catalog 条目 |
| `nuget_search` | 在 NuGet registry 中搜索匹配查询字符串的包 |
| `nuget_versions` | 从 flat container index 列出 NuGet 包的所有已发布版本 |
| `nuget_catalog_entry` | 从 NuGet 获取特定版本的详情,包括依赖项组、描述、许可证和 catalog 元数据 |
Packagist / Composer (4) — 无需 API key
| 工具 | 描述 |
|------|-------------|
| `composer_package` | 从 Packagist 获取 PHP/Composer 包元数据,包括版本、描述、维护者和仓库信息 |
| `composer_search` | 在 Packagist 中搜索匹配查询字符串的 PHP 包 |
| `composer_stats` | 获取 Packagist 包下载统计信息,包括总下载量、月度和每日下载量 |
| `composer_advisories` | 从 Packagist 获取 PHP 包的安全公告 — 返回已知漏洞和 CVE |
Go Module Proxy (3) — 无需 API key
| 工具 | 描述 |
|------|-------------|
| `go_module` | 从 module proxy 获取 Go 模块信息:最新版本及所有可用版本 |
| `go_version` | 获取特定 Go 模块版本的信息及 go.mod 内容 — 返回解析后的依赖项列表 |
| `go_sum` | 在 checksum 数据库 (sum.golang.org) 中查找特定 Go 模块版本以进行哈希验证 |
Go 漏洞数据库 (4) — 无需 API key
| 工具 | 描述 |
|------|-------------|
| `go_vuln_id` | 通过 ID 从 Go 漏洞数据库获取 Go 漏洞 |
| `go_vuln_list` | 从数据库索引中列出所有的 Go 漏洞 ID |
| `go_vuln_db_info` | 获取 Go 漏洞数据库的元数据,包括最后修改时间 |
| `go_vuln_by_module` | 查找影响特定模块的 Go 漏洞 |
Google deps.dev (10) — 无需 API key
| 工具 | 描述 |
|------|-------------|
| `deps_package` | 在 deps.dev 上查找包以获取元数据、版本和安全信息 |
| `deps_version` | 从 deps.dev 获取特定包版本的详细信息,包括链接、许可证和公告 |
| `deps_dependencies` | 从 deps.dev 获取特定包版本的依赖树 |
| `deps_dependents` | 从 deps.dev 获取依赖于特定包版本的其他包 |
| `deps_advisory` | 通过 key(例如 GHSA-xxxx-xxxx-xxxx)从 deps.dev 获取安全公告 |
| `deps_project` | 通过仓库 URL 从 deps.dev 获取项目信息 |
| `deps_query` | 通过 SHA256 artifact hash 在 deps.dev 上查找包 |
| `deps_requirements` | 从 deps.dev 获取特定包版本的要求(版本约束) |
| `deps_similar_packages` | 在 deps.dev 上查找名称相似的包,用于 typosquatting 检测 |
| `deps_purl_lookup` | 通过 Package URL (purl) 在 deps.dev 上查找包 |
OpenSSF Scorecard (2) — 无需 API key(GITHUB_TOKEN 可选,用于提高速率限制)
| 工具 | 描述 |
|------|-------------|
| `scorecard_repo` | 获取 GitHub 仓库的 OpenSSF Scorecard 安全分数,包括各项检查的结果 |
| `scorecard_compare` | 并排比较 2-5 个 GitHub 仓库的 OpenSSF Scorecard 安全分数 |
OpenSSF Best Practices (3) — 无需 API key
| 工具 | 描述 |
|------|-------------|
| `badge_project` | 通过 ID 获取项目的 OpenSSF Best Practices 徽章状态和标准 |
| `badge_search` | 搜索 OpenSSF Best Practices 徽章项目 |
| `badge_by_repo` | 通过 GitHub 仓库 URL 查找 OpenSSF Best Practices 徽章 |
Libraries.io (4) — 需要提供 LIBRARIES_API_KEY
| 工具 | 描述 |
|------|-------------|
| `libraries_package` | 从 Libraries.io 获取包元数据,包括仓库信息、版本和流行度指标 |
| `libraries_deps` | 从 Libraries.io 获取特定包版本的依赖项 |
| `libraries_dependents` | 从 Libraries.io 获取依赖于特定包的其他包 |
| `libraries_sourcerank` | 从 Libraries.io 获取包的 SourceRank 质量分数明细 |
ClearlyDefined (3) — 无需 API key
| 工具 | 描述 |
|------|-------------|
| `license_lookup` | 从 ClearlyDefined 获取软件组件的精选许可证数据 |
| `license_batch` | 通过 ClearlyDefined 批量查找多个组件的许可证 |
| `license_search` | 通过模式匹配在 ClearlyDefined 中搜索组件 |
Sigstore Rekor (5) — 无需 API key
| 工具 | 描述 |
|------|-------------|
| `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 (3) — 无需 API key
| 工具 | 描述 |
|------|-------------|
| `repology_project` | 从 Repology 获取跨所有 Linux 发行版的包版本 |
| `repology_problems` | 查找 Repology 上特定仓库的打包问题/议题 |
| `repology_search` | 按名称搜索 Repology 项目 |
typosquatting 检测 (2) — 无需 API key(内置)
| 工具 | 描述 |
|------|-------------|
| `typosquat_check` | 检查包名是否与热门包高度相似(潜在 typosquatting) — 返回编辑距离 <= 2 的匹配项 |
| `typosquat_compare` | 直接比较两个包名以评估 typosquatting 风险,显示编辑距离、相似度百分比、字符级差异和易混淆字符警告 |
Meta (1) — 无需 API key
| 工具 | 描述 |
|------|-------------|
| `supplychain_list_sources` | 列出全部 21 个供应链安全数据源,及其配置状态、API key 状态和工具数量 |
### CLI 用法
```
# 列出 7 个 composite tools
npx supply-chain-mcp-server --list
# 列出所有 90 个 individual techniques
npx supply-chain-mcp-server --list-all
# 运行 composite tools
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"}'
# individual techniques 也能工作(向下兼容)
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](https://osv.dev) | 无 | 1 req/s | 跨生态系统漏洞数据库 (npm, PyPI, Go, Rust 等) |
| [GitHub Advisory Database](https://github.com/advisories) | 可选 | 1 req/s | 针对 GitHub 追踪包的安全公告 |
| [NIST NVD](https://nvd.nist.gov) | 可选 | 30 秒 5 次请求(有 key 为 50 次) | CVE 详情、CVSS 评分、CPE 匹配、关键字搜索 |
| [FIRST EPSS](https://www.first.org/epss) | 无 | 2 req/s | 漏洞利用预测评分系统 — CVE 被利用的概率 |
| [CISA KEV](https://www.cisa.gov/known-exploited-vulnerabilities-catalog) | 无 | 0.5 req/s | 已知被利用漏洞目录及修复截止日期 |
| [npm Registry](https://www.npmjs.com) | 无 | 2 req/s | 包元数据、版本、脚本、来源、证明、安全公告 |
| [PyPI](https://pypi.org) | 无 | 2 req/s | Python 包元数据、版本、发布、维护者信息 |
| [crates.io](https://crates.io) | 无 | 1 req/s | Rust crate 元数据、版本、依赖项、所有者 |
| [RubyGems](https://rubygems.org) | 无 | 1 req/s | Ruby 元数据、版本、反向依赖项 |
| [NuGet](https://www.nuget.org) | 无 | 2 req/s | .NET 包元数据、版本、依赖项组 |
| [Packagist](https://packagist.org) | 无 | 1 req/s | PHP/Composer 包、下载统计、安全公告 |
| [Go Module Proxy](https://proxy.golang.org) | 无 | 2 req/s | Go 模块版本、go.mod 内容、checksum 验证 |
| [Go 漏洞数据库](https://vuln.go.dev) | 无 | 2 req/s | 按模块划分的 Go 特定漏洞公告 |
| [Google deps.dev](https://deps.dev) | 无 | 5 req/s | 跨生态系统的依赖图、公告、项目信息、purl 查找 |
| [OpenSSF Scorecard](https://securityscorecards.dev) | 可选 | 1 req/s | 跨 18 项检查的仓库安全评分 |
| [OpenSSF Best Practices](https://www.bestpractices.dev) | 无 | 1 req/s | 最佳实践徽章状态和标准 |
| [Libraries.io](https://libraries.io) | `LIBRARIES_API_KEY` | 1 req/s | 包流行度、SourceRank、跨平台依赖项数据 |
| [ClearlyDefined](https://clearlydefined.io) | 无 | 2 req/s | 跨生态系统的精选许可证数据 |
| [Sigstore Rekor](https://rekor.sigstore.dev) | 无 | 2 req/s | 软件签名透明日志 — 来源验证 |
| [Repology](https://repology.org) | 无 | 1 req/s | 跨 Linux 发行版的包版本 |
| [typosquatting 检测](https://github.com/badchars/supply-chain-mcp-server) | 无 | N/A | 内置 Levenshtein 距离算法 + 易混淆字符分析 |
## 架构
```
src/
index.ts # CLI entrypoint (--help, --list, --list-all, --tool, stdio server)
composite/ # 7 composite tools (MCP-registered)
helpers.ts # callTool(), callToolsParallel(), buildCompositeResponse(), TOOL_REGISTRY
vuln-scan.ts # vuln_scan — 24 techniques (5 modes)
package-info.ts # package_info — 33 techniques (7 ecosystems)
dep-tree.ts # dep_tree — 14 techniques (6 modes)
security-check.ts # security_check — 7 techniques (5 modes)
quality.ts # quality — 8 techniques (5 modes)
license.ts # license — 3 techniques (3 modes)
meta.ts # meta — 1 technique
index.ts # compositeTools barrel export
protocol/
mcp-server.ts # MCP server setup (stdio transport)
tools.ts # Tool registry — imports compositeTools
types/
index.ts # Shared types (ToolDef, ToolContext, ToolResult)
utils/
rate-limiter.ts # Per-provider rate limiter
cache.ts # TTL cache for API responses
http.ts # Native fetch() wrapper with error handling
require-key.ts # API key validation helper
osv/ # 5 techniques govuln/ # 4 techniques
ghsa/ # 4 techniques depsdev/ # 10 techniques
nvd/ # 3 techniques scorecard/ # 2 techniques
epss/ # 4 techniques badge/ # 3 techniques
kev/ # 4 techniques libraries/ # 4 techniques
npm/ # 10 techniques clearlydefined/# 3 techniques
pypi/ # 4 techniques rekor/ # 5 techniques
crates/ # 4 techniques repology/ # 3 techniques
rubygems/ # 4 techniques typosquat/ # 2 techniques
nuget/ # 4 techniques meta/ # 1 technique
packagist/ # 4 techniques
go/ # 3 techniques
```
**设计决策:**
- **复合架构** — 在 MCP 注册了 7 个复合工具,每个工具协调多个单项技术。LLM 上下文从约 12K tokens(90 个工具定义)减少到约 1K tokens(7 个复合工具)。
- **22 个提供者,1 个 server** — 每个数据源都是一个独立的模块。复合工具根据模式/生态系统分发给相应的提供者技术。
- **针对提供者的速率限制器** — 每个数据源都有自己校准过以符合该 API 限制的 `RateLimiter` 实例。没有共享瓶颈。
- **TTL 缓存** — 漏洞数据 (5-30 分钟)、包元数据 (5-15 分钟)、KEV 目录 (60 分钟)、scorecard 数据 (30 分钟) 均会被缓存,以避免在多工具工作流中产生冗余的 API 调用。
- **优雅降级** — 缺少 API keys 不会导致 server 崩溃。工具会返回描述性错误信息:“设置 LIBRARIES_API_KEY 以启用 Libraries.io 工具。”
- **2 个依赖项** — `@modelcontextprotocol/sdk` 和 `zod`。所有的 HTTP 请求都通过原生 `fetch()` 完成。不需要额外的 HTTP 库。
- **向后兼容** — `--tool` CLI 同时接受复合工具名称和单项技术名称。`--list-all` 显示全部 90 项技术。
## 限制
- Libraries.io 工具需要来自 libraries.io 的(免费)API key
- NVD 免费层级的限制为每 30 秒 5 次请求(有 API key 则为 50 次)
- GHSA 和 Scorecard 可通过 `GITHUB_TOKEN` 获得更高的速率限制
- CISA KEV 作为单个 JSON 文件(约 2MB)获取,并缓存 60 分钟
- typosquatting 检测仅与精选的 npm/PyPI 顶级包列表进行比对(并非详尽无遗)
- Go checksum 数据库 (sum.golang.org) 对于非常旧或仅限 vendored 的模块可能返回 404
- Repology API 有严格的速率限制,可能会限制激进的查询
- ClearlyDefined 的覆盖范围因生态系统而异 — npm 和 Maven 的覆盖率最高
- 已在 macOS / Linux 上经过测试(Windows 尚未测试)
## MCP Security Suite 的一部分
| 项目 | 领域 | 工具 |
|---|---|---|
| [hackbrowser-mcp](https://github.com/badchars/hackbrowser-mcp) | 基于浏览器的安全测试 | 39 个工具,Firefox,注入测试 |
| [cloud-audit-mcp](https://github.com/badchars/cloud-audit-mcp) | 云安全 (AWS/Azure/GCP) | 38 个工具,60+ 项检查 |
| [github-security-mcp](https://github.com/badchars/github-security-mcp) | GitHub 安全态势 | 39 个工具,45 项检查 |
| [cve-mcp](https://github.com/badchars/cve-mcp) | 漏洞情报 | 23 个工具,5 个来源 |
| [osint-mcp-server](https://github.com/badchars/osint-mcp-server) | OSINT 与侦察 | 37 个工具,12 个来源 |
| [darknet-mcp-server](https://github.com/badchars/darknet-mcp-server) | 暗网与威胁情报 | 66 个工具,16 个来源 |
| [fingerprint-mcp](https://github.com/badchars/fingerprint-mcp) | 数字指纹识别 | 13 个工具,103 项技术 |
| **supply-chain-mcp-server** | **软件供应链安全** | **7 个工具,90 项技术,21 个来源** |
仅供授权的安全测试和评估使用。
在对任何目标执行供应链分析之前,请务必确保你已获得适当的授权。
MIT 许可证 • 使用 Bun + TypeScript 构建