关于 dependency-mcp
dependency-mcp 为开发者提供跨七个软件包注册表的版本与元数据查询,并支持单项查询和并行批处理,适用于依赖验证与审计。
主要功能
- 01查询七个注册表的最新版本
- 02检查指定版本是否存在
- 03获取软件包元数据及版本列表
- 04批量检查多个软件包
- 05批处理中隔离单项失败
适用场景
- 01开发时检查依赖更新
- 02在 CI/CD 中验证固定版本
- 03审查软件包元数据以进行依赖审计
MCP 相关
通过 stdio 向兼容 MCP 的客户端提供软件包查询、版本验证、元数据和批处理工具。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
6收录的工具列表 · 更新于 3 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| registry | enum | 是 | 要检查的软件包注册表/管理器npm | pypi | maven | nuget | rubygems | crates | go |
| package_name | string | 是 | 要检查的软件包名称 |
详细介绍
Dependency MCP Server
一个用于跨多个包管理器和注册表检查软件包版本的模型上下文协议(MCP)服务。
功能
- 多语言支持:检查来自 NPM、PyPI、Maven、NuGet、RubyGems、Crates.io 和 Go modules 的软件包
- 最新版本查询:获取任意软件包的最新版本
- 版本存在性检查:验证特定版本是否存在
- 软件包信息:获取详细的软件包元数据,包括所有版本
- 批量处理:同时检查多个软件包,提高效率
- 轻松安装:通过 npx 安装并运行
支持的包管理器
- npm - Node.js 软件包
- pypi - Python 软件包
- maven - Java 软件包(格式:
groupId:artifactId) - nuget - .NET 软件包
- rubygems - Ruby gems
- crates - Rust crates
- go - Go 模块
安装
全局安装
npm install -g dependency-mcp
使用 npx 运行(无需安装)
npx dependency-mcp
本地开发
git clone <repository>
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)
示例:
{
"package_name": "express",
"registry": "npm"
}
2. check_version_exists
检查特定版本是否存在。适用于依赖验证、CI/CD 检查,或确保版本兼容性的场景。
参数:
package_name(字符串):软件包名称version(字符串):要检查的版本registry(字符串):软件包注册表
示例:
{
"package_name": "flask",
"version": "2.3.0",
"registry": "pypi"
}
3. get_package_info
获取详细的软件包信息,包括所有版本。适用于依赖审计、安全审查,或需要全面软件包元数据的场景。
参数:
package_name(字符串):软件包名称registry(字符串):软件包注册表
示例:
{
"package_name": "lodash",
"registry": "npm"
}
多个软件包工具
当你需要检查 3 个或更多软件包 或执行批量操作时,使用这些工具:
4. get_latest_versions
同时获取多个软件包的最新版本。适用于检查 3 个或更多依赖的场景,可并行处理多达 100 个软件包。
参数:
packages(数组):软件包名称数组registry(字符串):软件包注册表
示例:
{
"packages": ["react", "lodash", "axios"],
"registry": "npm"
}
5. check_versions_exist
检查多个软件包的特定版本是否存在。适用于批量依赖验证、CI/CD 流水线检查,或确保多个软件包版本兼容性的场景。
参数:
packages(数组):包含package_name和version的软件包对象数组registry(字符串):软件包注册表
示例:
{
"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(字符串):软件包注册表
示例:
{
"packages": ["react", "lodash", "axios"],
"registry": "npm"
}
工具选择指南
何时使用单个软件包工具:
- 需要检查 1-2 个软件包
- 需要详细信息(版本、主页、代码库)
- 需要验证单个软件包的特定版本
- 开发期间进行快速检查
何时使用多个软件包工具:
- 需要检查 3 个或更多软件包
- 批量依赖验证
- CI/CD 流水线检查
- 依赖审计或安全审查
- 涉及多个软件包的性能关键型场景
性能说明:
- 单包工具:适用于 1–2 个软件包,速度更快
- 多包工具:处理 5 个以上的软件包时,借助并行处理,速度可提升 3–5 倍
- 错误隔离:软件包失败不会导致整个批次失败
- 批次限制:每个请求最多处理 100 个软件包
批量处理
在检查多个软件包时,多包工具可显著提升性能:
优势
- 消除往返延迟:单个请求最多可检查 100 个软件包
- 一致的错误处理:单个软件包失败不会导致整个批次失败
- 并行处理:并发检查所有软件包,最大限度提升效率
- 降低 API 开销:减少向外部注册表发送的 HTTP 请求
限制
- 最大批次大小:每个请求最多处理 100 个软件包
- 速率限制:内置延迟可防止外部 API 不堪重负
- 超时处理:每个请求的超时时间为 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
{
"mcpServers": {
"dependency-checker": {
"command": "npx",
"args": ["dependency-mcp"]
}
}
}
响应示例
最新版本响应
{
"package": "express",
"registry": "npm",
"found": true,
"latest_version": "4.18.2",
"description": "Fast, unopinionated, minimalist web framework"
}
版本检查响应
{
"package": "flask",
"version": "2.3.0",
"registry": "pypi",
"exists": true
}
软件包信息响应
{
"package": "lodash",
"registry": "npm",
"found": true,
"latest_version": "4.17.21",
"description": "Lodash modular utilities.",
"versions": ["4.17.21", "4.17.20", "..."],
"homepage": "https://lodash.com/",
"repository": "git+https://github.com/lodash/lodash.git"
}
特殊格式说明
Maven
Maven 软件包应采用 groupId:artifactId 格式指定:
{
"package_name": "org.springframework:spring-core",
"registry": "maven"
}
Go 模块
Go 模块应使用完整的模块路径:
{
"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 # Main MCP server
│ └── packageChecker.js # Package registry handlers
├── test/
│ └── test.js # Basic tests
├── package.json
└── README.md
运行测试
npm test
调试模式
npm run dev
许可证
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。