内容
# 依赖 MCP 服务器
用于跨多个包管理器和注册中心检查包版本的模型上下文协议(MCP)服务器。
## 功能
- **多语言支持**:检查来自 NPM、PyPI、Maven、NuGet、RubyGems、Crates.io 和 Go 模块的包
- **最新版本查找**:获取任何包的最新版本
- **版本存在检查**:验证特定版本是否存在
- **包信息**:获取包括所有版本的详细包元数据
- **批量处理**:同时检查多个包以提高效率
- **轻松安装**:通过 npx 安装和运行
## 支持的包管理器
- **npm** - Node.js 包
- **pypi** - Python 包
- **maven** - Java 包(格式:`groupId:artifactId`)
- **nuget** - .NET 包
- **rubygems** - Ruby gems
- **crates** - Rust crates
- **go** - Go 模块
## 安装
### 全局安装
```bash
npm install -g dependency-mcp
```
### 使用 npx 运行(无需安装)
```bash
npx dependency-mcp
```
### 本地开发
```bash
git clone <仓库>
cd dependency-mcp
npm install
npm start
```
## 用法
服务器作为使用 stdio 传输的 MCP 服务器运行。设计用于与兼容 MCP 的客户端一起使用。
## 可用工具
### 单包工具
在需要检查 **1-2 个包** 或需要 **详细资料** 时使用这些工具:
#### 1. `get_latest_version`
获取包的最新版本。用于依赖项更新、版本检查或需要最新的稳定版本。
**参数:**
- `package_name`(字符串):包名称
- `registry`(字符串):包注册中心(`npm`、`pypi`、`maven`、`nuget`、`rubygems`、`crates`、`go`)
**示例:**
```json
{
"package_name": "express",
"registry": "npm"
}
```
#### 2. `check_version_exists`
检查特定版本是否存在。用于依赖项验证、CI/CD 检查或确保版本兼容性。
**参数:**
- `package_name`(字符串):包名称
- `version`(字符串):要检查的版本
- `registry`(字符串):包注册中心
**示例:**
```json
{
"package_name": "flask",
"version": "2.3.0",
"registry": "pypi"
}
```
#### 3. `get_package_info`
获取包括所有版本的详细包信息。用于依赖项审计、安全审查或需要全面的包元数据。
**参数:**
- `package_name`(字符串):包名称
- `registry`(字符串):包注册中心
**示例:**
```json
{
"package_name": "lodash",
"registry": "npm"
}
```
### 多包工具
在需要检查 **3+ 个包** 或执行 **批量操作** 时使用这些工具:
#### 4. `get_latest_versions`
同时获取多个包的最新版本。在检查 3+ 个依赖项时使用 - 并行处理最多 100 个包。
**参数:**
- `packages`(数组):包名称数组
- `registry`(字符串):包注册中心
**示例:**
```json
{
"packages": ["react", "lodash", "axios"],
"registry": "npm"
}
```
#### 5. `check_versions_exist`
检查多个包的特定版本是否存在。用于批量依赖项验证、CI/CD 管道检查或确保多个包版本兼容性。
**参数:**
- `packages`(数组):具有 `package_name` 和 `version` 的包对象数组
- `registry`(字符串):包注册中心
**示例:**
```json
{
"packages": [
{ "package_name": "react", "version": "18.2.0" },
{ "package_name": "lodash", "version": "4.17.21" },
{ "package_name": "axios", "version": "1.6.0" }
],
"registry": "npm"
}
```
#### 6. `get_packages_info`
获取多个包的综合包详细信息。用于依赖项审计、安全审查或批量包分析。
**参数:**
- `packages`(数组):包名称数组
- `registry`(字符串):包注册中心
**示例:**
```json
{
"packages": ["react", "lodash", "axios"],
"registry": "npm"
}
```
## 工具选择指南
### 何时使用单包工具:
- **1-2 个包** 需要检查
- **详细信息** 需要(版本、主页、仓库)
- **特定版本验证** 对于一个包
- **快速检查** 在开发过程中
### 何时使用多包工具:
- **3+ 个包** 需要检查
- **批量依赖项验证**
- **CI/CD 管道检查**
- **依赖项审计** 或安全审查
- **性能关键** 场景下涉及多个包
### 性能说明:
- **单包工具**:对于 1-2 个包更快
- **多包工具**:对于 5+ 个包,速度快 3-5 倍,因为它们是并行处理的
- **错误隔离**:失败的包不会破坏整个批次
- **批次限制**:每个请求最多 100 个包
## 批量处理
多包工具在检查多个包时提供显著的性能改进:
### 优点
- **消除往返延迟**:在一个请求中检查最多 100 个包
- **一致的错误处理**:个别包的失败不会破坏整个批次
- **并行处理**:所有包都并发检查以实现最大效率
- **减少 API 开销**:减少对外部注册中心的 HTTP 请求
### 限制
- **最大批次大小**:每个请求 100 个包
- **速率限制**:内置延迟防止外部 API overload
- **超时处理**:每个请求 10 秒超时,带有优雅的回退
- **内存使用**:大批次可能会消耗更多内存
### 何时使用批量工具
- **依赖项审计**:检查项目中的多个包
- **版本比较**:比较多个包的版本
- **批量更新**:识别哪些包有可用的新版本
- **CI/CD 管道**:同时验证多个包版本
## 生产注意事项
### 性能
- **并发处理**:多包工具使用 Promise.all 进行并行执行
- **速率限制**:对外部 API 的内置 100ms 延迟
- **超时处理**:10 秒超时,带有优雅的错误处理
- **内存管理**:高效处理大批次
### 可靠性
- **错误隔离**:个别包的失败不会影响批次中的其他包
- **网络弹性**:优雅地处理暂时的网络问题
- **API 备用**:当外部 API 不可用时,提供优雅的降级
- **验证**:全面的输入验证防止无效请求
- **注册中心特定处理**:Maven 注册中心在某些网络环境中可能较慢
### 安全
- **输入净化**:所有输入都经过验证和净化
- **速率限制**:防止外部 API 滥用
- **错误消息**:安全的错误消息,不会暴露内部细节
- **超时保护**:防止挂起的请求
### 监控
- **时间戳**:所有响应都包含用于跟踪的 ISO 时间戳
- **错误跟踪**:用于调试的详细错误信息
- **性能指标**:内置超时和速率限制跟踪
## 与 Claude Desktop 配置
将以下内容添加到您的 Claude Desktop 配置文件中:
### Windows
`%APPDATA%\Claude\claude_desktop_config.json`
### macOS
`~/Library/Application Support/Claude/claude_desktop_config.json`
### Linux
`~/.config/claude/claude_desktop_config.json`
```json
{
"mcpServers": {
"dependency-checker": {
"command": "npx",
"args": ["dependency-mcp"]
}
}
}
```
## 示例响应
### 最新版本响应
```json
{
"package": "express",
"registry": "npm",
"found": true,
"latest_version": "4.18.2",
"description": "快速、无偏见、极简主义的 Web 框架"
}
```
### 版本检查响应
```json
{
"package": "flask",
"version": "2.3.0",
"registry": "pypi",
"exists": true
}
```
### 包信息响应
```json
{
"package": "lodash",
"registry": "npm",
"found": true,
"latest_version": "4.17.21",
"description": "Lodash 模块化实用程序。",
"versions": ["4.17.21", "4.17.20", "..."],
"homepage": "https://lodash.com/",
"repository": "git+https://github.com/lodash/lodash.git"
}
```
## 特殊格式说明
### Maven
Maven 包应以 `groupId:artifactId` 格式指定:
```json
{
"package_name": "org.springframework:spring-core",
"registry": "maven"
}
```
### Go 模块
Go 模块应使用完整的模块路径:
```json
{
"package_name": "github.com/gorilla/mux",
"registry": "go"
}
```
## 错误处理
服务器为常见场景提供详细的错误消息:
- 包未找到
- 网络连接问题
- 无效的包名称格式
- 注册中心 API 错误
- 速率限制超过
- 服务器错误(5xx 响应)
- 请求超时
- 输入验证错误
### 错误响应格式
所有错误响应都包含:
- `error`:人类可读的错误消息
- `timestamp`:发生错误的 ISO 时间戳
- `package`:导致错误的包名称
- `registry`:发生错误的注册中心
### 输入验证
服务器验证所有输入:
- 包名称:必须是非空字符串,长度不超过 500 个字符
- 版本:必须是非空字符串,长度不超过 100 个字符
- 注册中心:必须是支持的注册中心之一
- 批次大小:每个请求最多 100 个包
- 必需参数:所有必需字段都必须存在
### 响应期望
#### 单包工具:
- **成功**:返回完整的包信息,`found: true`
- **未找到**:返回 `found: false`,附带错误消息
- **网络问题**:返回带有描述性消息的错误
- **始终包含**:`timestamp`、`package`、`registry` 字段
#### 多包工具:
- **成功**:返回结果数组,每个结果都有单独的状态
- **部分成功**:一些包成功,其他包失败 - 每个包都有单独的结果
- **错误隔离**:失败的包不会影响成功的包
- **批量处理**:所有包并行处理以提高效率
- **一致的格式**:每个结果都遵循与单包工具相同的结构
## 开发
### 项目结构
```
dependency-mcp/
├── src/
│ ├── index.js # 主要的 MCP 服务器
│ └── packageChecker.js # 包注册中心处理程序
├── test/
│ └── test.js # 基本测试
├── package.json
└── README.md
```
### 运行测试
```bash
npm test
```
### 调试模式
```bash
npm run dev
```
## 许可证
MIT