Doramagic 项目包 · 项目说明书
npm-mcp 项目
生成时间:2026-05-30 18:57:28 UTC
首页
npm-mcp 是一个基于 Model Context Protocol (MCP) 的 npm 注册表服务器,它为 AI 助手提供了一套完整的 npm 包管理工具集。通过这个 MCP 服务器,AI 能够在代码编写过程中自动执行包搜索、安全审计、版本兼容性检查、质量分析等操作,极大地提升了开发效率和代码安全性。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
npm-mcp 文档中心
项目概述
npm-mcp 是一个基于 Model Context Protocol (MCP) 的 npm 注册表服务器,它为 AI 助手提供了一套完整的 npm 包管理工具集。通过这个 MCP 服务器,AI 能够在代码编写过程中自动执行包搜索、安全审计、版本兼容性检查、质量分析等操作,极大地提升了开发效率和代码安全性。
该项目的主要目标是解决 AI 编程助手在处理 npm 包时的两大痛点:一是缺乏对包的安全性和兼容性的主动检查能力,二是难以获取包的详细元数据和最佳实践建议。npm-mcp 通过封装 npm 注册表 API 和多种分析工具,使 AI 能够像经验丰富的开发者一样审慎地评估和选择依赖包。
核心功能模块
npm-mcp 提供了六大核心工具模块,每个模块都专注于特定的包管理场景,共同构成了一个完整的包管理辅助系统。
包搜索与发现
search_packages 工具提供了强大的 npm 包搜索能力,支持通过关键词查找相关包,并根据下载量、维护状态等指标对结果进行排序。这个工具是用户寻找合适包的起点,能够快速缩小选择范围。
search_packages 的输入参数包括搜索关键词和可选的结果数量限制,返回结果包含包名、描述、版本、下载量、维护者信息等关键数据。通过与后续的质量分析工具结合使用,AI 能够从搜索结果中筛选出最优选择。
包详情查询
get_package_details 工具用于获取包的详细元数据信息,包括版本历史、依赖关系、发布时间线、维护者列表等。这个工具是了解一个包的完整信息的核心入口,对于评估包的成熟度和稳定性至关重要。
该工具返回的信息结构化程度高,便于 AI 进行后续处理。返回数据包含:包的基本信息(名称、版本、描述)、许可协议和作者信息、版本列表及弃用状态、所有类型的依赖声明、发布节点的时间戳、以及 CDN 分发信息如 tarball 地址和完整性校验值。
安全审计
audit_security 工具集成了 npm 安全审计能力,能够检测已知漏洞并提供修复建议。该工具是 npm-mcp 中最重要的安全功能,确保 AI 在推荐任何包之前都能验证其安全性。
安全审计功能会检查目标包的已知漏洞数据库,对比版本号识别已披露的安全问题,并输出漏洞的严重程度、类型描述和推荐升级版本。对于依赖链较深的项目,这个工具还能递归检查传递依赖的安全状态。
版本兼容性检查
check_compatibility 工具用于检查包与现有依赖的兼容性,特别是 peer dependencies 的满足情况。这个工具对于避免运行时错误至关重要,能够在安装前发现潜在的依赖冲突。
兼容性检查的核心逻辑是验证目标包的 peer dependencies 是否与项目中已安装的包版本相匹配。当检测到冲突时,工具会列出具体的冲突项和缺失的依赖,并提供具体的修复建议。分析结果包括兼容性状态、peer dependencies 详情、冲突和缺失项列表、以及针对问题的具体操作建议。
质量分析
analyze_quality 工具提供全面的包质量评估,涵盖维护状态、下载量、stars、测试覆盖率等多个维度。这个综合评分帮助开发者和 AI 在众多选项中快速识别高质量的包。
质量评估的核心指标包括:维护活跃度(通过 GitHub 活动和数据更新时间判断)、社区认可度(npm 下载量和 GitHub stars)、代码质量(测试覆盖率和 CI 状态)、以及安全性(已知漏洞数量)。分析结果以结构化 JSON 格式返回,便于 AI 进行比较和决策。
依赖项审计
audit_project 工具用于审计项目 package.json 中的所有依赖项。这个工具特别适合在引入新依赖前进行全面的安全检查,确保项目的依赖树中没有已知漏洞。
审计过程会逐个检查 dependencies 和 devDependencies 中的包,针对每个有问题的包输出漏洞信息、严重程度和修复建议。最终生成一个汇总报告,列出需要优先更新的包及其安全影响。
系统架构
npm-mcp 采用分层架构设计,将 MCP 协议层、注册表客户端层和业务逻辑层清晰分离。这种设计确保了代码的可维护性和可扩展性,同时便于独立测试各个组件。
整体架构图
graph TD
subgraph "客户端层"
A[AI Assistant<br/>Cursor/Claude Desktop]
end
subgraph "MCP 协议层"
B[Server Entry<br/>src/index.ts]
C[ListToolsRequestSchema]
D[CallToolRequestSchema]
end
subgraph "业务逻辑层"
E[search_packages]
F[get_package_details]
G[audit_security]
H[check_compatibility]
I[analyze_quality]
J[audit_project]
end
subgraph "服务层"
K[RegistryClient<br/>registry-client.ts]
L[Cache Manager]
M[Rate Limiter]
N[Retry Handler]
end
subgraph "外部 API"
O[npm Registry API]
P[Bundlephobia API]
Q[GitHub API]
end
A --> B
B --> C
B --> D
C --> E
D --> E
D --> F
D --> G
D --> H
D --> I
D --> J
E --> K
F --> K
G --> K
H --> K
I --> K
J --> K
K --> L
K --> M
K --> N
K --> O
K --> P
K --> Q核心组件说明
MCP 服务器入口 (src/index.ts):负责初始化 MCP 协议处理器,处理工具列表请求和工具调用请求。它将请求路由到对应的工具处理函数,并返回格式化的结果。这个入口文件是整个系统的调度中心,确保 AI 发送的请求能够正确路由到相应的功能模块。
注册表客户端 (registry-client.ts):封装了与 npm 注册表通信的所有逻辑,包括请求发送、响应解析、缓存管理和限流处理。该客户端实现了以下关键特性:并发限制设置为 10 个请求,防止过度占用 npm API 配额;5 分钟 TTL 的 LRU 缓存,减少重复请求;指数退避重试机制,处理 429 限流响应;以及请求去重,避免同一时间发送相同请求。
工具模块:每个工具都有独立的文件,采用一致的架构模式。工具接收参数、执行验证、执行核心逻辑、格式化结果并返回。所有工具都使用 Zod 进行输入模式验证,确保参数的正确性和安全性。
数据流处理
sequenceDiagram
participant AI as AI Assistant
participant MCP as MCP Server
participant Client as Registry Client
participant Cache as Cache Layer
participant API as npm Registry API
AI->>MCP: Call Tool (search_packages)
MCP->>Client: Execute Search
alt Cache Hit
Client->>Cache: Check Cache
Cache-->>Client: Return Cached
end
alt Cache Miss
Client->>API: GET /-/v1/search
API-->>Client: Search Results
Client->>Cache: Store Result
end
Client-->>MCP: Formatted Results
MCP-->>AI: Tool Response快速开始
环境要求
npm-mcp 基于 Node.js 18+ 开发,使用原生 fetch API 进行 HTTP 请求。项目构建使用 TypeScript,确保类型安全和代码质量。
| 环境要求 | 最低版本 | 推荐版本 |
|---|---|---|
| Node.js | 18.0.0 | 20.x LTS |
| npm | 9.0.0 | 10.x |
| TypeScript | 5.0 | 最新稳定版 |
安装步骤
首先克隆项目仓库到本地:
git clone https://github.com/alisaitteke/npm-mcp.git
cd npm-mcp
然后安装项目依赖:
npm install
构建 TypeScript 代码:
npm run build
运行测试确保一切正常:
npm test
配置 MCP 客户端
将以下配置添加到 Cursor 的 ~/.cursor/.cursorrules 文件或 Claude Desktop 的 MCP 配置文件:
{
"mcpServers": {
"npm-registry": {
"command": "node",
"args": ["/path/to/npm-mcp/bin/npm-registry-mcp.js"]
}
}
}
使用场景与工作流
场景一:AI 自动安全检查
当 AI 检测到用户请求安装任何 npm 包时,应自动触发安全审计流程,无需用户显式要求。
用户: "安装 express"
AI 自动执行:
1. audit_security("express") → 检查已知漏洞
2. get_package_details("express") → 验证维护状态
3. check_compatibility("express") → 确保无依赖冲突
4. 展示结果并推荐安全版本
场景二:智能包推荐
当用户询问关于某个功能需求时,AI 应主动搜索并比较相关包,提供数据驱动的推荐。
用户: "有什么好的日期处理库?"
AI 自动执行:
1. search_packages("date time library") → 搜索候选包
2. analyze_quality(date-fns) → 评估质量
3. analyze_quality(dayjs) → 评估质量
4. compare_packages → 对比分析
5. 提供推荐和理由
场景三:项目依赖审计
定期审计项目的完整依赖树,确保没有已知安全漏洞。
用户: "审计我的项目依赖"
AI 自动执行:
1. 读取项目 package.json
2. 对每个依赖并行执行 audit_security
3. 汇总所有安全问题
4. 按严重程度排序
5. 提供批量修复命令
API 工具参考
工具列表
| 工具名称 | 输入参数 | 主要功能 |
|---|---|---|
| search_packages | query, size? | 搜索 npm 包 |
| get_package_details | packageName, version? | 获取包详细信息 |
| audit_security | packageName, version? | 安全漏洞审计 |
| check_compatibility | packageName, version?, targetVersion? | 版本兼容性检查 |
| analyze_quality | packageName | 包质量分析 |
| audit_project | dependencies | 项目依赖审计 |
| analyze_npx_command | command, args?, timeout? | npx 命令分析 |
search_packages 参数详解
| 参数名 | 类型 | 必需 | 默认值 | 说明 |
|---|---|---|---|---|
| query | string | 是 | - | 搜索关键词 |
| size | number | 否 | 10 | 返回结果数量 |
get_package_details 参数详解
| 参数名 | 类型 | 必需 | 默认值 | 说明 |
|---|---|---|---|---|
| packageName | string | 是 | - | npm 包名称 |
| version | string | 否 | latest | 指定版本号 |
audit_security 返回结构
{
"success": true,
"package": "package-name",
"version": "1.0.0",
"vulnerabilities": {
"critical": 0,
"high": 1,
"medium": 2,
"low": 0
},
"details": [
{
"id": "SNYK-JS-PACKAGENAME",
"severity": "high",
"title": "Prototype Pollution",
"url": "https://security.snyk.io/...",
"fix": "Upgrade to 1.0.1"
}
]
}
缓存与限流机制
缓存策略
注册表客户端实现了智能缓存机制,显著减少重复 API 调用,提升响应速度并降低限流风险。
| 缓存类型 | TTL | 说明 |
|---|---|---|
| 包元数据 | 5 分钟 | package.json、版本信息等 |
| 下载统计 | 5 分钟 | 每周下载量等动态数据 |
| GitHub 数据 | 5 分钟 | stars、issues 等 GitHub API 数据 |
缓存采用 LRU (Least Recently Used) 策略,当缓存空间不足时自动清理最久未使用的数据。内部可通过 client.clearCache() 方法手动清除缓存。
请求限流
为了遵守 npm Registry 的使用限制,系统实现了严格的并发控制:
- 最大并发请求数:10
- 429 响应处理:指数退避重试
- 指数退避初始延迟:1 秒
- 最大重试次数:3 次
GitHub API 限流说明
质量分析功能使用 GitHub API 获取包的维护者活动和仓库状态。未认证请求的 GitHub API 限制为每小时 60 次请求。在处理大量包时,部分请求可能因限流而失败,这是预期行为。
开发指南
项目结构
npm-mcp/
├── src/
│ ├── index.ts # MCP 服务器入口
│ ├── registry-client.ts # npm API 客户端
│ ├── types.ts # TypeScript 类型定义
│ └── tools/ # MCP 工具实现
│ ├── search-packages.ts
│ ├── package-details.ts
│ ├── security-audit.ts
│ ├── version-compatibility.ts
│ ├── quality-analysis.ts
│ └── npx-command.ts
├── test/ # Vitest 测试文件
├── bin/ # 可执行文件
│ └── npm-registry-mcp.js # npx 入口点
├── server.json # MCP 注册表元数据
└── package.json
添加新工具流程
第一步:创建工具文件
在 src/tools/ 目录下创建新的工具文件,使用 Zod 进行输入验证:
import { z } from 'zod';
import { RegistryClient } from '../registry-client.js';
export const MyToolSchema = z.object({
param: z.string(),
});
export async function myTool(
params: z.infer<typeof MyToolSchema>,
client: RegistryClient
): Promise<string> {
const validated = MyToolSchema.parse(params);
// 工具实现逻辑
return JSON.stringify({ success: true });
}
第二步:注册工具
在 src/index.ts 中将新工具添加到 ListToolsRequestSchema 和 CallToolRequestSchema 的处理逻辑中。
第三步:添加测试
在 test/ 目录下创建对应的测试文件,确保覆盖正常路径和异常路径:
describe('My Tool', () => {
it('should work correctly', async () => {
// 测试实现
});
});
可用脚本命令
| 命令 | 功能 |
|---|---|
| npm run build | 编译 TypeScript 到 dist/ 目录 |
| npm test | 运行所有测试 |
| npm run test:coverage | 生成测试覆盖率报告 |
| npm run typecheck | TypeScript 类型检查 |
| npm run dev | 监听模式自动编译 |
故障排查
服务器无法启动
首先确认 Node.js 版本符合要求:
node --version # 需要 18.0.0 或更高版本
然后尝试重新构建:
npm run build
如果使用 bin 可执行文件,确保其有执行权限:
chmod +x bin/npm-registry-mcp.js
测试失败
清除 node_modules 和 lock 文件后重新安装:
rm -rf node_modules package-lock.json
npm install
npm run build
npm test
GitHub API 限流
质量分析使用 GitHub API 获取数据,未认证请求每小时限制 60 次。部分包的质量分析可能因限流而返回不完整数据,这是正常的外部依赖限制。
参与贡献
我们欢迎社区贡献!请阅读 CONTRIBUTING.md 了解详细的贡献指南。核心贡献流程包括:创建功能分支(使用 feature/、fix/、docs/ 等前缀)、遵循 Conventional Commits 规范编写提交信息、为新功能添加测试、确保所有测试通过后提交 Pull Request。
分支命名规范:feature/ 用于新功能、fix/ 用于错误修复、docs/ 用于文档更新、test/ 用于测试相关、refactor/ 用于代码重构。
提交信息应遵循以下格式:feat: add new feature、fix: resolve bug、docs: update documentation、test: add test coverage、refactor: simplify logic。
相关资源
来源:https://github.com/alisaitteke/npm-mcp / 项目说明书
项目介绍
npm-mcp 是一个基于 Model Context Protocol (MCP) 协议的 npm 注册表服务器,为 AI 助手提供 npm 包管理能力。通过集成 npm-mcp,AI 助手能够自动搜索、验证和管理 npm 包,极大提升开发效率。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
项目概述
npm-mcp 充当 AI 助手与 npm 注册表之间的桥梁,使 AI 能够执行以下操作:
- 搜索和发现 npm 包
- 获取包详细信息
- 进行安全审计
- 检查版本兼容性
- 分析包能力和质量
- 生成快速开始代码示例
资料来源:DEVELOPMENT.md:1-15
核心工具
npm-mcp 提供一系列 MCP 工具,每个工具负责特定的 npm 包管理功能。
工具列表
| 工具名称 | 功能描述 | 输入参数 |
|---|---|---|
search_packages | 搜索 npm 包 | query, size? |
package_details | 获取包详细信息 | packageName, version? |
audit_security | 安全审计 | packageName, version? |
check_compatibility | 版本兼容性检查 | packageName, toVersion, fromVersion? |
analyze_capabilities | 包能力分析 | packageName, version? |
analyze_quality | 质量分析 | packageName |
compare_packages | 包对比 | packages |
find_similar_packages | 查找相似包 | packageName |
analyze_bundle_size | 体积分析 | packageName |
npx_command | NPX 命令分析 | command, args?, timeout? |
quick_start | 快速开始代码 | packageName, framework? |
资料来源:DEVELOPMENT.md:20-35
search_packages
搜索 npm 注册表中的包,支持关键词和模糊匹配。
search_packages({
query: "react state management",
size: 5
})
返回结果包含包名、描述、版本、下载量等信息。
package_details
获取包的完整信息,包括版本、依赖、许可证、发布时间等。
package_details({
packageName: "axios",
version: "1.6.0"
})
返回数据结构:
{
"success": true,
"package": {
"name": "axios",
"version": "1.6.0",
"description": "Promise based HTTP client",
"isLatest": true
},
"metadata": {
"license": "MIT",
"maintainers": [...],
"keywords": [...]
},
"dependencies": {
"dependencies": {...},
"devDependencies": {...},
"peerDependencies": {...}
},
"stats": {
"weeklyDownloads": "45,000,000",
"period": "2024-01-01 to 2024-01-08"
}
}
资料来源:src/tools/package-details.ts:1-100
check_compatibility
检查包升级时的版本兼容性,识别潜在的破坏性变更。
check_compatibility({
packageName: "express",
fromVersion: "4.17.1",
toVersion: "4.18.2"
})
返回结果包含:
- 破坏性变更列表
- 依赖差异分析
- SemVer 摘要
- 兼容性建议
资料来源:src/tools/version-compatibility.ts:1-80
analyze_capabilities
分析包的现代特性支持情况:
| 能力类别 | 检查项 |
|---|---|
| 模块系统 | ESM、CommonJS、Dual Package |
| TypeScript | 内置类型、@types 包、位置 |
| 平台支持 | Node.js、Browser、Deno、Bun |
| 导出字段 | exports 字段、Conditional exports |
{
"moduleSystem": {
"esm": true,
"commonjs": true,
"dualPackage": true
},
"typescript": {
"hasTypes": true,
"typesLocation": "./dist/index.d.ts"
},
"platform": {
"node": true,
"browser": true
}
}
资料来源:CAPABILITIES.md:1-60
架构设计
技术栈
| 组件 | 技术 |
|---|---|
| 运行时 | Node.js 18+ |
| 语言 | TypeScript |
| 协议 | MCP (Model Context Protocol) |
| HTTP 客户端 | 原生 fetch API |
资料来源:DEVELOPMENT.md:25-30
项目结构
npm-mcp/
├── src/
│ ├── index.ts # MCP 服务器入口
│ ├── registry-client.ts # NPM API 客户端
│ ├── types.ts # 共享类型定义
│ └── tools/
│ ├── search-packages.ts # 搜索工具
│ ├── package-details.ts # 包详情工具
│ ├── security-audit.ts # 安全审计工具
│ ├── version-compatibility.ts # 版本兼容性工具
│ ├── quality-analysis.ts # 质量分析工具
│ └── npx-command.ts # NPX 命令工具
├── test/ # Vitest 测试
├── bin/
│ └── npm-registry-mcp.js # npx 入口点
├── server.json # MCP 注册表元数据
└── package.json
资料来源:DEVELOPMENT.md:10-20
核心组件架构
graph TD
A[AI 助手] -->|MCP 协议| B[MCP 服务器]
B --> C[工具调度器]
C --> D[registry-client]
D -->|HTTP 请求| E[NPM 注册表 API]
E -->|缓存响应| F[LRU 缓存]
D -->|并发控制| G[请求限流器]
F -->|5分钟 TTL| D
G -->|最多 10 并发| D注册表客户端
registry-client.ts 是核心 HTTP 客户端,负责与 npm 注册表 API 通信。
主要特性:
| 特性 | 配置值 |
|---|---|
| 并发限制 | 10 个请求 |
| 缓存策略 | LRU,5 分钟 TTL |
| 重试机制 | 指数退避(429 响应) |
| 速率限制 | 集成 npm API 限制 |
资料来源:DEVELOPMENT.md:22-25
请求处理流程
sequenceDiagram
participant AI as AI 助手
participant MCP as MCP 服务器
participant Client as Registry Client
participant Cache as 缓存
participant NPM as NPM API
AI->>MCP: search_packages("axios")
MCP->>Client: fetchPackage(query)
Client->>Cache: check(key)
alt 缓存命中
Cache-->>Client: 返回缓存数据
else 缓存未命中
Client->>NPM: GET /-/v1/search
NPM-->>Client: 搜索结果
Client->>Cache: store(key, data)
end
Client-->>MCP: 结果数据
MCP-->>AI: JSON 响应与 AI 助手的集成
MCP 资源
npm-mcp 通过 MCP 协议暴露资源,AI 助手可以读取这些资源来了解包的安全状态和兼容性要求。
{
"resources": {
"security-check": "MUST check security before adding packages",
"compatibility-check": "Verify version compatibility before install",
"capabilities-check": "Analyze package capabilities for modern projects"
}
}
资料来源:AUTOMATIC.md:1-30
自动化工作流
npm-mcp 支持 AI 助手自动执行安全检查,无需用户显式请求:
graph LR
A[用户请求] --> B{AI 检测到包名}
B -->|自动触发| C[audit_security]
C --> D{是否有漏洞?}
D -->|是| E[警告 + 建议安全版本]
D -->|否| F[继续正常流程]
E --> G[提供安全安装命令]
F --> H[执行原请求]自动化场景示例:
| 场景 | AI 自动行为 |
|---|---|
| 用户说"我想用 axios" | 自动运行 audit_security("axios") |
| 用户粘贴 package.json | 批量审计所有依赖 |
| 用户说"安装 express" | 检查安全 + 兼容性后再安装 |
资料来源:AI_USAGE.md:1-50
提示词集成
npm-mcp 支持自定义提示词,可用于自动化常见工作流:
| 提示词 | 用途 |
|---|---|
/check_before_install | 安装前检查包安全性 |
/audit_project | 审计整个项目的依赖 |
/find_package | 搜索合适的包 |
/compare_packages | 对比多个包 |
// 示例:check_before_install 使用流程
User: "check_before_install axios"
AI 自动执行:
1. audit_security("axios")
2. check_compatibility("axios")
3. analyze_capabilities("axios")
4. 返回综合建议
资料来源:PROMPTS.md:1-40
使用方式
安装
npm install -g @alisaitteke/npm-mcp
配置 Cursor
在 Cursor 设置中添加 MCP 服务器:
{
"mcpServers": {
"npm-registry": {
"command": "npx",
"args": ["-y", "@alisaitteke/npm-registry-mcp"]
}
}
}
开发设置
git clone https://github.com/alisaitteke/npm-mcp.git
cd npm-mcp
npm install
npm run build
资料来源:DEVELOPMENT.md:1-10
常用命令
| 命令 | 描述 |
|---|---|
npm run build | 构建 dist/ 目录 |
npm test | 运行测试 |
npm run test:coverage | 生成覆盖率报告 |
npm run typecheck | TypeScript 类型检查 |
npm run dev | 监视模式构建 |
资料来源:DEVELOPMENT.md:5-10
常见问题排查
服务器无法启动
| 检查项 | 解决方法 |
|---|---|
| Node 版本 | 确认 Node 18+:node --version |
| 构建文件 | 重新构建:npm run build |
| 执行权限 | 赋予权限:chmod +x bin/npm-registry-mcp.js |
GitHub 速率限制
质量分析工具使用 GitHub API,未认证限制为 60 请求/小时,部分包分析可能失败。
解决方案:
- 设置
GITHUB_TOKEN环境变量 - 使用认证的 GitHub 应用
资料来源:DEVELOPMENT.md:45-50
测试失败
rm -rf node_modules package-lock.json
npm install
npm run build
npm test
扩展开发
添加新工具
步骤 1:创建工具文件
// src/tools/my-tool.ts
import { z } from 'zod';
import { RegistryClient } from '../registry-client.js';
export const MyToolSchema = z.object({
param: z.string(),
});
export async function myTool(
params: z.infer<typeof MyToolSchema>,
client: RegistryClient
): Promise<string> {
const validated = MyToolSchema.parse(params);
// 实现逻辑
return JSON.stringify({ success: true });
}
步骤 2:注册到服务器
在 src/index.ts 中:
- 在
ListToolsRequestSchema处理器中添加工具列表 - 在
CallToolRequestSchema处理器中调用工具处理器
步骤 3:添加测试
// test/my-tool.test.ts
describe('My Tool', () => {
it('should work correctly', async () => {
// 测试实现
});
});
分支命名规范
| 前缀 | 用途 |
|---|---|
feature/ | 新功能 |
fix/ | 错误修复 |
docs/ | 文档更新 |
test/ | 测试相关 |
refactor/ | 代码重构 |
提交规范
遵循 Conventional Commits 格式:
feat: add new search filter
fix: resolve caching issue
docs: update README examples
test: add coverage for quality analysis
refactor: simplify version comparison logic
最佳实践
AI 助手使用建议
- 始终检查安全性 — 推荐安装前先运行
audit_security - 主动检查 — 不要等待用户询问,AI 应自动检测包名
- 批量操作 — 并行检查多个包
- 清晰警告 — 使用 ⚠️ 🔒 ✅ 表情符号提高可见性
- 可操作的输出 — 始终提供安全的安装命令
现代化项目检查项
应具备的特性:
- ✅
dualPackage: true或esm: true - ✅
hasTypes: true - ✅
exports.hasExports: true - ✅ 最近的
engines.node版本
危险信号:
- ⚠️ 无 ESM 支持(仅 CommonJS)
- ⚠️ 无 TypeScript 类型
- ⚠️ 旧的 Node.js 引擎要求
- ⚠️ 无 exports 字段(遗留结构)
参见
资料来源:DEVELOPMENT.md:1-15
安装配置
本文档详细说明 npm-mcp 的安装、环境配置、项目初始化以及常见配置选项。npm-mcp 是一个基于 MCP(Model Context Protocol)的 npm 注册表服务器,提供包搜索、安全审计、版本兼容性检查等功能。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
环境要求
系统 prerequisites
npm-mcp 基于 Node.js 原生 fetch API 构建,因此对 Node.js 版本有明确要求:
| 要求项 | 最低版本 | 推荐版本 | 说明 |
|---|---|---|---|
| Node.js | 18.0.0 | 20.x LTS | 必须支持原生 fetch |
| npm | 8.x+ | 最新版 | 用于包管理 |
| 操作系统 | macOS/Linux/Windows | 任意主流系统 | 无平台限制 |
确认 Node.js 版本:
node --version
资料来源:DEVELOPMENT.md:1-5
GitHub API 限制说明
质量分析功能依赖 GitHub API,未认证请求限制为每小时 60 次。部分包的分析可能因此失败,这是预期行为。
安装步骤
方式一:直接安装(推荐)
通过 npm 全局安装或项目本地安装:
# 全局安装
npm install -g @alisaitteke/npm-mcp
# 或项目本地安装
npm install @alisaitteke/npm-mcp
安装完成后可通过 npx 直接运行:
npx npm-registry-mcp
资料来源:DEVELOPMENT.md:1-5
方式二:源码安装(开发用途)
适用于需要自定义修改或参与开发贡献的场景:
# 克隆仓库
git clone https://github.com/alisaitteke/npm-mcp.git
cd npm-mcp
# 安装依赖
npm install
# 编译 TypeScript
npm run build
编译成功后,可执行文件位于 bin/npm-registry-mcp.js。
资料来源:CONTRIBUTING.md:5-12
方式三:二进制执行权限设置
源码安装后需要赋予执行权限:
chmod +x bin/npm-registry-mcp.js
项目结构
npm-mcp/
├── src/
│ ├── index.ts # MCP 服务器主入口
│ ├── registry-client.ts # NPM API 客户端(包含缓存、重试、限流)
│ ├── types.ts # TypeScript 类型定义
│ └── tools/
│ ├── search-packages.ts # 包搜索工具
│ ├── package-details.ts # 包详情工具
│ ├── security-audit.ts # 安全审计工具
│ ├── version-compatibility.ts # 版本兼容性检查
│ ├── quality-analysis.ts # 质量分析工具
│ └── npx-command.ts # npx 命令分析
├── test/ # Vitest 测试用例
├── bin/
│ └── npm-registry-mcp.js # npx 入口点
├── server.json # MCP 注册表元数据
└── package.json
资料来源:DEVELOPMENT.md:15-32
MCP 服务器配置
MCP 客户端集成
npm-mcp 作为 MCP 服务器运行,需要在 MCP 客户端(如 Cursor、Claude Desktop)中配置。以下是典型的配置文件结构:
{
"mcpServers": {
"npm-registry": {
"command": "npx",
"args": ["npm-registry-mcp"]
}
}
}
资源配置(AI 自动化)
MCP 资源是被动加载的——当 MCP 连接时自动加载,无需额外设置。资源文件定义在 src/index.ts 中:
| 资源类型 | 用途 | 自动行为 |
|---|---|---|
| 安全规则 | 定义包安装前必须检查 | 自动触发安全审计 |
| 包信息 | 提供包元数据标准格式 | 返回包详细信息 |
| 质量标准 | 定义包质量评估规则 | 支持质量分析 |
资料来源:AUTOMATIC.md:95-110
客户端配置
注册表客户端参数
RegistryClient 是核心组件,负责与 npm 注册表 API 通信:
// src/registry-client.ts 中的默认配置
const DEFAULT_CONFIG = {
maxConcurrent: 10, // 最大并发请求数
cacheTTL: 5 * 60 * 1000, // 缓存 TTL: 5分钟
retryAttempts: 3, // 重试次数
retryDelay: 1000, // 重试延迟基数(指数退避)
};
请求限流机制
graph TD
A[发起请求] --> B{并发数 < 10?}
B -->|是| C[执行请求]
B -->|否| D[等待队列]
D --> C
C --> E{响应状态}
E -->|200| F[返回结果]
E -->|429| G[指数退避等待]
G --> C
E -->|5xx| H[重试]
H -->|attempt < 3| C
H -->|attempt >= 3| I[返回错误]- 并发限制:最多 10 个并发请求
- 429 处理:收到速率限制响应时自动指数退避
- 缓存:包元数据、下载统计、GitHub 数据缓存 5 分钟
资料来源:DEVELOPMENT.md:34-38
缓存管理
内部缓存可通过以下方式清除:
client.clearCache();
可用脚本命令
| 命令 | 描述 | 用途 |
|---|---|---|
npm run build | 编译 TypeScript 到 dist/ | 生产构建 |
npm test | 运行 Vitest 测试 | 单元测试 |
npm run test:coverage | 生成覆盖率报告 | 测试覆盖率检查 |
npm run typecheck | TypeScript 类型检查 | 类型验证 |
npm run dev | 监听模式构建 | 开发调试 |
资料来源:DEVELOPMENT.md:6-13
AI 平台配置
Cursor 配置
在 ~/.cursor/.cursorrules(全局规则文件)中添加:
# Global NPM Safety Rules
For ANY project with package.json:
- Before suggesting npm install: use npm-registry-mcp audit_security
- On package.json edit: scan new dependencies
- On npx mention: use npm-registry-mcp analyze_npx_command
- Auto-suggest updates for vulnerable packages
资料来源:AI_USAGE.md:80-90
Claude Desktop 配置
Claude Desktop 用户可在对话中自然提及需求:
"Can you check if express is safe to install?"
→ AI 自动使用 check_before_install 提示
"Find me a good date library"
→ AI 自动使用 find_package 提示
常见问题排查
服务器无法启动
按以下顺序排查:
``bash node --version ``
- 检查 Node.js 版本:确保 >= 18.0.0
``bash rm -rf node_modules package-lock.json npm install npm run build ``
- 重新编译:删除 node_modules 和 lock 文件后重新安装
``bash chmod +x bin/npm-registry-mcp.js ``
- 检查二进制权限:
资料来源:DEVELOPMENT.md:52-62
GitHub API 速率限制
质量分析使用 GitHub API,未认证限制为 60 请求/小时。若部分包分析失败属正常现象。
解决方案:
- 使用 GitHub Personal Access Token 配置更高限制
- 等待速率限制重置(约 1 小时)
测试失败
完整的测试环境重置步骤:
rm -rf node_modules package-lock.json
npm install
npm run build
npm test
资料来源:DEVELOPMENT.md:62-68
环境变量配置
可选环境变量
| 变量名 | 默认值 | 说明 |
|---|---|---|
NPM_REGISTRY_URL | https://registry.npmjs.org | npm 注册表地址 |
GITHUB_TOKEN | 无 | GitHub API Token(提高速率限制) |
NODE_ENV | development | 运行环境 |
配置示例
# 设置 GitHub Token 提高 API 限制
export GITHUB_TOKEN=ghp_xxxxxxxxxxxx
# 使用私有注册表
export NPM_REGISTRY_URL=https://registry.mycompany.com
# 生产环境运行
export NODE_ENV=production
验证安装
安装完成后可通过以下方式验证:
# 检查 MCP 服务器是否正常运行
npx npm-registry-mcp --version
# 或通过 MCP 客户端测试工具调用
# 使用 search_packages 查询一个包
扩展配置
添加自定义工具
```typescript // src/tools/my-tool.ts import { z } from 'zod'; import { RegistryClient } from '../registry-client.js';
- 在
src/tools/目录下创建新的工具文件:
export const MyToolSchema = z.object({ param: z.string(), });
export async function myTool(params, client: RegistryClient) { // 实现逻辑 } ```
- 在
src/index.ts中注册工具:
- 在
ListToolsRequestSchema中列出工具 - 在
CallToolRequestSchema中调用处理器
- 添加测试用例:
test/<name>.test.ts
资料来源:DEVELOPMENT.md:70-80
相关文档
资料来源:DEVELOPMENT.md:1-5
快速入门
本页面为 @alisaitteke/npm-mcp 项目的快速入门指南,帮助开发者快速了解项目的安装配置、核心工具使用方法以及常见工作流程。通过本指南,您将能够在 5 分钟内完成环境搭建并开始使用 NPM 注册表 MCP 服务器进行包管理和安全审计。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
概述
npm-mcp 是一个基于 MCP(Model Context Protocol)协议的服务器实现,专门用于与 NPM 注册表进行交互。该项目为 AI 助手(如 Cursor、Claude Desktop)提供了原生的 NPM 包管理能力,使其能够在代码生成过程中自动执行安全检查、依赖分析和包搜索等操作,而无需依赖外部网络搜索。资料来源:AI_USAGE.md:1-15
核心价值
该项目解决了 AI 编程助手在依赖管理方面的关键痛点。传统方式下,AI 助手在生成代码时可能使用过时版本或存在安全漏洞的包,而 npm-mcp 通过在服务端集成 NPM 注册表 API,使得 AI 能够自动验证包的版本安全性、兼容性以及质量指标。资料来源:AUTOMATIC.md:1-20
环境要求与安装
系统要求
| 要求项 | 最低版本 | 说明 |
|---|---|---|
| Node.js | 18.0.0+ | 需要原生 fetch 支持 |
| npm/yarn/pnpm | 最新稳定版 | 包管理器 |
| AI 客户端 | 支持 MCP 的版本 | Cursor、Claude Desktop 等 |
资料来源:DEVELOPMENT.md:1-10
安装步骤
# 克隆项目仓库
git clone https://github.com/alisaitteke/npm-mcp.git
cd npm-mcp
# 安装项目依赖
npm install
# 构建项目
npm run build
安装完成后,可通过以下方式运行服务器:
# 直接运行(需要 Node.js 18+)
node bin/npm-registry-mcp.js
# 或使用 npx
npx @alisaitteke/npm-mcp
资料来源:CONTRIBUTING.md:1-15
在 AI 客户端中配置
不同 AI 客户端的配置方式略有差异,但核心都是将 MCP 服务器路径添加到配置文件中。
Cursor 配置示例
在 ~/.cursor/mcp.json 或项目 .cursor/mcp.json 中添加:
{
"mcpServers": {
"npm-registry-mcp": {
"command": "node",
"args": ["/path/to/npm-mcp/bin/npm-registry-mcp.js"]
}
}
}
Claude Desktop 配置示例
在 ~/Library/Application Support/Claude/claude_desktop_config.json 中添加相同配置。
资料来源:AI_USAGE.md:80-95
核心工具快速参考
npm-mcp 提供了多个 MCP 工具,每个工具专注于特定的功能领域。以下是核心工具的快速参考表:
| 工具名称 | 功能描述 | 主要输入参数 |
|---|---|---|
search_packages | 搜索 NPM 包 | query(搜索关键词) |
get_package_details | 获取包详细信息 | packageName、version(可选) |
audit_security | 安全漏洞审计 | packageName、version(可选) |
check_compatibility | 检查依赖兼容性 | packageName、version、projectDeps |
analyze_capabilities | 分析包能力特性 | packageName、version(可选) |
analyze_npx_command | 分析 npx 命令 | command、args(可选)、timeout(可选) |
资料来源:PROMPTS.md:1-50
安全审计工具详解
audit_security 是使用频率最高的工具之一,用于检查 NPM 包是否存在已知的安全漏洞:
// 调用示例
audit_security({
packageName: "express",
version: "4.18.2" // 可选,不提供则检查最新版本
})
返回结果示例
{
"success": true,
"package": "express",
"version": "4.18.2",
"vulnerabilities": {
"critical": 0,
"high": 0,
"medium": 0,
"low": 0
},
"recommendation": "✅ No known vulnerabilities. Safe to install."
}
资料来源:AI_USAGE.md:30-60
包搜索工具详解
search_packages 允许通过关键词搜索 NPM 注册表中的包:
// 搜索 TypeScript 相关的 HTTP 客户端库
search_packages({
query: "typescript http client"
})
搜索结果按相关性排序,包含包的下载量、维护状态和质量评分等关键信息。
资料来源:PRODUCTIVITY.md:1-30
基础使用示例
工作流程一:安装前安全检查
在推荐任何包安装之前,AI 助手应自动执行安全检查流程:
graph TD
A[用户请求安装包] --> B{调用 audit_security}
B --> C{发现漏洞?}
C -->|是| D[显示安全警告]
D --> E[推荐安全版本]
C -->|否| F{调用 check_compatibility}
F --> G{兼容?}
G -->|是| H[✅ 允许安装]
G -->|否| I[⚠️ 显示兼容问题]
H --> J[提供安装命令]
I --> J该工作流程确保每个包安装都经过安全和兼容性验证。资料来源:AI_USAGE.md:20-35
工作流程二:查找替代包
当用户询问某个包的替代方案时,AI 应自动搜索并比较:
// 用户问:有没有比 lodash 更轻量的替代品?
find_similar_packages({ packageName: "lodash" })
// 返回类似包列表,包含:
// - date-fns(日期处理)
// - lodash-es(ESM 版本)
// - nanoid(ID 生成)
工作流程三:批量审计项目依赖
当用户提供 package.json 或项目路径时,AI 应自动审计所有依赖:
// 自动触发场景
用户: "帮我检查项目依赖安全性"
用户: "audit_project"
用户: "npm install typescript" // 隐式触发
// AI 自动执行:
1. 提取 package.json 中的 dependencies
2. 对每个包调用 audit_security(并行执行)
3. 生成漏洞报告表格
4. 提供更新命令
资料来源:AUTOMATIC.md:40-70
常用工作流
自动触发机制
npm-mcp 设计了智能的自动触发机制,AI 助手无需显式调用工具即可自动执行安全检查。以下是触发规则表:
| 用户输入关键词 | 自动调用的工具 | 执行目的 |
|---|---|---|
| "install X", "add X" | audit_security + check_compatibility | 安装前验证 |
| "which package", "best library" | search_packages | 包搜索 |
| "npx create-..." | analyze_npx_command | 命令验证 |
| 提及包名 | get_package_details | 显示包信息 |
| "update X", "upgrade X" | compare_versions + audit_security | 更新检查 |
| 粘贴 package.json | audit_security(所有依赖) | 批量审计 |
资料来源:AI_USAGE.md:100-120
智能提示词(Prompts)
项目提供了预定义的 MCP Prompts,可以作为 AI 助手的快捷命令使用:
#### /check_before_install
安装前的完整安全检查,执行流程如下:
- 运行
audit_security检查漏洞 - 获取
package_details验证维护状态 - 检查
compatibility兼容性 - 显示清晰的 ✅/⚠️ 推荐结果
使用示例
/check_before_install express
典型响应
✅ [email protected] is safe to install
Security: No known vulnerabilities
Compatibility: ✅ No peer dependency conflicts
Maintenance: Active (last update: 2 days ago)
Install: npm install [email protected]
资料来源:PROMPTS.md:10-40
#### /find_package
根据用例查找并比较包:
/find_package state management
/find_package date library
/find_package testing framework
执行流程
- 搜索 NPM 注册表
- 获取前 3 名结果
- 检查每个包的安全性和质量
- 推荐最佳选项
资料来源:PROMPTS.md:45-70
#### /audit_project
批量审计项目所有依赖:
/audit_project
典型输出
🔍 Auditing 25 dependencies...
⚠️ 2 packages need updates:
1. [email protected] → 4.17.21
- Issue: Open redirect
- Fix: npm install [email protected]
2. [email protected] → 2.29.4
- Issue: Path traversal
- Fix: npm install [email protected]
Total: 25 packages, 2 need updates
资料来源:PROMPTS.md:75-95
响应模板
为保持输出的一致性,建议使用以下模板:
安全响应模板
✅ {packageName}@{version} is safe to install
Security: No vulnerabilities
Compatibility: ✅ Compatible with your dependencies
Quality: {score}/100 ({downloads} weekly downloads)
Install:
npm install {packageName}@{version}
警告响应模板
⚠️ SECURITY WARNING: {packageName}@{version} has {count} vulnerabilities
Severity: {severity}
Issue: {description}
Safe version: {safeVersion}
Recommended:
npm install {packageName}@{safeVersion}
资料来源:AI_USAGE.md:130-160
故障排查
常见问题与解决方案
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 服务器无法启动 | Node.js 版本过低 | 确认 Node.js >= 18.0.0:node --version |
| 服务器无法启动 | 缺少构建产物 | 重新构建:npm run build |
| 服务器无法启动 | bin 文件无执行权限 | 赋予权限:chmod +x bin/npm-registry-mcp.js |
| GitHub API 请求失败 | 触发速率限制 | 等待或使用认证 Token(60 req/h 限制) |
| 搜索结果为空 | NPM 注册表超时 | 检查网络连接,重试请求 |
资料来源:DEVELOPMENT.md:35-50
测试与调试
如果遇到功能异常,可通过以下步骤进行调试:
# 清除缓存重新安装
rm -rf node_modules package-lock.json
npm install
# 重新构建
npm run build
# 运行测试套件
npm test
# 检查 TypeScript 类型
npm run typecheck
缓存与请求限制
项目内置了以下优化机制:
- 缓存策略:包元数据、下载统计、GitHub 数据缓存 5 分钟
- 并发限制:最大 10 个并发请求
- 429 处理:遇到速率限制时自动指数退避重试
如需清除内部缓存,可调用 client.clearCache() 方法。资料来源:DEVELOPMENT.md:20-25
相关资源
| 资源类型 | 说明 | 链接 |
|---|---|---|
| GitHub 仓库 | 项目主仓库 | alisaitteke/npm-mcp |
| AI 使用指南 | AI 助手的自动化触发配置 | AI_USAGE.md |
| 提示词参考 | MCP Prompts 完整说明 | PROMPTS.md |
| 自动执行 | 自主代理的自动检查机制 | AUTOMATIC.md |
| 生产力工具 | 组合工作流和比较工具 | PRODUCTIVITY.md |
| 开发指南 | 项目架构和工具添加方法 | DEVELOPMENT.md |
| 贡献指南 | PR 流程和代码规范 | CONTRIBUTING.md |
| 能力分析 | 包能力特性分析工具详解 | CAPABILITIES.md |
资料来源:DEVELOPMENT.md:1-10
系统架构
npm-mcp 是一个基于 Model Context Protocol (MCP) 的 npm 注册表服务工具集,为 AI 助手提供与 npm 注册表交互的能力。该项目使 AI 能够安全地查询、审计和分析 npm 包,无需直接访问外部网络或执行危险的安装命令。 资料来源:DEVELOPMENT.md
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
概述
npm-mcp 是一个基于 Model Context Protocol (MCP) 的 npm 注册表服务工具集,为 AI 助手提供与 npm 注册表交互的能力。该项目使 AI 能够安全地查询、审计和分析 npm 包,无需直接访问外部网络或执行危险的安装命令。 资料来源:DEVELOPMENT.md
项目采用 TypeScript 开发,要求 Node.js 18 及以上版本,利用原生 fetch API 进行网络请求。架构设计遵循模块化原则,每个功能作为独立的工具实现,便于维护和扩展。 资料来源:DEVELOPMENT.md:1-15
核心架构组件
组件概览
| 组件 | 文件路径 | 职责描述 |
|---|---|---|
| MCP 服务器入口 | src/index.ts | 处理 MCP 协议请求,路由工具调用 |
| 注册表客户端 | src/registry-client.ts | 与 npm API 通信,实现缓存和限流 |
| 类型定义 | src/types.ts | 共享 TypeScript 类型定义 |
| 工具模块 | src/tools/*.ts | 各功能工具的具体实现 |
系统架构图
graph TD
A[AI 助手] -->|MCP Protocol| B[MCP Server<br/>src/index.ts]
B --> C[Tool Router<br/>CallToolRequestSchema]
C --> D[search-packages<br/>包搜索]
C --> E[package-details<br/>包详情]
C --> F[security-audit<br/>安全审计]
C --> G[version-compatibility<br/>版本兼容性]
C --> H[quality-analysis<br/>质量分析]
C --> I[npx-command<br/>NPX 命令]
C --> J[analyze_capabilities<br/>能力分析]
C --> K[find_similar_packages<br/>相似包查找]
C --> L[compare_packages<br/>包对比]
C --> M[generate_quick_start<br/>快速入门代码]
D --> N[Registry Client<br/>registry-client.ts]
E --> N
F --> N
G --> N
H --> N
I --> N
J --> N
K --> N
L --> N
M --> N
N -->|HTTP| O[npm Registry API]
N -->|HTTP| P[GitHub API]
N --> Q[Cache Layer<br/>LRU Cache<br/>5min TTL]
N --> R[Rate Limiter<br/>Max 10 concurrent]注册表客户端架构
RegistryClient 是整个系统的核心网络层,负责所有与外部 API 的通信。它实现了缓存机制、并发限制和指数退避策略,确保在高并发场景下的稳定性。 资料来源:DEVELOPMENT.md:18-20
客户端配置参数
| 参数 | 默认值 | 说明 |
|---|---|---|
| 并发限制 | 10 | 最大同时进行的 HTTP 请求数 |
| 缓存 TTL | 5 分钟 | 包元数据、下载统计的缓存过期时间 |
| 429 处理 | 指数退避 | 遇到速率限制时自动重试 |
| 重试策略 | 指数退避 | 请求失败时逐步增加等待时间 |
资料来源:DEVELOPMENT.md:18-20
缓存机制
注册表客户端使用 LRU(最近最少使用)缓存策略,缓存内容包括包元数据、下载统计和 GitHub 信息。缓存可通过 client.clearCache() 方法手动清除。 资料来源:DEVELOPMENT.md:22-23
sequenceDiagram
participant Client as RegistryClient
participant Cache as LRU Cache
participant API as npm Registry API
Client->>Cache: 检查缓存
alt 缓存命中
Cache-->>Client: 返回缓存数据
else 缓存未命中
Client->>API: 请求数据
API-->>Client: 返回数据
Client->>Cache: 存储数据 (TTL: 5min)
end速率限制处理
graph LR
A[请求发送] --> B{响应状态}
B -->|200 OK| C[返回数据]
B -->|429 Too Many Requests| D[指数退避等待]
D --> E[重试请求]
E --> B
B -->|其他错误| F[返回错误信息]工具模块架构
工具列表与分类
| 工具名称 | 输入参数 | 功能描述 |
|---|---|---|
search_packages | query, size? | 搜索 npm 注册表中的包 |
get_package_details | packageName, version? | 获取包详细信息 |
audit_security | packageName, version? | 安全漏洞审计 |
check_compatibility | packageName, version?, existingDependencies? | 检查版本兼容性 |
compare_versions | packageName, fromVersion, toVersion | 版本对比分析 |
quality_analysis | packageName | 包质量评分分析 |
analyze_npx_command | command, args?, timeout? | NPX 命令分析 |
analyze_capabilities | packageName, version? | 包能力分析 |
find_similar_packages | packageName | 查找相似包 |
compare_packages | packages[] | 多包对比 |
generate_quick_start | packageName, version?, framework? | 生成快速入门代码 |
资料来源:DEVELOPMENT.md:25-31
工具实现模式
每个工具遵循统一的实现模式,使用 Zod 进行输入验证,并通过 RegistryClient 与 npm API 交互。
graph TD
A[工具入口] --> B[Zod Schema 验证]
B --> C{验证结果}
C -->|失败| D[返回错误 JSON]
C -->|成功| E[RegistryClient 调用]
E --> F{npm API 响应}
F -->|成功| G[数据处理]
F -->|失败| H[错误处理]
G --> I[返回成功 JSON]
H --> J[返回错误 JSON]#### 示例:包详情工具
// 资料来源:src/tools/package-details.ts
import { z } from 'zod';
import { RegistryClient } from '../registry-client.js';
// Zod 输入验证 Schema
export const PackageDetailsSchema = z.object({
packageName: z.string(),
version: z.string().optional(),
});
// 工具处理函数
export async function getPackageDetails(
params: z.infer<typeof PackageDetailsSchema>,
client: RegistryClient
): Promise<string> {
const validated = PackageDetailsSchema.parse(params);
// 实现逻辑...
}
#### 示例:版本兼容性检查
// 资料来源:src/tools/version-compatibility.ts
export async function checkCompatibility(
params: z.infer<typeof CompatibilitySchema>,
client: RegistryClient
): Promise<string> {
const validated = CompatibilitySchema.parse(params);
const result = {
success: true,
compatible: isCompatible,
analysis: {
peerDependencies: {
total: Object.keys(peerDeps).length,
compatible: compatible.length,
conflicts: conflicts.length,
missing: missing.length,
}
},
recommendation: isCompatible
? 'Package is compatible...'
: 'Compatibility issues detected...'
};
return JSON.stringify(result, null, 2);
}
数据模型
包详情响应结构
interface PackageDetailsResponse {
success: boolean;
package: {
name: string;
version: string;
description: string;
isLatest: boolean;
deprecated: string | null;
};
metadata: {
license: string;
author: object;
maintainers: object[];
keywords: string[];
homepage: string;
repository: object;
bugs: object;
};
versions: {
latest: string;
tags: object;
total: number;
recent: string[];
deprecatedVersions: Array<{ version: string; message: string }>;
};
dependencies: {
dependencies: object;
devDependencies: object;
peerDependencies: object;
optionalDependencies: object;
};
dist: {
tarball: string;
shasum: string;
integrity: string;
fileCount: number;
unpackedSize: string;
};
timestamps: {
created: string;
modified: string;
versionPublished: string;
};
stats: {
weeklyDownloads: string;
period: string;
};
}
资料来源:src/tools/package-details.ts:1-50
兼容性检查响应结构
interface CompatibilityResponse {
success: boolean;
package: string;
version: string;
compatible: boolean;
analysis: {
peerDependencies: {
total: number;
compatible: number;
conflicts: number;
missing: number;
};
details: {
compatible: Array<{ package: string; required: string; installed: string }>;
conflicts: Array<{ package: string; required: string; installed: string; neededBy: string }>;
missing: Array<{ package: string; required: string }>;
};
};
recommendation: string;
suggestedActions: string[];
}
资料来源:src/tools/version-compatibility.ts:60-90
MCP 协议集成
请求处理流程
graph TD
A[MCP Request] --> B[ListToolsRequestSchema]
A --> C[CallToolRequestSchema]
B --> D[返回工具列表]
D --> E[工具名称、描述、参数 Schema]
C --> F{工具名称匹配}
F -->|search_packages| G[调用搜索工具]
F -->|get_package_details| H[调用详情工具]
F -->|audit_security| I[调用安全审计]
F -->|check_compatibility| J[调用兼容性检查]
F -->|其他| K[调用对应工具]
G --> L[RegistryClient]
H --> L
I --> L
J --> L
K --> L
L --> M[JSON 响应]
M --> N[MCP Response]工具注册机制
在 src/index.ts 中,所有工具需要在两个 schema 中注册:
- ListToolsRequestSchema:声明工具列表、描述和输入参数
- CallToolRequestSchema:路由工具调用到具体处理函数
// 资料来源:src/index.ts (架构示意)
const tools = [
{ name: 'search_packages', schema: SearchPackagesSchema, handler: searchPackages },
{ name: 'get_package_details', schema: PackageDetailsSchema, handler: getPackageDetails },
// ... 其他工具
];
错误处理机制
统一错误响应格式
所有工具使用一致的错误响应格式,便于 AI 助手解析和处理:
{
"success": false,
"error": "错误信息描述",
"packageName": "包名称(如适用)",
"version": "版本号(如适用)"
}
资料来源:src/tools/package-details.ts:80-90
错误处理流程
graph TD
A[执行工具函数] --> B{捕获异常}
B -->|无异常| C[返回成功 JSON]
B -->|有异常| D{异常类型}
D -->|Zod 验证错误| E[返回验证错误信息]
D -->|Registry 错误| F[返回 API 错误信息]
D -->|其他异常| G[返回未知错误信息]
E --> H[错误 JSON 响应]
F --> H
G --> H扩展架构
添加新工具的流程
graph LR
A[创建工具文件] -->|src/tools/<name>.ts| B[定义 Zod Schema]
B --> C[实现工具函数]
C --> D[注册到 index.ts]
D --> E[添加工具测试]
E --> F[test/<name>.test.ts]新工具模板
// 资料来源:CONTRIBUTING.md:80-95
import { z } from 'zod';
import { RegistryClient } from '../registry-client.js';
// 1. 定义 Zod Schema
export const MyToolSchema = z.object({
param: z.string(),
});
// 2. 实现工具函数
export async function myTool(
params: z.infer<typeof MyToolSchema>,
client: RegistryClient
): Promise<string> {
const validated = MyToolSchema.parse(params);
// 实现逻辑
return JSON.stringify({ success: true });
}
在服务器中注册
// 资料来源:CONTRIBUTING.md:97-105
// src/index.ts
import { myTool } from './tools/my-tool.js';
// 添加到 ListToolsRequestSchema handler
// 添加到 CallToolRequestSchema handler
项目目录结构
npm-mcp/
├── src/
│ ├── index.ts # MCP 服务器入口
│ ├── registry-client.ts # npm API 客户端
│ ├── types.ts # TypeScript 类型定义
│ └── tools/
│ ├── search-packages.ts # 包搜索
│ ├── package-details.ts # 包详情
│ ├── security-audit.ts # 安全审计
│ ├── version-compatibility.ts # 版本兼容性
│ ├── quality-analysis.ts # 质量分析
│ ├── npx-command.ts # NPX 命令
│ ├── analyze_capabilities.ts # 能力分析
│ ├── find_similar_packages.ts # 相似包查找
│ ├── compare_packages.ts # 包对比
│ └── quick-start.ts # 快速入门代码
├── test/ # Vitest 测试
├── bin/
│ └── npm-registry-mcp.js # npx 入口点
├── server.json # MCP 注册表元数据
├── package.json
├── DEVELOPMENT.md
└── CONTRIBUTING.md
技术栈
| 层级 | 技术 | 说明 |
|---|---|---|
| 语言 | TypeScript | 类型安全的 JavaScript 超集 |
| 运行时 | Node.js 18+ | 原生 fetch API 支持 |
| 协议 | MCP | Model Context Protocol |
| 验证 | Zod | Schema 验证和数据转换 |
| 测试 | Vitest | 单元测试框架 |
| 包管理 | npm | 包依赖管理 |
资料来源:DEVELOPMENT.md:12-15
参见
数据管理与缓存
本文档详细介绍了 npm-mcp 项目中的数据管理与缓存机制,包括注册表客户端架构、缓存策略、并发控制以及错误处理等核心组件。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
概述
npm-mcp 作为 MCP(Model Context Protocol)服务器,需要频繁与 npm 注册表 API 进行交互以获取包信息、版本数据、安全审计结果等。为了提高性能并减少对外部 API 的依赖,项目实现了一套完整的数据管理与缓存系统。
核心设计目标:
- 减少重复的网络请求,提高响应速度
- 防止 API 限流,通过智能缓存和请求控制
- 确保数据一致性,在缓存过期时自动刷新
- 提供可观测性,便于调试和监控
资料来源:DEVELOPMENT.md:1-15
架构设计
整体架构图
graph TD
A[工具层 Tools] --> B[注册表客户端 RegistryClient]
B --> C[缓存层 LRU Cache]
B --> D[并发控制器 Semaphore]
B --> E[重试机制 Retry Logic]
D --> F[NPM Registry API]
D --> G[Bundlephobia API]
D --> H[GitHub API]
C --> I{数据可用?}
I -->|是| J[返回缓存数据]
I -->|否| F
F --> C核心组件
| 组件名称 | 功能描述 | 实现位置 |
|---|---|---|
RegistryClient | 统一的 npm API 客户端 | src/registry-client.ts |
LRUCache | 最近最少使用缓存 | src/registry-client.ts |
Semaphore | 并发数量控制器 | src/registry-client.ts |
RetryHandler | 指数退避重试逻辑 | src/registry-client.ts |
资料来源:DEVELOPMENT.md:20-25
缓存策略
缓存类型与 TTL
npm-mcp 采用多种缓存策略以平衡数据新鲜度和性能:
graph LR
A[请求进来] --> B{缓存中存在?}
B -->|是,未过期| C[返回缓存数据]
B -->|否或已过期| D[发起新请求]
D --> E[更新缓存]
E --> C#### 缓存数据分类
| 数据类型 | TTL(生存时间) | 说明 |
|---|---|---|
| 包元数据 (Packument) | 5 分钟 | 包含版本列表、发布时间等 |
| 下载统计数据 | 5 分钟 | 每周下载量等指标 |
| GitHub 信息 | 5 分钟 | GitHub stars、issues 等 |
| 安全审计结果 | 5 分钟 | 漏洞信息 |
| 版本兼容性数据 | 5 分钟 | peerDependencies 分析结果 |
资料来源:DEVELOPMENT.md:28-30
LRU 缓存实现
缓存模块采用 LRU(Least Recently Used,最近最少使用)策略,当缓存达到容量上限时,自动清除最久未使用的数据项。
缓存工作流程:
sequenceDiagram
participant Client as 客户端
participant Cache as LRU 缓存
participant API as npm API
Client->>Cache: 请求数据
Cache->>Cache: 检查缓存键
alt 缓存命中且未过期
Cache-->>Client: 返回缓存数据
else 缓存未命中或已过期
Cache->>API: 获取新数据
API-->>Cache: 返回数据
Cache->>Cache: 更新缓存
Cache-->>Client: 返回数据
end缓存清除机制
虽然缓存是自动管理的,但在某些场景下可能需要手动清除缓存。项目提供了内部方法 client.clearCache() 用于清除所有缓存数据。
资料来源:DEVELOPMENT.md:30
并发控制
信号量机制
为了防止对 npm API 的过度请求,npm-mcp 使用信号量(Semaphore)模式限制并发请求数量。
关键参数:
| 参数 | 值 | 说明 |
|---|---|---|
| 最大并发数 | 10 | 同时最多发起 10 个请求 |
| 等待队列 | 无限制 | 超出并发的请求排队等待 |
资料来源:DEVELOPMENT.md:26
并发控制流程
graph TD
A[发起请求] --> B{有可用信号量?}
B -->|是| C[获取信号量]
B -->|否| D[等待释放]
D --> B
C --> E[发起 HTTP 请求]
E --> F[请求完成]
F --> G[释放信号量]
G --> H[返回响应]请求合并策略
当多个工具同时请求相同数据时,缓存机制确保每个请求只触发一次外部 API 调用。后续请求直接从缓存获取数据,有效减少了 API 调用次数。
错误处理与重试机制
限流响应处理
当 npm API 返回 429 (Too Many Requests) 状态码时,系统采用指数退避(Exponential Backoff)策略进行重试。
重试策略参数:
| 参数 | 说明 |
|---|---|
| 初始延迟 | 1 秒 |
| 最大延迟 | 可配置上限 |
| 退避系数 | 2(每次重试延迟翻倍) |
| 最大重试次数 | 3-5 次(根据端点) |
指数退避流程:
graph TD
A[请求失败 429] --> B{重试次数 < 最大?}
B -->|是| C[计算延迟时间]
C --> D[延迟 = 初始延迟 × 2^重试次数]
D --> E[等待延迟]
E --> F[重新发起请求]
F --> G{成功?}
G -->|是| H[返回数据]
G -->|否| B
B -->|否| I[抛出错误]资料来源:DEVELOPMENT.md:26
其他错误处理
| 错误类型 | 处理方式 |
|---|---|
| 404 Not Found | 返回友好的错误消息,包不存在或版本不存在 |
| 500 Server Error | 自动重试 3 次,仍失败则返回错误 |
| 网络超时 | 重试机制处理,配置超时时间 |
| 无效响应 | 解析失败时返回结构化错误信息 |
API 客户端实现
RegistryClient 类
RegistryClient 是整个数据获取层的核心类,封装了所有与外部 API 的交互逻辑。
主要方法:
| 方法名 | 功能描述 |
|---|---|
getPackageMetadata() | 获取包元数据(packument) |
getPackageVersion() | 获取特定版本信息 |
getDownloadStats() | 获取下载统计数据 |
getSecurityAudit() | 获取安全审计结果 |
getGithubInfo() | 获取 GitHub 仓库信息 |
clearCache() | 清除所有缓存数据 |
请求验证
所有请求参数都经过 Zod 模式验证,确保:
- 包名称格式正确
- 版本号符合 semver 规范
- 参数类型正确
验证示例(package-details.ts):
export const PackageDetailsSchema = z.object({
packageName: z.string().min(1, "Package name is required"),
version: z.string().optional(),
});
资料来源:src/tools/package-details.ts
数据模型
包详情数据结构
工具返回的结构化数据包含以下关键字段:
| 字段路径 | 类型 | 说明 |
|---|---|---|
success | boolean | 请求是否成功 |
package.name | string | 包名称 |
package.version | string | 版本号 |
package.deprecated | boolean/string | 是否废弃 |
metadata.license | string | 许可证类型 |
metadata.maintainers | array | 维护者列表 |
versions.total | number | 版本总数 |
dependencies | object | 依赖关系映射 |
dist.tarball | string | tarball 下载地址 |
dist.integrity | string | 完整性校验值 |
stats.weeklyDownloads | string | 周下载量 |
资料来源:src/tools/package-details.ts:80-120
版本兼容性数据结构
{
"success": true,
"package": "react",
"version": "18.2.0",
"compatible": true,
"analysis": {
"peerDependencies": {
"total": 1,
"compatible": 1,
"conflicts": 0,
"missing": 0
},
"details": {
"compatible": [...],
"conflicts": [],
"missing": []
}
},
"recommendation": "Package is compatible with existing dependencies. Safe to install.",
"suggestedActions": []
}
资料来源:src/tools/version-compatibility.ts
性能优化实践
批量请求优化
当需要检查多个包的安全性或兼容性时,系统可以并行发起多个请求,充分利用并发控制机制。
// 并行检查多个包
const results = await Promise.all([
client.getSecurityAudit("lodash"),
client.getSecurityAudit("express"),
client.getSecurityAudit("axios"),
]);
缓存预热
对于已知需要频繁访问的数据,可以实现缓存预热策略,在用户请求前主动获取并缓存数据。
请求去重
当多个请求同时发起且目标相同时,第一个请求会实际调用 API,其他请求等待结果并共享缓存数据。
常见问题与排查
服务器启动失败
| 检查项 | 解决方法 |
|---|---|
| Node.js 版本 | 确保 Node 18+:node --version |
| 构建文件 | 重新构建:npm run build |
| 执行权限 | 赋予执行权限:chmod +x bin/npm-registry-mcp.js |
资料来源:DEVELOPMENT.md:40-45
GitHub API 限流
质量分析功能依赖 GitHub API,未认证请求限额为 60 次/小时。
现象: 部分包的质量分析可能失败
解决方案: 这是设计行为,部分包的质量数据可能暂时不可用
资料来源:DEVELOPMENT.md:46-49
测试失败
rm -rf node_modules package-lock.json
npm install
npm run build
npm test
资料来源:DEVELOPMENT.md:50-54
缓存相关问题
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 返回过期数据 | 缓存 TTL 未到 | 等待 5 分钟或重启服务 |
| 缓存未命中 | 首次请求或缓存被清除 | 正常行为,系统会自动获取 |
项目结构参考
npm-mcp/
├── src/
│ ├── index.ts # MCP 服务器入口
│ ├── registry-client.ts # npm API 客户端(核心)
│ ├── types.ts # TypeScript 类型定义
│ └── tools/
│ ├── search-packages.ts
│ ├── package-details.ts
│ ├── security-audit.ts
│ ├── version-compatibility.ts
│ ├── quality-analysis.ts
│ └── npx-command.ts
├── test/ # Vitest 测试
├── bin/npm-registry-mcp.js # npx 入口点
└── package.json
资料来源:DEVELOPMENT.md:12-24
扩展开发
添加新的数据源
- 在
src/registry-client.ts中添加新的 API 方法 - 实现缓存和重试逻辑
- 在对应工具文件中调用新方法
自定义缓存策略
如需修改缓存 TTL 或容量,可以调整 RegistryClient 构造函数参数:
const client = new RegistryClient({
cacheTTL: 5 * 60 * 1000, // 5 分钟
maxConcurrent: 10,
maxRetries: 3,
});
相关文档
资料来源:DEVELOPMENT.md:1-15
工具模块参考
本页面详细说明 npm-mcp 项目中所有可用的 MCP 工具模块,包括各工具的功能、输入输出参数、使用方式及架构设计。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
1. 工具模块概述
npm-mcp 是一个基于 Model Context Protocol (MCP) 的 npm 注册表服务工具集,为 AI 助手提供与 npm registry 交互的能力。所有工具均位于 src/tools/ 目录下,采用统一的架构模式实现。
1.1 工具列表
| 工具名称 | 文件路径 | 主要功能 |
|---|---|---|
search_packages | search-packages.ts | 搜索 npm 包 |
package_details | package-details.ts | 获取包详细信息 |
security_audit | security-audit.ts | 安全漏洞审计 |
check_compatibility | version-compatibility.ts | 依赖兼容性检查 |
quality_analysis | quality-analysis.ts | 包质量分析 |
analyze_npx_command | npx-command.ts | NPX 命令分析 |
generate_quick_start | quick-start.ts | 生成快速开始代码 |
1.2 架构设计
工具模块采用分层架构,确保代码的可维护性和可扩展性:
graph TD
A[用户请求] --> B[MCP Server<br/>index.ts]
B --> C[工具调度器<br/>CallToolRequestSchema]
C --> D1[search_packages]
C --> D2[package_details]
C --> D3[security_audit]
C --> D4[check_compatibility]
C --> D5[quality_analysis]
C --> D6[generate_quick_start]
D1 --> E[Registry Client<br/>registry-client.ts]
D2 --> E
D3 --> E
D4 --> E
D5 --> E
D6 --> E
E --> F[NPM Registry API]
E --> G[GitHub API]
E --> H[Bundlephobia API]1.3 通用模式
每个工具模块遵循统一的实现模式:
- 输入验证:使用 Zod 定义输入 schema
- 参数验证:验证和规范化输入参数
- 业务逻辑:调用 Registry Client 执行实际请求
- 结果处理:格式化返回 JSON 结果
- 错误处理:捕获异常并返回友好的错误信息
// 标准工具模块结构
import { z } from 'zod';
import { RegistryClient } from '../registry-client.js';
export const ToolSchema = z.object({
param1: z.string(),
param2: z.number().optional(),
});
export async function toolHandler(
params: z.infer<typeof ToolSchema>,
client: RegistryClient
): Promise<string> {
try {
const validated = ToolSchema.parse(params);
// 业务逻辑
return JSON.stringify(result, null, 2);
} catch (error) {
return JSON.stringify({
success: false,
error: error instanceof Error ? error.message : 'Unknown error',
});
}
}
资料来源:CONTRIBUTING.md
2. search_packages 工具
search_packages 工具提供 npm 包的搜索功能,允许用户通过关键词查找相关包。
2.1 输入参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| query | string | 是 | 搜索关键词 |
| size | number | 否 | 返回结果数量,默认 10 |
2.2 输出结构
{
"query": "search term",
"count": 5,
"results": [
{
"name": "package-name",
"version": "1.0.0",
"description": "Package description",
"maintainers": ["maintainer1"],
"date": "2024-01-01",
"links": {
"npm": "https://www.npmjs.com/package/name",
"homepage": "https://example.com",
"repository": "https://github.com/user/repo"
},
"flags": {
"deprecated": false
},
"score": {
"final": 0.95
},
"searchScore": 10000
}
]
}
2.3 使用示例
// 搜索 React 状态管理库
search_packages({
query: "react state management",
size: 5
})
资料来源:src/tools/search-packages.ts
3. package_details 工具
package_details 工具提供 npm 包的完整元数据信息,包括版本、依赖、维护者等详细信息。
3.1 输入参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| packageName | string | 是 | npm 包名称 |
| version | string | 否 | 指定版本,默认为最新版本 |
3.2 输出结构
{
"success": true,
"package": {
"name": "package-name",
"version": "1.0.0",
"description": "...",
"isLatest": true,
"deprecated": false
},
"metadata": {
"license": "MIT",
"author": "Author Name",
"maintainers": [...],
"keywords": [...],
"homepage": "...",
"repository": {...},
"bugs": {...}
},
"versions": {
"latest": "1.0.0",
"tags": { "latest": "1.0.0", "next": "2.0.0" },
"total": 25,
"recent": ["1.0.0", "0.9.0"],
"deprecatedVersions": []
},
"dependencies": {
"dependencies": {},
"devDependencies": {},
"peerDependencies": {},
"optionalDependencies": {}
},
"dist": {
"tarball": "...",
"shasum": "...",
"integrity": "...",
"fileCount": 15,
"unpackedSize": "125.34 KB"
},
"timestamps": {
"created": "...",
"modified": "...",
"versionPublished": "..."
},
"stats": {
"weeklyDownloads": "1,250,000",
"period": "2024-01-01 to 2024-01-08"
}
}
3.3 核心功能
该工具从多个数据源聚合信息:
graph LR
A[package_details 请求] --> B[获取 Packument]
B --> C[获取版本数据]
C --> D[获取下载统计]
D --> E[聚合输出]资料来源:src/tools/package-details.ts
4. check_compatibility 工具
check_compatibility 工具验证包与现有依赖的兼容性,特别是检查 peer dependencies。
4.1 输入参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| packageName | string | 是 | 要检查的包名称 |
| version | string | 否 | 指定版本 |
| peerDependencies | object | 否 | 项目现有的 peer 依赖 |
4.2 输出结构
{
"success": true,
"package": "package-name",
"version": "1.0.0",
"compatible": true,
"analysis": {
"peerDependencies": {
"total": 3,
"compatible": 3,
"conflicts": 0,
"missing": 0
},
"details": {
"compatible": ["[email protected]", "[email protected]"],
"conflicts": [],
"missing": []
}
},
"recommendation": "Package is compatible with existing dependencies. Safe to install.",
"suggestedActions": []
}
4.3 兼容性判断逻辑
flowchart TD
A[获取包的 peerDependencies] --> B{是否为空}
B -->|是| C[返回兼容]
B -->|否| D[检查每个 peer dep]
D --> E{版本是否匹配}
E -->|是| F[标记为兼容]
E -->|否| G{版本范围重叠}
G -->|是| H[标记为兼容]
G -->|否| I[标记为冲突]
F --> J{所有检查完成}
H --> J
I --> J
J --> K{存在冲突?}
K -->|否| L[返回 compatible: true]
K -->|是| M[返回 compatible: false]工具通过 semver 范围比较来判断兼容性,支持 caret (^)、tilde (~) 和精确版本等格式。
资料来源:src/tools/version-compatibility.ts
5. generate_quick_start 工具
generate_quick_start 工具根据包信息自动生成快速开始代码示例,支持多种框架和场景。
5.1 输入参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| packageName | string | 是 | npm 包名称 |
| framework | string | 否 | 框架类型(react, vue, express, fastify 等) |
| language | string | 否 | 编程语言,默认 typescript |
5.2 支持的框架类型
| 框架 | 生成内容 |
|---|---|
| react | React 组件示例 |
| vue | Vue 组件示例 |
| express | Express API 路由 |
| fastify | Fastify API 路由 |
| node | 通用 Node.js 示例 |
| browser | 浏览器使用示例 |
5.3 输出结构
{
"packageName": "package-name",
"description": "Framework description",
"language": "typescript",
"code": "export const usage = 'example code...'"
}
5.4 代码生成示例
// Express 框架生成示例
generate_quick_start({
packageName: "express",
framework: "express"
})
// 输出:
// import express from 'express';
// const app = express();
// app.use(express.json());
// app.get('/api/users', (req, res) => {...});
工具自动检测包的类型和导出结构,选择最合适的代码模板进行生成。
6. 工具注册与调度
6.1 注册流程
工具需要在 src/index.ts 中进行注册才能被 MCP 协议识别:
sequenceDiagram
participant MCP as MCP Server
participant Index as index.ts
participant Tool as Tool Module
MCP->>Index: ListToolsRequestSchema
Index->>Index: 加载所有工具定义
Index-->>MCP: 返回工具列表
MCP->>Index: CallToolRequestSchema
Index->>Tool: 调用工具函数
Tool-->>Index: 返回结果
Index-->>MCP: 返回格式化结果6.2 添加新工具
添加新工具需要三个步骤:
- 创建工具文件:
src/tools/<tool-name>.ts - 注册工具:在
src/index.ts的ListToolsRequestSchema中添加 - 实现调度:在
CallToolRequestSchema中添加处理逻辑
// 步骤1: src/tools/my-tool.ts
import { z } from 'zod';
import { RegistryClient } from '../registry-client.js';
export const MyToolSchema = z.object({
param: z.string(),
});
export async function myTool(
params: z.infer<typeof MyToolSchema>,
client: RegistryClient
): Promise<string> {
// 实现逻辑
}
// 步骤2 & 3: src/index.ts
import { myTool, MyToolSchema } from './tools/my-tool.js';
// 在 ListToolsRequestSchema 中注册
tools: [
{
name: 'my_tool',
description: '工具描述',
inputSchema: MyToolSchema,
},
]
// 在 CallToolRequestSchema 中调度
case 'my_tool':
return await myTool(args, registryClient);
资料来源:DEVELOPMENT.md
7. Registry Client 架构
Registry Client 是所有工具的底层依赖,提供统一的 API 调用能力。
7.1 核心功能
| 功能 | 配置 | 说明 |
|---|---|---|
| 并发限制 | 10 | 最多同时 10 个请求 |
| 缓存 | LRU, 5分钟 | 自动缓存响应 |
| 重试 | 指数退避 | 429 错误时自动重试 |
| 超时 | 30秒 | 请求超时设置 |
7.2 缓存策略
graph TD
A[请求] --> B{缓存中存在?}
B -->|是| C{缓存有效?}
B -->|否| D[发起请求]
C -->|是| E[返回缓存]
C -->|否| D
D --> F{请求成功?}
D --> G[更新缓存]
F -->|否| H[指数退避重试]
G --> I[返回数据]
H --> D
E --> I7.3 内部方法
class RegistryClient {
// 缓存管理
clearCache(): void;
// 基础请求
async fetchPackument(packageName: string): Promise<Packument>;
async fetchVersion(packageName: string, version: string): Promise<PackageVersion>;
async getDownloadStats(packageName: string): Promise<DownloadStats>;
}
资料来源:DEVELOPMENT.md
8. 输入验证
8.1 Zod Schema 模式
所有工具使用 Zod 进行输入验证,确保类型安全:
// 必填字符串
z.string()
// 可选参数
z.string().optional()
// 带默认值的可选
z.number().default(10)
// 枚举类型
z.enum(['react', 'vue', 'angular'])
// 对象验证
z.object({
name: z.string(),
age: z.number().positive(),
})
8.2 验证流程
flowchart TD
A[接收参数] --> B[Zod Schema.parse]
B --> C{验证通过?}
C -->|是| D[执行工具逻辑]
C -->|否| E[抛出 ZodError]
E --> F[捕获并返回错误 JSON]
D --> G[返回成功结果]8.3 错误处理
export async function toolHandler(params: any, client: RegistryClient): Promise<string> {
try {
const validated = ToolSchema.parse(params);
// 业务逻辑
return JSON.stringify(result, null, 2);
} catch (error) {
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
return JSON.stringify({
success: false,
error: errorMessage,
});
}
}
资料来源:CONTRIBUTING.md
9. 工具组合使用
9.1 推荐工作流
graph TD
A[安装新包前] --> B[audit_security]
A --> C[check_compatibility]
A --> D[package_details]
B --> E{是否有漏洞?}
C --> F{是否兼容?}
D --> G[查看维护状态]
E -->|是| H[建议更新版本]
E -->|否| I[继续]
F -->|是| I
F -->|否| J[解决冲突]
G --> K[检查是否活跃]
K --> L[最终决策]
H --> L
J --> L
I --> L
L --> M[执行安装]9.2 典型场景组合
| 场景 | 工具组合 |
|---|---|
| 安装前检查 | audit_security + check_compatibility + package_details |
| 选择最佳包 | search_packages + compare_packages + quality_analysis |
| 版本升级 | compare_versions + audit_security |
| 项目审计 | audit_project + 批量 audit_security |
9.3 代码示例
// 完整的安装前检查
async function checkBeforeInstall(packageName) {
const security = await audit_security(packageName);
const details = await package_details(packageName);
const compat = await check_compatibility(packageName);
return {
canInstall: security.success && compat.compatible,
securityIssues: security.issues,
compatibilityIssues: compat.analysis,
packageInfo: details
};
}
资料来源:CAPABILITIES.md
10. 测试工具模块
10.1 测试框架
项目使用 Vitest 作为测试框架,每个工具应有对应的测试文件:
test/
├── search-packages.test.ts
├── package-details.test.ts
├── version-compatibility.test.ts
└── ...
10.2 测试示例
import { describe, it, expect } from 'vitest';
import { toolHandler, ToolSchema } from '../src/tools/my-tool';
describe('my-tool', () => {
it('should validate input correctly', () => {
const validInput = { param: 'test' };
const result = ToolSchema.safeParse(validInput);
expect(result.success).toBe(true);
});
it('should handle invalid input gracefully', async () => {
const invalidInput = { param: 123 }; // 应该是 string
const result = await toolHandler(invalidInput, mockClient);
const parsed = JSON.parse(result);
expect(parsed.success).toBe(false);
});
});
10.3 运行测试
# 运行所有测试
npm test
# 运行带覆盖率的测试
npm run test:coverage
# 类型检查
npm run typecheck
资料来源:CONTRIBUTING.md
11. 常见问题
11.1 服务器无法启动
问题:执行 npx npm-registry-mcp 无响应
解决方案:
``bash node --version ``
- 检查 Node.js 版本(需要 18+):
``bash npm run build ``
- 重新构建项目:
``bash chmod +x bin/npm-registry-mcp.js ``
- 检查可执行权限:
11.2 GitHub 速率限制
问题:质量分析工具返回错误
原因:GitHub API 未认证限制为 60 请求/小时
解决方案:某些包的 GitHub 信息可能暂时不可用,属正常现象
11.3 测试失败
解决方案:
rm -rf node_modules package-lock.json
npm install
npm run build
npm test
资料来源:DEVELOPMENT.md
12. 参考链接
资料来源:CONTRIBUTING.md
安全审计功能
安全审计功能是 npm-mcp 的核心功能之一,提供对 npm 包的安全漏洞检测和分析能力。该功能通过调用 npm 官方安全 API 接口,获取包的安全信息,并在 AI 助手中实现自动化的安全检查工作流。安全审计功能与其他工具(如版本兼容性检查、能力分析)协同工作,为开发者提供全面的包安装安全建议。资料来源:[AIUSAGE.md]()
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
概述
安全审计功能是 npm-mcp 的核心功能之一,提供对 npm 包的安全漏洞检测和分析能力。该功能通过调用 npm 官方安全 API 接口,获取包的安全信息,并在 AI 助手中实现自动化的安全检查工作流。安全审计功能与其他工具(如版本兼容性检查、能力分析)协同工作,为开发者提供全面的包安装安全建议。资料来源:AI_USAGE.md
核心功能模块
1. 单包安全审计 (`audit_security`)
单包安全审计是最基础的安全检查功能,用于检测指定 npm 包是否存在已知安全漏洞。资料来源:src/tools/security-audit.ts
主要功能:
- 检查包是否存在已知安全漏洞
- 获取漏洞的详细描述信息
- 提供安全版本建议
- 支持指定具体版本或范围的审计
使用场景:
- 在安装任何新包之前进行安全检查
- 检查现有依赖包的安全性
- 在 AI 对话中自动触发(当用户提及包名时)
// 基础调用示例
audit_security({
packageName: "lodash",
version?: "4.17.20" // 可选,指定版本
})
2. 项目级安全审计 (`audit_project`)
项目级安全审计用于扫描整个项目的 package.json 文件,审计所有依赖项的安全性。资料来源:PROMPTS.md
工作流程:
- 读取项目的 package.json 文件
- 提取所有依赖项(dependencies、devDependencies)
- 对每个依赖项执行并行安全检查
- 汇总结果并提供修复建议
{
"dependencies": {
"express": "4.18.2",
"axios": "1.6.0",
"lodash": "4.17.21"
}
}
// 审计报告格式
{
"total": 3,
"safe": 2,
"vulnerable": 1,
"results": [
{ "name": "express", "status": "safe" },
{ "name": "axios", "status": "safe" },
{ "name": "lodash", "status": "vulnerable", "severity": "high" }
]
}
3. 安装前检查 (`check_before_install`)
这是一个组合型检查工作流,在推荐安装任何包之前自动执行全面的安全和兼容性检查。资料来源:PROMPTS.md
检查步骤:
- 执行
audit_security检查漏洞 - 获取
package_details验证维护状态 - 检查
compatibility与现有依赖的兼容性 - 显示清晰的 ✅/⚠️ 推荐结果
响应格式:
✅ [email protected] is safe to install
Security: No known vulnerabilities
Compatibility: ✅ No peer dependency conflicts
Maintenance: Active (last update: 2 days ago)
Install: npm install [email protected]
架构设计
组件关系图
graph TD
A[用户/AI 助手] --> B[audit_security 工具]
A --> C[audit_project 工具]
A --> D[check_before_install 提示词]
B --> E[NPM Registry API]
C --> E
D --> B
D --> F[package_details 工具]
D --> G[compatibility 工具]
E --> H[安全漏洞数据]
F --> E
G --> E
H --> I[安全报告]
I --> A安全审计数据流
sequenceDiagram
participant U as 用户/AI
participant MCP as MCP Server
participant API as NPM Registry API
participant DB as 缓存层
U->>MCP: audit_security("lodash")
MCP->>DB: 检查缓存
DB-->>MCP: Cache Miss
MCP->>API: GET /-/vuln/npm/{package}
API-->>MCP: 漏洞数据
MCP->>DB: 存入缓存 (5min TTL)
MCP-->>U: 安全报告
Note over U,MCP: 后续请求从缓存获取输出数据结构
安全审计响应格式
{
"success": true,
"package": "lodash",
"version": "4.17.20",
"vulnerabilities": [
{
"id": "SNYK-JS-LODASH-567746",
"severity": "high",
"title": "Prototype Pollution",
"url": "https://www.npmjs.com/advisories/1673",
"fixVersion": "4.17.21"
}
],
"summary": {
"total": 1,
"critical": 0,
"high": 1,
"medium": 0,
"low": 0
},
"recommendation": "⚠️ 1 vulnerability found. Safe version: 4.17.21"
}
漏洞严重等级说明
| 等级 | 说明 | 建议操作 |
|---|---|---|
| critical | 严重漏洞,需要立即处理 | 必须更新到安全版本 |
| high | 高危漏洞,可能影响系统安全 | 建议尽快更新 |
| medium | 中危漏洞,需要关注 | 考虑在近期更新 |
| low | 低危漏洞,影响较小 | 可在下次维护时处理 |
缓存与限流机制
安全审计功能复用项目统一的缓存和限流机制。资料来源:DEVELOPMENT.md
缓存策略
- TTL: 5 分钟
- 适用数据: 包的安全漏洞信息、下载统计、GitHub 数据
- 缓存清理:
client.clearCache()方法(内部调用)
并发限制
| 参数 | 值 | 说明 |
|---|---|---|
| 最大并发数 | 10 | 同时处理的最大请求数 |
| 429 响应处理 | 指数退避 | 遇到速率限制时自动重试 |
与其他工具的集成
集成关系图
graph LR
A[security-audit] --> B[package-details]
A --> C[version-compatibility]
A --> D[analyze_capabilities]
A --> E[compare_packages]
B -->|获取维护状态| F[响应数据]
C -->|检查兼容性| G[响应数据]
D -->|分析能力| H[响应数据]
E -->|对比评分| I[响应数据]组合工作流示例
场景:用户询问是否安全安装 axios
graph LR
A["用户: 安装 axios 安全吗?"] --> B["audit_security"]
B --> C{"发现漏洞?"}
C -->|是| D["显示漏洞详情"]
C -->|否| E["check_compatibility"]
E --> F{"冲突?"}
F -->|是| G["显示冲突信息"]
F -->|否| H["✅ 建议安装"]
D --> I["建议安全版本"]
I --> J["npm install axios@版本号"]
G --> J
H --> J自动触发机制
安全审计功能支持在 AI 助手中的自动触发,无需用户显式调用。资料来源:AI_USAGE.md
触发关键词
| 触发条件 | 示例 | 自动执行 |
|---|---|---|
| 安装命令 | "install X", "add X" | audit_security + check_compatibility |
| 包名提及 | "express", "lodash" | audit_security |
| 更新命令 | "update X", "upgrade X" | audit_security + compare_versions |
| package.json 粘贴 | 修改依赖 | audit_security(所有依赖) |
AI 响应模板
安全包响应:
✅ [email protected] is safe to install
Security: No vulnerabilities
Compatibility: ✅ Compatible with your dependencies
Quality: 95/100 (11M weekly downloads)
Install:
npm install [email protected]
危险包响应:
⚠️ SECURITY WARNING: [email protected] has 2 vulnerabilities
Severity: High
Issue: Prototype pollution
Safe version: [email protected]
Recommended:
npm install [email protected]
错误处理
安全审计功能实现了完善的错误处理机制。资料来源:src/tools/security-audit.ts
常见错误类型
| 错误类型 | 原因 | 处理方式 |
|---|---|---|
| 网络错误 | 无法连接 NPM Registry | 返回友好错误信息,建议重试 |
| 包不存在 | 包名拼写错误 | 提示检查包名 |
| API 限流 | 请求频率过高 | 自动重试(指数退避) |
| 无漏洞数据 | 包不在漏洞库中 | 返回"无已知漏洞"状态 |
错误响应格式
{
"success": false,
"error": "Package not found: invalid-package-name",
"packageName": "invalid-package-name",
"suggestion": "Please check the package name and try again"
}
扩展工具集成
安全审计功能可以与其他生产力工具协同使用,提供更全面的分析。资料来源:PRODUCTIVITY.md
与包比较工具结合
graph TD
A["用户: axios vs node-fetch"] --> B["compare_packages"]
B --> C["axios 安全性分析"]
B --> D["node-fetch 安全性分析"]
C --> E["安全对比报告"]
D --> E
E --> F["推荐: axios"]与包体分析工具结合
// 组合使用示例
{
"bundle_size": {
"name": "moment",
"gzip": "232 KB",
"warning": "⚠️ Large bundle + No tree-shaking"
},
"security": {
"vulnerabilities": 0,
"status": "✅ No known vulnerabilities"
},
"recommendation": "Consider date-fns (14KB) as alternative"
}
常见问题与解决方案
问题 1:GitHub 速率限制
原因:质量分析功能使用 GitHub API,未认证请求限制为 60 次/小时。资料来源:DEVELOPMENT.md
解决方案:
- 等待速率限制重置
- 使用缓存数据
- 减少不必要的请求
问题 2:缓存数据过期
原因:安全漏洞数据库持续更新,缓存数据可能有 5 分钟延迟。
解决方案:
- 调用
client.clearCache()清除缓存 - 等待缓存自然过期
- 使用
forceRefresh参数(如果支持)
问题 3:测试失败
解决方案:资料来源:DEVELOPMENT.md
rm -rf node_modules package-lock.json
npm install
npm run build
npm test
使用建议
最佳实践
- 始终先检查安全:在任何安装建议之前自动执行安全审计
- 保持主动:不要等待用户询问"这个包安全吗?"
- 批量操作:并行检查多个包以提高效率
- 清晰警告:使用 ⚠️ 🔒 ✅ 等表情符号提高可见性
- 提供可执行命令:始终提供安全的安装命令
开发建议
在开发 npm-mcp 扩展时,遵循以下原则添加安全审计功能:资料来源:CONTRIBUTING.md
- 遵循项目结构:在
src/tools/目录下创建工具文件 - 使用 Zod 验证:输入参数使用 Zod schema 验证
- 返回 JSON 字符串:工具返回 JSON 格式字符串
- 错误处理:捕获异常并返回友好的错误信息
- 添加测试:在
test/目录下为新功能编写测试
相关文档
来源:https://github.com/alisaitteke/npm-mcp / 项目说明书
包比较与分析
包比较与分析是 npm-mcp 项目的核心功能模块之一,旨在帮助开发者在选择和使用 npm 包时做出明智的决策。该模块提供了全面的包分析能力,包括包兼容性检查、质量评估、依赖分析、安全审计以及多包对比等功能。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
概述
包比较与分析是 npm-mcp 项目的核心功能模块之一,旨在帮助开发者在选择和使用 npm 包时做出明智的决策。该模块提供了全面的包分析能力,包括包兼容性检查、质量评估、依赖分析、安全审计以及多包对比等功能。
npm-mcp 通过整合 NPM Registry API、Bundlephobia API 和 GitHub API 等多个数据源,为开发者提供了一站式的包分析解决方案。这些工具可以独立使用,也可以组合形成完整的工作流程,帮助开发者在项目开发过程中快速评估和比较不同的 npm 包。
资料来源:PRODUCTIVITY.md
核心工具架构
工具分类
npm-mcp 的包比较与分析功能由多个专业工具组成,每个工具专注于特定的分析维度。
| 工具名称 | 功能描述 | 数据来源 |
|---|---|---|
package_details | 获取包完整信息 | NPM Registry |
version_compatibility | 检查版本兼容性 | NPM Registry |
quality_analysis | 质量评分分析 | NPM + GitHub |
analyze_capabilities | 模块系统分析 | NPM Registry |
compare_packages | 多包对比 | 多个 API |
analyze_bundle_size | 打包体积分析 | Bundlephobia |
find_similar_packages | 查找相似包 | NPM Registry |
资料来源:DEVELOPMENT.md
架构流程图
graph TD
A[用户请求] --> B{分析类型}
B -->|单包分析| C[package_details]
B -->|兼容性检查| D[version_compatibility]
B -->|质量评估| E[quality_analysis]
B -->|能力分析| F[analyze_capabilities]
B -->|多包对比| G[compare_packages]
B -->|体积分析| H[analyze_bundle_size]
B -->|相似包查找| I[find_similar_packages]
C --> J[NPM Registry API]
D --> J
E --> K[GitHub API]
F --> J
G --> J
G --> H
G --> K
H --> L[Bundlephobia API]
I --> J
J --> M[结果聚合]
K --> M
L --> M
M --> N[统一输出格式]包详情分析
功能概述
package_details 工具提供单个包的完整元数据信息,包括版本信息、依赖关系、分发信息、维护状态等。该工具是所有其他分析工具的基础,为进一步的分析提供数据支撑。
资料来源:src/tools/package-details.ts
输出数据结构
{
"success": true,
"package": {
"name": "包名称",
"version": "版本号",
"description": "包描述",
"isLatest": true
},
"metadata": {
"license": "许可证类型",
"author": "作者信息",
"maintainers": ["维护者列表"],
"keywords": ["关键词"],
"homepage": "主页地址",
"repository": "仓库地址",
"bugs": "问题追踪地址"
},
"versions": {
"latest": "最新版本",
"tags": {"latest": "4.18.2", "next": "5.0.0"},
"total": 版本总数,
"recent": ["最近版本列表"],
"deprecatedVersions": [{"version": "v1.0.0", "message": "deprecated"}]
},
"dependencies": {
"dependencies": {},
"devDependencies": {},
"peerDependencies": {},
"optionalDependencies": {}
},
"dist": {
"tarball": "下载链接",
"shasum": "校验和",
"integrity": "完整性哈希",
"fileCount": "文件数量",
"unpackedSize": "解压后大小"
},
"timestamps": {
"created": "创建时间",
"modified": "修改时间",
"versionPublished": "版本发布时间"
},
"stats": {
"weeklyDownloads": "周下载量",
"period": "统计周期"
}
}
资料来源:src/tools/package-details.ts
关键字段说明
| 字段路径 | 类型 | 说明 |
|---|---|---|
package.isLatest | boolean | 是否为最新版本 |
versions.deprecatedVersions | array | 已被废弃的版本列表 |
dependencies.peerDependencies | object | 对等依赖关系 |
dist.unpackedSize | string | 解压后的文件大小 |
stats.weeklyDownloads | string | 周下载量(本地化格式) |
版本兼容性检查
功能概述
version_compatibility 工具用于检查目标包的版本与当前项目依赖之间的兼容性。该工具特别关注对等依赖(peer dependencies)的匹配情况,帮助开发者识别可能出现的版本冲突。
资料来源:src/tools/version-compatibility.ts
兼容性分析流程
graph TD
A[输入: 包名 + 版本] --> B[获取包元数据]
B --> C[提取 peerDependencies]
D[获取项目现有依赖] --> E{逐一比对版本}
E --> F{检查冲突}
F -->|有冲突| G[记录冲突详情]
F -->|无冲突| H{检查缺失}
H -->|有缺失| I[记录缺失依赖]
H -->|无缺失| J[兼容性通过]
G --> K[生成建议]
I --> K
J --> L[返回成功结果]
K --> M[返回问题报告]输出结构
{
"success": true,
"package": "包名称",
"version": "版本号",
"compatible": false,
"analysis": {
"peerDependencies": {
"total": 5,
"compatible": 3,
"conflicts": 1,
"missing": 1
},
"details": {
"compatible": [
{"package": "react@^18.0.0", "status": "compatible"}
],
"conflicts": [
{"package": "lodash@^4.0.0", "required": "^5.0.0", "installed": "^4.17.21"}
],
"missing": [
{"package": "moment@required", "required": "^2.29.0"}
]
}
},
"recommendation": "兼容性存在冲突",
"suggestedActions": [
"更新冲突的依赖到兼容版本",
"安装缺失的对等依赖"
]
}
资料来源:src/tools/version-compatibility.ts
兼容性判断逻辑
工具通过以下步骤判断兼容性:
- 冲突检测:检查已安装的依赖版本是否满足对等依赖的版本要求
- 缺失检测:识别项目中缺失但被目标包要求的对等依赖
- 建议生成:根据检测结果提供具体的修复建议
const isCompatible = conflicts.length === 0 && missing.length === 0;
资料来源:src/tools/version-compatibility.ts:47
包能力分析
模块系统分析
analyze_capabilities 工具深入分析包的技术特性,特别关注其模块系统支持情况。
资料来源:CAPABILITIES.md
#### 支持的模块类型
| 模块类型 | 说明 | 特征 |
|---|---|---|
| ESM | ES Modules | import/export 语法 |
| CommonJS | 传统模块系统 | require/module.exports |
| UMD | 通用模块定义 | 同时支持浏览器和服务端 |
| Dual Package | 双包支持 | 同时提供 ESM 和 CJS 版本 |
#### TypeScript 支持分析
工具会检测包是否包含 TypeScript 类型定义:
- 内置类型:包本身包含
.d.ts文件 - 类型包:需要安装独立的
@types/包 - TypeScript 编写的包:包使用 TypeScript 开发
{
"moduleSystem": {
"esm": true,
"commonjs": true,
"dualPackage": true,
"details": [
"Package type: 'module' (native ESM)",
"Dual package: ESM + CommonJS support"
]
},
"typescript": {
"hasTypes": true,
"typesLocation": "./dist/index.d.ts",
"isTypeScriptPackage": true
}
}
资料来源:CAPABILITIES.md
平台兼容性分析
工具还检测包对不同运行时的支持情况:
| 平台 | 标识 | 说明 |
|---|---|---|
| Node.js | node: true | 服务端 JavaScript 运行时 |
| Browser | browser: true | 浏览器环境 |
| Deno | deno: true | 现代 TypeScript 运行时 |
| Bun | bun: true | 快速全功能 JavaScript 运行时 |
| React | react: true | React 组件库 |
| React Native | react-native: true | 移动开发平台 |
{
"platform": {
"node": true,
"browser": true,
"deno": false,
"bun": false
},
"summary": "✅ Dual Package: ESM + CommonJS\n✅ Platforms: Node.js, Browser"
}
资料来源:CAPABILITIES.md
多包对比功能
功能概述
compare_packages 工具支持同时分析多个包,提供全面的对比视图,帮助开发者选择最适合项目需求的包。
资料来源:PRODUCTIVITY.md
对比维度
| 维度 | 分析内容 | 数据来源 |
|---|---|---|
| 模块系统 | ESM/CJS/Dual 支持 | NPM Registry |
| TypeScript | 类型定义情况 | NPM Registry |
| 流行度 | 周下载量 | NPM Registry |
| 维护状态 | 最后更新时间 | NPM Registry |
| 打包体积 | gzip 大小 | Bundlephobia |
示例输出
{
"comparison": {
"moduleSystem": {
"axios": { "summary": "Dual (ESM + CJS)" },
"node-fetch": { "summary": "ESM only" },
"undici": { "summary": "Dual (ESM + CJS)" }
},
"typescript": {
"axios": { "hasTypes": true },
"node-fetch": { "hasTypes": true },
"undici": { "hasTypes": true }
},
"popularity": {
"axios": { "weeklyDownloads": "45M", "relative": "Very popular" },
"node-fetch": { "weeklyDownloads": "32M", "relative": "Very popular" },
"undici": { "weeklyDownloads": "8M", "relative": "Popular" }
}
},
"recommendation": {
"winner": "undici",
"summary": "undici 得分最高,支持现代 ESM,体积小"
}
}
资料来源:PRODUCTIVITY.md
打包体积分析
功能概述
analyze_bundle_size 工具使用 Bundlephobia API 提供准确的包体积数据,帮助开发者评估包对最终打包体积的影响。
资料来源:PRODUCTIVITY.md
体积指标说明
| 指标 | 说明 | 用途 |
|---|---|---|
| Unpacked Size | 解压后磁盘占用 | 评估安装空间 |
| Minified Size | 压缩后大小 | 理论最小体积 |
| Gzipped Size | Gzip 压缩后大小 | 实际网络传输量 |
| Tree-shaking | 摇树优化支持 | 按需加载能力 |
输出结构
{
"sizes": {
"unpacked": "1.41 MB",
"minified": "531.48 KB",
"gzip": "94.17 KB"
},
"impact": {
"level": "Moderate",
"rating": "⚠️ Medium",
"description": "此包将增加约 94.17 KB 的 gzip 传输体积"
},
"treeshaking": {
"supported": false,
"description": "❌ CommonJS - 不支持摇树优化"
},
"recommendations": [
"⚠️ 较大的打包体积 - 考虑替代方案或代码分割",
"💡 包使用 CommonJS - 寻找 ESM 版本以获得更好的摇树支持",
"💡 考虑使用按方法导入的轻量级替代方案"
]
}
资料来源:PRODUCTIVITY.md
影响等级评估
| 等级 | Gzip 大小范围 | 建议 |
|---|---|---|
| Excellent | < 10 KB | 非常适合添加 |
| Good | 10-50 KB | 可接受 |
| Medium | 50-100 KB | 谨慎考虑 |
| Large | > 100 KB | 建议寻找替代方案 |
相似包查找
功能概述
find_similar_packages 工具根据包的关键词和用途查找相似的替代包,帮助开发者发现可能更优的选择。
资料来源:PRODUCTIVITY.md
工作流程
graph TD
A[输入: 包名称/关键词] --> B[获取目标包元数据]
B --> C[提取关键词和分类]
C --> D[搜索 NPM Registry]
D --> E{相关性评分}
E --> F[排序并过滤]
F --> G[补充其他包的详情]
G --> H[返回排名列表]
E -->|高相似度| I[主要推荐]
E -->|中相似度| J[备选推荐]
E -->|低相似度| K[相关参考]示例场景
当用户询问 "request" 包的替代方案时:
1. find_similar_packages("request")
2. 找到: axios, node-fetch, got, undici
3. audit_security 针对每个进行安全审计
4. 返回推荐结果:
"request 已废弃!以下是现代替代方案:
1. **axios** - 最受欢迎 (45M/周)
- ✅ 浏览器 + Node.js
- ✅ 拦截器、转换器
2. **got** - 功能丰富 (8M/周)
- ✅ 重试、缓存、钩子
- ✅ 现代 API
3. **undici** - 速度最快 (8M/周)
- ✅ Node.js 官方维护
- ✅ HTTP/1.1 keep-alive
推荐: axios 通用性强,undici 性能最佳"
资料来源:PRODUCTIVITY.md
NPX 命令分析
功能概述
analyze_npx_command 工具对 npx 命令进行安全分析,验证包的存在性、检查版本、分析依赖并提供安全建议。该工具不执行命令,只进行分析。
分析内容
| 检查项 | 说明 | 阈值 |
|---|---|---|
| 包存在性 | 验证包在 NPM Registry 中存在 | - |
| 版本验证 | 确认指定版本是否存在 | - |
| 可执行文件 | 检查包是否包含 bin 入口 | - |
| 体积检查 | 评估包解压后的大小 | > 10MB 警告 |
| 包龄检查 | 检查版本发布时间 | > 365 天警告 |
| 依赖数量 | 统计直接依赖数量 | > 50 警告 |
输出结构
{
"success": true,
"analysis": {
"package": "包名称",
"version": "版本号",
"command": "npx package-name@version",
"isLatest": true
},
"validation": {
"packageExists": true,
"versionExists": true,
"hasExecutable": true,
"sizeKB": 1234,
"dependencyCount": 12,
"publishedDaysAgo": 45
},
"metadata": {
"description": "包描述",
"license": "许可证",
"author": "作者",
"repository": "仓库地址"
},
"warnings": [
"⚠️ 包体积较大: 1234 KB",
"📦 包含 12 个依赖 - 请一并审查"
],
"recommendations": [
"🔒 执行前务必审查包内容",
"📝 检查包的口碑和维护者信任度"
],
"safeCommand": "npx package-name@version",
"note": "命令已分析但未执行。审查后手动执行。"
}
组合工作流程
完整包评估流程
graph TD
A[发现需求] --> B[搜索包]
B --> C[compare_packages]
C --> D{选择候选}
D --> E[analyze_bundle_size]
E --> F{体积可接受?}
F -->|是| G[audit_security]
F -->|否| H[查找替代]
H --> C
G --> I{安全通过?}
I -->|是| J[version_compatibility]
I -->|否| K[建议更新]
K --> L{有新版本?}
L -->|是| M[更新建议]
L -->|否| H
J --> N[最终推荐]
M --> N
style G fill:#90EE90
style N fill:#87CEEB
style H fill:#FFB6C1AI 自动执行流程
npm-mcp 设计为可供 AI 助手自动调用,以下是典型的工作流程:
用户: "express 和 koa 哪个更好?"
AI 自动执行:
1. compare_packages(["express", "koa"])
2. analyze_bundle_size("express")
3. analyze_bundle_size("koa")
4. audit_security("express")
5. audit_security("koa")
6. 返回对比结果
资料来源:AI_USAGE.md
使用建议
最佳实践
| 场景 | 推荐工具 | 目的 |
|---|---|---|
| 选择新包前 | compare_packages | 多维度对比 |
| 评估打包影响 | analyze_bundle_size | 避免大体积包 |
| 安装前检查 | audit_security + version_compatibility | 安全且兼容 |
| 查找替代品 | find_similar_packages | 发现更好的选择 |
| 验证 npx 命令 | analyze_npx_command | 安全执行 |
工具组合策略
- 开发阶段:使用
find_similar_packages发现最佳选择 - 评估阶段:使用
compare_packages进行多包对比 - 引入前:使用
audit_security+version_compatibility进行安全检查 - 上线前:使用
analyze_bundle_size评估打包影响
响应模板
当 AI 使用这些工具时,建议使用以下模板提供清晰的反馈:
✅ [email protected] 安全可安装
安全性: 无已知漏洞
兼容性: ✅ 与现有依赖无冲突
质量: 95/100 (周下载 1100 万)
安装命令:
npm install [email protected]
相关文档
| 文档 | 内容 |
|---|---|
| 安全性审计 | 详细的漏洞检测功能说明 |
| 版本管理 | 版本比较和升级策略 |
| 快速入门 | 基础使用指南 |
| 开发指南 | 项目架构和扩展方法 |
参见
资料来源:PRODUCTIVITY.md
开发指南
本开发指南面向希望为 @alisaitteke/npm-mcp 项目贡献代码或扩展功能的开发者。文档涵盖项目环境搭建、核心架构解析、工具开发流程以及测试规范,帮助开发者快速上手并有效地参与项目开发。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
项目概述
npm-mcp 是一个基于 Model Context Protocol (MCP) 的 npm 注册表服务器实现,为 AI 助手提供与 npm 注册表交互的工具集。该项目使 AI 能够在不离开对话环境的情况下执行包搜索、安全审计、版本兼容性检查等操作,显著提升开发工作流的效率。
项目采用 TypeScript 开发,运行于 Node.js 18+ 环境,充分利用原生 fetch API 与现代异步编程模式。核心架构围绕注册表客户端和 MCP 工具层展开,通过模块化设计实现各功能组件的独立性与可维护性。
环境搭建
前置条件
在开始开发之前,请确保本地环境满足以下要求:
| 要求项 | 最低版本 | 说明 |
|---|---|---|
| Node.js | 18.0.0 | 使用原生 fetch API |
| npm | 9.0.0 | 包管理工具 |
| Git | 2.30.0 | 版本控制 |
初始化步骤
# 克隆仓库
git clone https://github.com/alisaitteke/npm-mcp.git
cd npm-mcp
# 安装依赖
npm install
# 构建项目
npm run build
资料来源:DEVELOPMENT.md:1-10
验证安装
构建成功后,可通过以下命令验证环境配置正确:
# 运行测试套件
npm test
# 类型检查
npm run typecheck
项目结构
npm-mcp 采用清晰的目录结构组织代码,各模块职责分明,便于维护和扩展。
npm-mcp/
├── src/
│ ├── index.ts # MCP 服务器入口
│ ├── registry-client.ts # NPM API 客户端
│ ├── types.ts # TypeScript 类型定义
│ └── tools/
│ ├── search-packages.ts # 包搜索工具
│ ├── package-details.ts # 包详情工具
│ ├── security-audit.ts # 安全审计工具
│ ├── version-compatibility.ts # 版本兼容性工具
│ ├── quality-analysis.ts # 质量分析工具
│ └── npx-command.ts # npx 命令分析工具
├── test/ # Vitest 测试文件
├── bin/
│ └── npm-registry-mcp.js # npx 入口脚本
├── server.json # MCP 注册表元数据
└── package.json
资料来源:DEVELOPMENT.md:18-34
目录职责说明
| 目录/文件 | 职责 | 关键依赖 |
|---|---|---|
src/index.ts | MCP 服务器主入口,处理请求路由 | @modelcontextprotocol/sdk |
src/registry-client.ts | NPM 注册表 API 客户端,含缓存和限流 | lru-cache, p-limit |
src/types.ts | 共享类型定义 | TypeScript 内置 |
src/tools/*.ts | 各功能工具实现 | Zod 模式验证 |
test/ | 单元测试与集成测试 | Vitest |
核心架构
系统组件关系
graph TD
A[AI Assistant] --> B[MCP Client]
B --> C[index.ts - MCP Server]
C --> D[Tool Handlers]
D --> E[search-packages]
D --> F[package-details]
D --> G[security-audit]
D --> H[version-compatibility]
D --> I[quality-analysis]
D --> J[npx-command]
E --> K[Registry Client]
F --> K
G --> K
H --> K
I --> K
J --> K
K --> L[Cache Layer - LRU]
K --> M[Rate Limiter - 10 concurrent]
K --> N[NPM Registry API]
N --> O[Search API]
N --> P[Package Metadata]
N --> Q[Download Stats]注册表客户端架构
RegistryClient 是整个项目的核心模块,负责与 npm 注册表 API 的所有通信。该客户端实现了请求缓存、并发限制和指数退避重试机制,确保在高并发场景下的稳定性。
资料来源:src/registry-client.ts:1-50
#### 缓存机制
注册表客户端使用 LRU(最近最少使用)缓存策略,缓存内容包括包元数据、下载统计和 GitHub 信息。默认配置下,缓存有效期为 5 分钟。
this.cache = new LRUCache({
max: config.cacheMaxSize || 500,
ttl: config.cacheTTL || 5 * 60 * 1000, // 5 分钟
});
资料来源:src/registry-client.ts:30-33
#### 并发控制
系统限制最大并发请求数为 10,使用 p-limit 库实现。当遇到 429(请求过多)响应时,客户端自动执行指数退避重试策略。
| 参数 | 默认值 | 说明 |
|---|---|---|
maxConcurrent | 10 | 最大并发请求数 |
cacheTTL | 300000ms | 缓存有效期(5分钟) |
cacheMaxSize | 500 | 缓存条目上限 |
registryUrl | registry.npmjs.org | NPM 注册表地址 |
资料来源:src/registry-client.ts:35-38
#### 核心 API 方法
// 获取包元数据(packument)
async getPackage(packageName: string): Promise<Packument>
// 获取特定版本信息
async getPackageVersion(packageName: string, version: string): Promise<VersionData>
// 搜索包
async searchPackages(query: string, options?: { limit?: number; offset?: number }): Promise<SearchResponse>
// 获取下载统计
async getDownloadStats(packageName: string, period?: 'last-day' | 'last-week' | 'last-month'): Promise<DownloadStats>
资料来源:src/registry-client.ts:45-80
可用脚本
项目提供一组 npm 脚本用于日常开发流程。
| 命令 | 描述 |
|---|---|
npm run build | 编译 TypeScript 到 dist/ 目录 |
npm test | 运行测试套件 |
npm run test:coverage | 生成测试覆盖率报告 |
npm run typecheck | 执行 TypeScript 类型检查 |
npm run dev | 监听模式开发,自动重新构建 |
资料来源:DEVELOPMENT.md:10-16
MCP 工具开发
MCP 工具是项目的核心功能单元,每个工具对应一个独立的 TypeScript 模块。以下是现有工具及其功能说明。
现有工具列表
| 工具名称 | 功能描述 | 输入参数 |
|---|---|---|
search_packages | 搜索 npm 注册表中的包 | query, limit |
get_package_details | 获取包的详细信息 | packageName, version |
audit_security | 检查包的安全漏洞 | packageName, version |
check_compatibility | 检查版本兼容性 | packageName, targetVersion, installed |
analyze_capabilities | 分析包的模块系统能力 | packageName, version |
compare_versions | 比较两个版本 | packageName, fromVersion, toVersion |
analyze_npx_command | 分析 npx 命令 | command, args, timeout |
添加工具流程
#### 第一步:创建工具模块
在 src/tools/ 目录下创建新的工具文件,例如 src/tools/my-tool.ts。每个工具文件应包含 Zod 模式定义和异步处理函数。
import { z } from 'zod';
import { RegistryClient } from '../registry-client.js';
// 定义输入参数模式
export const MyToolSchema = z.object({
param: z.string(),
});
// 工具处理函数
export async function myTool(
params: z.infer<typeof MyToolSchema>,
client: RegistryClient
): Promise<string> {
// 验证输入参数
const validated = MyToolSchema.parse(params);
// 实现工具逻辑
// 使用 client 访问注册表 API
const packageData = await client.getPackage(validated.param);
// 返回 JSON 字符串结果
return JSON.stringify({ success: true, data: packageData }, null, 2);
}
#### 第二步:注册工具
在 src/index.ts 中,需要在两个位置添加新工具:
- 在
ListToolsRequestSchema处理器中列出工具定义 - 在
CallToolRequestSchema处理器中调用对应的处理函数
import { myTool } from './tools/my-tool.js';
// 在 ListTools 处理器中添加
case 'my-tool':
return {
description: '工具描述',
inputSchema: {
type: 'object',
properties: {
param: { type: 'string', description: '参数描述' }
}
}
};
// 在 CallTool 处理器中添加
case 'my-tool':
return await myTool(args, client);
#### 第三步:编写测试
在 test/ 目录下创建对应的测试文件 test/my-tool.test.ts。
import { describe, it, expect } from 'vitest';
import { MyToolSchema, myTool } from '../src/tools/my-tool.js';
describe('My Tool', () => {
it('应正确处理有效输入', async () => {
// 模拟 RegistryClient
const mockClient = {
getPackage: async () => ({ name: 'test', versions: {} })
};
const result = await myTool({ param: 'test' }, mockClient as any);
const parsed = JSON.parse(result);
expect(parsed.success).toBe(true);
});
it('应处理无效参数', async () => {
await expect(
MyToolSchema.parseAsync({})
).rejects.toThrow();
});
});
工具实现示例
包详情工具
package-details.ts 是项目中最复杂的工具之一,展示了如何聚合多个 API 调用的结果。
graph LR
A[输入: packageName, version] --> B[获取 packument]
B --> C[获取下载统计]
C --> D[聚合数据]
D --> E[返回详细信息]
F[packument.name] --> D
G[versionData.dependencies] --> D
H[downloadStats.weeklyDownloads] --> D资料来源:src/tools/package-details.ts:1-50
该工具返回的数据结构包含:
| 字段 | 类型 | 说明 | |
|---|---|---|---|
success | boolean | 请求是否成功 | |
package.name | string | 包名称 | |
package.version | string | 版本号 | |
package.deprecated | string \ | null | 弃用信息 |
metadata.license | string | 许可证类型 | |
metadata.maintainers | array | 维护者列表 | |
versions.latest | string | 最新版本 | |
versions.total | number | 版本总数 | |
dependencies.* | object | 各类依赖关系 | |
stats.weeklyDownloads | string | 周下载量 |
资料来源:src/tools/package-details.ts:60-100
版本兼容性工具
version-compatibility.ts 演示了如何分析 peer dependencies 的兼容性。
export async function checkCompatibility(
params: { packageName, targetVersion, installedPackages? },
client: RegistryClient
): Promise<string> {
// 获取目标包的 peer dependencies
const versionData = await client.getPackageVersion(packageName, targetVersion);
const peerDeps = versionData.peerDependencies || {};
// 分析兼容性
const compatible = [];
const conflicts = [];
const missing = [];
for (const [pkg, required] of Object.entries(peerDeps)) {
const installed = installedPackages?.[pkg];
if (!installed) {
missing.push({ package: pkg, required });
} else if (semver.satisfies(installed, required)) {
compatible.push({ package: pkg, installed, required });
} else {
conflicts.push({ package: pkg, installed, required });
}
}
return JSON.stringify({
success: true,
compatible: isCompatible,
analysis: { compatible, conflicts, missing }
}, null, 2);
}
资料来源:src/tools/version-compatibility.ts:1-60
代码规范
TypeScript 配置
项目使用 TypeScript 严格模式,建议编辑器配置以下检查:
{
"compilerOptions": {
"strict": true,
"esModuleInterop": true,
"moduleResolution": "node",
"target": "ES2022"
}
}
代码风格要点
| 规范 | 说明 |
|---|---|
| 类型定义 | 使用 interface 和 type 定义共享类型 |
| 输入验证 | 所有工具输入必须通过 Zod 模式验证 |
| 错误处理 | 使用 try-catch,返回结构化错误信息 |
| 异步模式 | 优先使用 async/await |
| 注释规范 | 公共 API 添加 JSDoc 注释 |
提交规范
项目遵循 Conventional Commits 规范,提交信息格式如下:
<type>: <description>
[optional body]
[optional footer]
常用 type 值:
| type | 使用场景 |
|---|---|
feat | 新功能 |
fix | 错误修复 |
docs | 文档更新 |
test | 测试相关 |
refactor | 代码重构 |
分支管理
| 分支前缀 | 用途 | 示例 |
|---|---|---|
feature/ | 新功能开发 | feature/search-filter |
fix/ | 错误修复 | fix/cache-invalidation |
docs/ | 文档更新 | docs/api-reference |
test/ | 测试相关 | test/coverage-improvement |
refactor/ | 代码重构 | refactor/client-abstraction |
测试规范
测试框架
项目使用 Vitest 作为测试框架,要求:
- 所有新功能必须包含测试用例
- 维护或改进代码覆盖率
- 测试成功和错误两种情况
- 使用描述性的测试名称
运行测试
# 运行所有测试
npm test
# 生成覆盖率报告
npm run test:coverage
# 类型检查
npm run typecheck
资料来源:DEVELOPMENT.md:10-16
故障排查
服务器无法启动
# 检查 Node 版本
node --version # 需要 >= 18.0.0
# 重新构建项目
npm run build
# 检查可执行权限
chmod +x bin/npm-registry-mcp.js
GitHub 速率限制
质量分析工具使用 GitHub API,未认证请求限制为每小时 60 次。部分包可能因此失败。
测试失败
# 清理并重新安装依赖
rm -rf node_modules package-lock.json
npm install
npm run build
npm test
资料来源:DEVELOPMENT.md:55-68
发布流程
当代码合并到主分支后,发布流程如下:
- 更新
package.json中的版本号 - 更新
CHANGELOG.md - 创建 Git 标签
- 发布到 npm
# 版本更新
npm version patch # 或 minor, major
# 发布
npm publish
相关资源
- CONTRIBUTING.md - 贡献指南
- AI_USAGE.md - AI 使用指南
- PROMPTS.md - MCP 提示词参考
资料来源:DEVELOPMENT.md:1-10
失败模式与踩坑日记
保留 Doramagic 在发现、验证和编译中沉淀的项目专属风险,不把社区讨论只当作装饰信息。
假设不成立时,用户拿不到承诺的能力。
新项目、停更项目和活跃项目会被混在一起,推荐信任度下降。
下游已经要求复核,不能在页面中弱化。
风险会影响是否适合普通用户安装。
Pitfall Log / 踩坑日志
项目:alisaitteke/npm-mcp
摘要:发现 6 个潜在踩坑项,其中 0 个为 high/blocking;最高优先级:能力坑 - 能力判断依赖假设。
1. 能力坑 · 能力判断依赖假设
- 严重度:medium
- 证据强度:source_linked
- 发现:README/documentation is current enough for a first validation pass.
- 对用户的影响:假设不成立时,用户拿不到承诺的能力。
- 建议检查:将假设转成下游验证清单。
- 防护动作:假设必须转成验证项;没有验证结果前不能写成事实。
- 证据:capability.assumptions | mcp_registry:io.github.alisaitteke/npm-mcp:0.0.3 | https://registry.modelcontextprotocol.io/v0.1/servers/io.github.alisaitteke%2Fnpm-mcp/versions/0.0.3 | README/documentation is current enough for a first validation pass.
2. 维护坑 · 维护活跃度未知
- 严重度:medium
- 证据强度:source_linked
- 发现:未记录 last_activity_observed。
- 对用户的影响:新项目、停更项目和活跃项目会被混在一起,推荐信任度下降。
- 建议检查:补 GitHub 最近 commit、release、issue/PR 响应信号。
- 防护动作:维护活跃度未知时,推荐强度不能标为高信任。
- 证据:evidence.maintainer_signals | mcp_registry:io.github.alisaitteke/npm-mcp:0.0.3 | https://registry.modelcontextprotocol.io/v0.1/servers/io.github.alisaitteke%2Fnpm-mcp/versions/0.0.3 | last_activity_observed missing
3. 安全/权限坑 · 下游验证发现风险项
- 严重度:medium
- 证据强度:source_linked
- 发现:no_demo
- 对用户的影响:下游已经要求复核,不能在页面中弱化。
- 建议检查:进入安全/权限治理复核队列。
- 防护动作:下游风险存在时必须保持 review/recommendation 降级。
- 证据:downstream_validation.risk_items | mcp_registry:io.github.alisaitteke/npm-mcp:0.0.3 | https://registry.modelcontextprotocol.io/v0.1/servers/io.github.alisaitteke%2Fnpm-mcp/versions/0.0.3 | no_demo; severity=medium
4. 安全/权限坑 · 存在评分风险
- 严重度:medium
- 证据强度:source_linked
- 发现:no_demo
- 对用户的影响:风险会影响是否适合普通用户安装。
- 建议检查:把风险写入边界卡,并确认是否需要人工复核。
- 防护动作:评分风险必须进入边界卡,不能只作为内部分数。
- 证据:risks.scoring_risks | mcp_registry:io.github.alisaitteke/npm-mcp:0.0.3 | https://registry.modelcontextprotocol.io/v0.1/servers/io.github.alisaitteke%2Fnpm-mcp/versions/0.0.3 | no_demo; severity=medium
5. 维护坑 · issue/PR 响应质量未知
- 严重度:low
- 证据强度:source_linked
- 发现:issue_or_pr_quality=unknown。
- 对用户的影响:用户无法判断遇到问题后是否有人维护。
- 建议检查:抽样最近 issue/PR,判断是否长期无人处理。
- 防护动作:issue/PR 响应未知时,必须提示维护风险。
- 证据:evidence.maintainer_signals | mcp_registry:io.github.alisaitteke/npm-mcp:0.0.3 | https://registry.modelcontextprotocol.io/v0.1/servers/io.github.alisaitteke%2Fnpm-mcp/versions/0.0.3 | issue_or_pr_quality=unknown
6. 维护坑 · 发布节奏不明确
- 严重度:low
- 证据强度:source_linked
- 发现:release_recency=unknown。
- 对用户的影响:安装命令和文档可能落后于代码,用户踩坑概率升高。
- 建议检查:确认最近 release/tag 和 README 安装命令是否一致。
- 防护动作:发布节奏未知或过期时,安装说明必须标注可能漂移。
- 证据:evidence.maintainer_signals | mcp_registry:io.github.alisaitteke/npm-mcp:0.0.3 | https://registry.modelcontextprotocol.io/v0.1/servers/io.github.alisaitteke%2Fnpm-mcp/versions/0.0.3 | release_recency=unknown
来源:Doramagic 发现、验证与编译记录