badchars/supply-chain-mcp-server

GitHub: badchars/supply-chain-mcp-server

一款集成了21个数据源、90项检测技术的软件供应链安全MCP服务器,让AI助手能通过对话并行查询并关联漏洞情报、包信息及来源验证。

Stars: 2 | Forks: 0

English | 简体中文 | 繁體中文 | 한국어 | Deutsch | Español | Français | Italiano | Dansk | 日本語 | Polski | Русский | Bosanski | العربية | Norsk | Português (Brasil) | ไทย | Türkçe | Українська | বাংলা | Ελληνικά | Tiếng Việt | हिन्दी


supply-chain-mcp-server

为 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)数据源架构更新日志参与贡献

npm License Bun MCP 7 Composite Tools 21 Sources

supply-chain-mcp-server demo

## 存在的问题 供应链安全情报是现代软件开发中缺失的一环。漏洞数据库、包注册表、来源验证、漏洞利用预测评分、许可证合规性、安全记分卡、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 构建

标签:暗色界面, 自动化攻击