关于 Package Intel
Package Intel 为 npm、PyPI 和 crates.io 提供软件包健康度、漏洞、依赖关系及下载数据。它通过 API 和可选的 MCP 服务面向编码 Agent,提供免费查询工具,也支持通过钱包支付获取健康评分。
主要功能
- 01覆盖三种生态的软件包快照
- 02漏洞与依赖关系查询
- 03下载量和健康评分
- 04最多 50 个软件包的批量评分
- 05检查新增依赖的 GitHub Action
适用场景
- 01添加依赖前检查软件包
- 02在 Pull Request 中审查新增依赖
- 03让 Agent 通过 MCP 获取软件包风险数据
MCP 相关
独立的 stdio MCP 服务提供免费的快照、漏洞、依赖和下载查询工具。设置 X402_PRIVATE_KEY 后,可启用付费健康评分及批量评分工具;收到 402 响应时,工具会签署 USDC 付款并重试请求。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y package-intel-mcpAPI_URLBase URL of the backing API.NETWORKCAIP-2 network id for payments. eip155:8453 is Base mainnet.X402_PRIVATE_KEY密钥Optional. Leave unset to use the free tools. Setting it to the private key of a wallet funded with USDC on NETWORK additionally unlocks package_health and package_batch_health, paid per call. Use a dedicated low-balance wallet: this is a hot key that spends automatically.X402_TX_HASHOptional. Set to "true" to expose the paid tools without a wallet, paying instead by passing the tx_hash of a USDC transfer you settled yourself. For agents that manage their own on-chain payments.本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
4收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| name | string | 是 | 软件包名称,例如 'express'、'requests' 或 'serde' |
| ecosystem | enum | 是 | 包生态系统:'npm'、'pypi' 或 'crates'(crates.io / Cargo,适用于 Rust)npm | pypi | crates |
详细介绍
软件包与依赖情报 API(x402)
通过 x402 支付协议,向 AI 编码 Agent 提供 npm、PyPI 和 crates.io(Rust)软件包健康状况、依赖图和漏洞数据的按次付费 API — 另提供 MCP 服务,以便 Claude Desktop/Cursor 中的 Agent 调用并自动付款。
默认通过免费的公共 facilitator 使用 Base Sepolia 测试网。切换到主网需要显式更改配置(参见切换到主网)。
端点
对上游数据源的原样转发免费:npm、PyPI、crates.io、OSV 和 deps.dev 本身均免费且无需身份验证,因此对它们的中继服务收费,定价等于零。收费的是数据整合 — 即评分。
| 端点 | 方法 | 价格 | 返回内容 |
|---|---|---|---|
/v1/package/:ecosystem/:name | GET | 免费 | 综合快照 |
/v1/vulns/:ecosystem/:name | GET | 免费 | 已知漏洞(OSV.dev) |
/v1/deps/:ecosystem/:name | GET | 免费 | 依赖图(deps.dev) |
/v1/downloads/:ecosystem/:name | GET | 免费 | 下载次数 |
/v1/health/:ecosystem/:name | GET | $0.01 | 健康/风险评分 0-100 |
/v1/batch | POST | $0.02 | 批量健康评分(≤50 个软件包) |
:ecosystem 为 npm、pypi 或 crates。以下接口也免费:/healthz、/v1/sample(预置示例响应)、/.well-known/x402(发现清单)。
免费路由的速率限制为每个调用方每分钟 60 次、每天 2000 次 — Agent 循环失控可能导致我们的出口 IP 被 npm 或 OSV 封禁。付费路由不受此限制;价格本身就是限流器。超出限制时会返回 429,并附带 Retry-After。
层级、价格、说明和发现元数据均来自 src/catalog.ts — 在此处编辑后,支付中间件、速率限制器、清单和 Bazaar 声明都会保持同步。tier 是必需的判别字段,因此新增端点不会默认变为免费端点。
信任调用方地址
速率限制器按客户端 IP 计数,但服务位于 Worker 代理和隧道之后,因此每个请求看起来都来自同一个地址。代理会将真实地址作为 x-stable-ip 转发,并使用 PROXY_SECRET 签名;只有密钥匹配时,源站才会认可该地址。其他情况 — 密钥错误、没有密钥,或请求直接发往隧道主机名 — 都会共用一个计数桶。没有此签名时,调用方可以为每个请求伪造一个新地址,或绕过代理,从而不受限制地调用上游服务。
在两处设置相同的值:
# .env for the origin, plus:
npx wrangler secret put PROXY_SECRET
如果主网环境缺少此值,服务器会在启动时发出警告。
本地设置(测试网)
npm install
npm run gen-wallet
gen-wallet 会输出两组仅供测试网使用的密钥对 — 切勿向其中转入真实资产:
- 卖方 — 将其地址填入
.env中的PAY_TO(收款地址)。 - 买方 — 将其私钥填入
.env中的BUYER_PRIVATE_KEY(测试脚本用它来模拟付费 Agent)。
将 .env.example 复制为 .env 并填写这些值。然后在 faucet.circle.com 为买方领取 Base Sepolia USDC(选择 Base Sepolia;无需账户)。不需要测试网 ETH — x402 的 exact 方案使用 EIP-3009,因此买方只需在链下签名,由 facilitator 支付 Gas。
npm run dev
验证:curl http://localhost:4021/healthz → 200,以及
curl -i http://localhost:4021/v1/health/npm/express → 402,并返回支付说明。
测试支付流程
npm run test-buyer # GET /v1/health/npm/express (default)
npm run test-buyer -- /v1/deps/npm/express
npm run test-buyer -- /v1/batch
在 Git Bash/Windows 上,请在命令前加上 MSYS_NO_PATHCONV=1,以免开头的 / 被改写成 Windows 路径。
请求不存在的软件包会返回 404,且不会收费 — x402 中间件会在任何 4xx/5xx 响应时完全跳过结算,因此失败请求免费。
MCP 服务(Agent 如何使用它)
mcp-client/ 是一个独立的 npm 软件包(package-intel-mcp)——一个 stdio MCP 服务,在买方的机器上运行。它与此服务分开发布,因此安装时不会连带引入 Hono 和 x402 服务栈;它不会从 src/ 导入任何内容。
**它完全无需配置即可运行。**没有钱包时,它会注册四个免费工具
(package_snapshot、package_vulns、package_deps、package_downloads)。要求先准备好
有资金的钱包才能使用工具,是最大的采用障碍,因此现在这已是默认路径,而非错误。
claude mcp add package-intel -- npx -y package-intel-mcp
设置 X402_PRIVATE_KEY 后,还会注册 package_health 和
package_batch_health,它们会调用付费端点,并在收到 402 时,从该钱包签署 USDC 付款
后重试——Agent 看到的只有数据。格式错误的密钥会直接报错,而不是静默退回免费模式,
否则付费工具无故消失会让人困惑。
{
"mcpServers": {
"package-intel": {
"command": "npx",
"args": ["-y", "package-intel-mcp"],
"env": { "X402_PRIVATE_KEY": "0x..." }
}
}
}
X402_PRIVATE_KEY 是Agent 运营者的钱包,需在 NETWORK 上存有 USDC。请使用
余额较低的专用钱包——它是会自动支出的热密钥。
若要从源代码运行,并连接本地服务:npm run mcp。
让 Agent 真正调用它
安装工具并不会让 Agent 主动调用它。在使用该工具的仓库的
AGENTS.md / CLAUDE.md / .cursor/rules 中添加一行说明,才能让它在每个相关任务中调用——
这是实现持续调用的机制,而不是在注册表中列出工具。mcp-client/README.md
提供了可直接复制粘贴的内容。
GitHub Action
action.yml 会将此仓库发布为依赖项审查 Action。当拉取请求涉及
package.json、requirements*.txt 或 Cargo.toml 时,它会查询每个新增
依赖项,并在评论中列出安全公告、弃用情况、过时情况和缺失的许可证。
name: Dependency review
on:
pull_request:
paths: ["**/package.json", "**/requirements*.txt", "**/Cargo.toml"]
permissions:
contents: read
pull-requests: write
jobs:
review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0 # needed: the action diffs base against head
- uses: adam121393/package-intel@v1
with:
fail-on: critical # none | low | moderate | high | critical
仅使用免费端点——无需钱包、API 密钥或注册。没有运行时依赖,因此将其加入流水线 不会带来供应链风险。
| 输入 | 默认值 | 用途 |
|---|---|---|
fail-on | none | 达到此严重级别或更高级别时,使检查失败 |
comment | true | 发布并更新拉取请求评论 |
github-token | ${{ github.token }} | 需要 pull-requests: write |
api-url | 托管服务 | 可覆盖为连接到你自己的实例 |
有两点值得了解。它只审查新增依赖项,不审查现有依赖项的版本升级,因此评论不会变成
让人学会直接略过的噪音。安全公告按版本范围筛选:精确固定版本会按原样检查,而版本
范围则会根据软件包的当前版本检查。这一区别很重要——不指定版本进行查询会返回所有
曾发布的安全公告,从而将已完全修复的 lodash 报告为严重问题。
无法查询的依赖项不会导致失败。上游服务中断不应阻塞无关的拉取请求。
Coinbase CDP 设置
两种不同的 CDP 凭据,很容易混淆:
| 凭据 | 用途 |
|---|---|
CDP_API_KEY_ID + CDP_API_KEY_SECRET | 支付协调器——验证并结算付款 |
CDP_WALLET_SECRET | 钱包 SDK——创建和控制由 CDP 管理的账户 |
接收付款只需要一个公开地址。服务绝不会持有密钥材料来收款——
CDP_WALLET_SECRET 仅供 npm run cdp-wallet 使用。
# 1. Add CDP_API_KEY_ID + CDP_API_KEY_SECRET to .env, then:
npm run cdp-check # verifies keys, prints which networks CDP actually serves
# 2. Add CDP_WALLET_SECRET, then create a TEE-backed receiving account:
npm run cdp-wallet # prints an address to use as PAY_TO
npm run cdp-wallet -- --faucet # also request Base Sepolia test funds
之所以提供 cdp-check,是因为 CDP 的文档将支持的网络列为“Base、Polygon、Arbitrum、
World、Solana”,却没有说明是否包含 Base Sepolia,而 /supported 需要身份验证。
它会通过实测给出答案,并告知你是否可以进行下文所述的测试网演练。
在测试网上演练 CDP 路径
如果 cdp-check 报告支持 Base Sepolia,请设置 USE_CDP_FACILITATOR=true,同时
保持 NETWORK=eip155:84532。这样你就能使用真实的 CDP 凭证和结算路径处理测试
资金。如果不支持,请不要设置该标志——CDP 路径会先在主网上运行,因此首次付款金额应较小。
上线主网
- 收款钱包——使用专用地址(最好通过
npm run cdp-wallet生成),切勿使用 个人钱包。PAY_TO中只填写公开地址。 - 设置
NETWORK=eip155:8453。 服务会自动切换到 CDP facilitator,并且在缺少 CDP 密钥时拒绝启动,而不会悄悄使用测试网 facilitator。 - 设置
PUBLIC_URL为实际来源地址,确保清单公布的 URL 可访问。 - 部署(见下文),然后完成 2–3 笔真实结算付款——CDP Bazaar 只有在首次成功结算后才会收录服务。
在任何地方推广端点之前,先从小额付款开始,并在 BaseScan 上确认款项已结算到你的 PAY_TO
地址。
部署(Railway)
已包含 railway.json(Nixpacks、npm run start:api、/healthz 健康检查)。推送代码仓库,
基于该仓库创建 Railway 项目,并在 Railway 的变量界面中设置 .env.example 里的环境变量——不要放入已提交的文件中。将运行时间监控指向 /healthz。
收录
- CDP Bazaar——通过 CDP facilitator 上线主网后,在首次结算付款后自动收录。每条路由都已声明发现元数据,并提供有效的示例输入(
npm/express);这很重要,因为 Bazaar 会使用该输入进行探测,并且只会索引返回 402 的端点——占位的生态系统会返回 400,因此永远不会被收录。 /.well-known/x402——已提供,供 agentic.market / x402scan / x402-list 使用。- MCP 注册表——发布到官方 MCP Registry,然后发布到 Glama、Smithery、PulseMCP。
备注
- **缓存:**进程内 LRU 缓存,TTL 从 1 小时(漏洞)到 24 小时(下载量/依赖项)不等。上游失败时,会提供过期值并标记
stale: true,而不是返回错误。 - **付款前验证:**不支持的生态系统会在中间件中、付款检查前返回 400,因此不会产生扣款。
- **按版本限定漏洞查询:**健康评分会针对解析出的当前版本查询 OSV。不指定版本进行查询会返回软件包历史中的所有公告,严重误导对持续维护的软件包的评估。
- pypistats 的速率限制非常严格(快速连续调用几次后就会返回 429)。下载量仅尽力提供:请求失败时会省略该字段,而不会导致请求失败。如果这很重要,请为热门软件包预热缓存。
src/domain/health.ts中的健康评分是有文档说明的 v1 启发式方案——随着实际使用数据积累,可调整权重。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。