🚀 包版本检查MCP
这是一个MCP服务器,可返回你在多种生态系统(如Python、NPM、Go或GitHub Actions)中作为依赖项使用的软件包的最新稳定版本。
它还支持通过 mise-en-place 工具查找近1000种工具的最新版本,例如像 python、node、dotnet 这样的 开发运行时,像 gradle 这样的 开发工具,以及像 kubectl 或 terraform 这样的各种 DevOps工具。
🚀 快速开始
当AI编码代理生成固定依赖版本的文件时,由于其训练是在数周或数月前进行的,而自那时起已经发布了新的依赖版本,因此它们会插入 过时的版本。作为开发者,手动修复这些过时版本会很烦人。
这个MCP解决了这个问题。将其与 Context7 等MCP一起使用,可避免你的AI代理生成过时的代码。
✨ 主要特性
支持的生态系统/工具:
- 开发者生态系统:
- NPM - 来自 registry.npmjs.org 的Node.js包
- PyPI - 来自PyPI的Python包
- NuGet - 来自NuGet的.NET包
- Maven / Gradle - 来自Maven仓库(Maven Central、Google Maven等)的Java/Kotlin/Scala包
- Go - 来自 proxy.golang.org 的Go模块
- PHP - 来自Packagist(由Composer使用)的PHP包
- Ruby - 来自 rubygems.org 的Ruby gem
- Rust - 来自 crates.io 的Rust crate
- Swift - 来自GitHub仓库的Swift包
- Dart - 来自 pub.dev 的Dart包
- DevOps生态系统:
- Docker - 来自Docker仓库的Docker容器镜像
- Helm - 来自ChartMuseum仓库和OCI仓库的Helm图表
- GitHub Actions - 托管在GitHub.com上的Actions,返回其当前版本、输入和输出,以及(可选)包含使用示例的完整README
- Terraform Providers 和 Modules - 来自Terraform Registry、OpenTofu Registry或自定义仓库的提供者和模块
- 各种由 mise-en-place 支持的 工具,如
kubectl、terraform、gradle、maven 等
📦 安装指南
将MCP添加到你的代理
有三种方法可以让你的AI编码代理使用此MCP:
选项1:使用托管服务(最简单)
将你的代理指向免费的托管服务:
https://package-version-check-mcp.onrender.com/mcp
使用(可流式传输的)HTTP模式。
这是最快的入门方式。请注意,托管服务可能会受到底层软件包仓库的速率限制。
选项2:使用uvx运行(用于本地使用)
使用 uvx 在本地运行MCP服务器:
uvx package-version-check-mcp --mode=stdio
这将自动从PyPI安装并运行最新版本。
要求:
- 如果你想调用
get_supported_tools 或 get_latest_tool_versions 工具,则需要在PATH中包含 mise 二进制文件。
可选但推荐:将 GITHUB_PAT 环境变量设置为GitHub个人访问令牌(无需任何权限范围),以避免GitHub API速率限制。
选项3:使用Docker运行(用于本地使用)
使用预构建的Docker镜像:
docker run --pull=always --rm -i ghcr.io/mshekow/package-version-check-mcp:latest --mode=stdio
可选但推荐:使用 -e GITHUB_PAT=your_token_here 传递 GITHUB_PAT 环境变量,以避免GitHub API速率限制。
缓存配置
为了提高性能并减少对软件包仓库的API调用,你可以启用缓存:
PACKAGE_VERSION_CACHE_ENABLED:设置为 true 以启用缓存(默认禁用)
PACKAGE_VERSION_CACHE_TTL_SECONDS:缓存持续时间(秒)(默认值:3600 / 1小时)
PACKAGE_VERSION_CACHE_MAX_SIZE_MB:最大缓存大小(MB)(默认值:64)
缓存是一个内存中的TTL(Time-To-Live)缓存。MCP服务器重启时,缓存将重置。
配置你的代理
添加MCP服务器后,你需要:
- 在代理的配置中 启用MCP工具。可用工具如下所述。
- 在提示中 促使代理使用MCP。大多数大语言模型(LLM)在没有明确指导的情况下不会自动调用此MCP的工具。可以包含以下指令:
- "使用MCP获取最新版本"
- "使用MCP工具检查最新的软件包版本"
- "使用 get_latest_package_versions 查找当前版本"
如果你忘记添加此提示,并且你的代理生成了包含 过时 版本的代码,你可以随后要求代理更新版本(例如,"通过MCP将你刚刚添加的依赖项更新到最新版本")。
💻 使用示例
可用工具
get_latest_package_versions
从各种生态系统中获取软件包的最新版本。
输入:
packages:软件包规范数组,每个项包含:
ecosystem(必需):可以是 "npm"、"pypi"、"nuget"、"maven_gradle"、"go"、"php"、"rubygems"、"rust"、"swift"、"dart"、"docker"、"helm"、"terraform_provider" 或 "terraform_module"
package_name(必需):软件包名称
- 对于npm:软件包名称(例如,"express")
- 对于pypi:软件包名称(例如,"requests")
- 对于nuget:软件包名称(例如,"Newtonsoft.Json")
- 对于maven_gradle:"[registry:]:" 格式(例如,"org.springframework:spring-core")。如果省略注册表,则默认为Maven Central。
- 对于go:绝对模块标识符(例如,"github.com/gin-gonic/gin")
- 对于php:"vendor/package" 格式的软件包名称(例如,"monolog/monolog"、"laravel/framework")
- 对于rubygems:Gem名称(例如,"rails"、"devise")
- 对于rust:Crate名称(例如,"serde"、"tokio")
- 对于swift:GitHub URL(例如,"https://github.com/Alamofire/Alamofire.git" 或 "github.com/owner/repo.git")。仅支持github.com。
- 对于dart:来自 pub.dev 的软件包名称(例如,"http"、"flutter")
- 对于docker:包含注册表和命名空间的完全限定镜像名称(例如,"index.docker.io/library/busybox")
- 对于helm:ChartMuseum URL("https://host/path/chart-name")或OCI引用("oci://host/path/chart-name")
- 对于terraform_provider:"[registry/]/" 格式(例如,"hashicorp/aws" 或 "registry.terraform.io/hashicorp/aws")。如果省略注册表,则默认为 registry.terraform.io。支持像 registry.opentofu.org 这样的替代注册表。
- 对于terraform_module:"[registry/]//" 格式(例如,"terraform-aws-modules/vpc/aws" 或 "registry.terraform.io/terraform-aws-modules/vpc/aws")。如果省略注册表,则默认为 registry.terraform.io。支持像 registry.opentofu.org 这样的替代注册表。
version_hint(可选):
- 对于docker:标签兼容性提示(例如,"1.36-alpine"),以查找匹配相同后缀模式的最新标签。如果省略,则返回最新的语义版本标签。
- 对于helm(仅OCI):与Docker类似的标签兼容性提示
- 对于npm/pypi/nuget/maven_gradle/go/php/rubygems/rust/swift/dart/helm(ChartMuseum)/terraform_provider/terraform_module:目前未使用
输出:
result:成功查找的数组,包含:
ecosystem:软件包生态系统(按提供的内容)
package_name:软件包名称(按提供的内容)
latest_version:最新版本号(例如,"1.2.4")或Docker标签
digest:(可选)如果可用,为软件包摘要/哈希。对于Docker,这是清单摘要(sha256)。
published_on:(可选)如果可用,为发布日期(Docker不可用)
lookup_errors:错误数组,包含:
ecosystem:软件包生态系统(按提供的内容)
package_name:软件包名称(按提供的内容)
error:错误描述
get_github_action_versions_and_args
获取托管在github.com上的GitHub Actions的最新版本和元数据。
输入:
action_names(必需):"owner/repo" 格式的操作名称数组(例如,["actions/checkout", "docker/login-action"])
include_readme(可选):布尔值(默认值:false),是否包含操作的README.md及使用说明
输出:
result:成功查找的数组,包含:
name:操作名称(按提供的内容)
latest_version:最新的Git标签(例如,"v3.2.4")
metadata:作为对象的 action.yml 元数据,包含字段:
inputs:操作输入参数
outputs:操作输出
runs:执行配置
readme:(可选)如果 include_readme 为 true,则为操作的README内容
lookup_errors:错误数组,包含:
name:操作名称(按提供的内容)
error:错误描述
get_supported_tools
返回 get_latest_tool_versions MCP工具支持的所有工具名称的列表。
此工具查询 mise 注册表以检索所有可由mise管理的可用工具名称。
输入:
输出:
- 工具短名称数组(例如,["1password", "act", "node", "python", ...])
get_latest_tool_versions
获取 mise-en-place 支持的开发和DevOps工具的最新稳定版本。
此工具适用于不属于PyPI或NPM等语言生态系统的工具。对于语言生态系统软件包(包括Terraform提供者和模块),请使用 get_latest_package_versions。
用例:
- gradle 或 maven:在
gradle-wrapper.properties 或 maven-wrapper.properties 的 distributionUrl 中固定Gradle或Maven版本
- 示例:
distributionUrl=https://services.gradle.org/distributions/gradle-8.5-bin.zip
- 示例:
distributionUrl=https://repo.maven.apache.org/.../apache-maven-3.9.6-bin.zip
- terraform:在
version.tf 或 versions.tf 等文件中固定 terraform.required_version
- 示例:
terraform { required_version = "~> 1.6.0" }
- kubectl 或 azure:在使用
curl 或 wget 调用的下载URL中固定版本,例如在Dockerfile中
- 示例:
RUN curl -LO https://dl.k8s.io/release/v1.28.0/bin/linux/amd64/kubectl
要查看所有可用工具,请使用 get_supported_tools 工具。
输入:
tool_names(必需):工具名称数组(例如,["terraform", "gradle", "kubectl"])
输出:
result:成功查找的数组,包含:
tool_name:工具名称(按提供的内容)
latest_version:最新稳定版本号(例如,"1.6.5")
lookup_errors:错误数组,包含:
tool_name:工具名称(按提供的内容)
error:错误描述
📚 详细文档
为什么要构建另一个MCP
这个MCP当然不是第一个解决“过时依赖”问题的。然而,我们认为它与其他MCP相比有各种优势:
- 与其他MCP相比,我们提供了(更)广泛的生态系统覆盖范围。
- 有完整的测试覆盖,具有自动依赖更新(由Renovate提供支持)和定期的自动发布构建。相比之下,其他项目通常缺乏规范,测试不佳(或没有测试),并且已经被放弃,因为作者只是随意尝试。
- 这个MCP提供了 几种 在本地运行的替代方案(uvx或docker),或者你可以直接使用免费的托管服务(其他MCP没有)。
- 这个MCP使用了一个 最小化 的Docker/OCI镜像,并进行了安全加固。使用Trivy等工具生成的软件物料清单(SBOM)是已知正确的,并且镜像使用Cosign进行了签名(如果你想自行托管MCP,可以验证其真实性)。
🔧 技术细节
开发
前提条件
mise-en-place
MCP服务器依赖于 mise-en-place 包来查找工具版本。有关安装说明,请参阅 https://mise.jdx.dev/installing-mise.html。
手动运行服务器(用于开发)
如果你在本地开发或测试MCP服务器,可以直接运行它。
首先,遵循使用Poetry进行包管理 -> 设置说明 来配置你的虚拟环境。
接下来:
.poetry/bin/poetry run python -m package_version_check_mcp.main
或者,如果你已经激活了 .venv:
python src/package_version_check_mcp/main.py
使用Poetry进行包管理
设置
在新机器上,为Poetry创建一个虚拟环境(路径为 <project-root>/.poetry),并为项目本身创建一个虚拟环境(路径为 <project-root>/.venv),例如通过 C:\Users\USER\AppData\Local\Programs\Python\Python312\python.exe -m venv <path>。
这种分离是必要的,以避免项目和Poetry之间的依赖 冲突。
使用Poetry虚拟环境的 pip,通过 pip install -r requirements-poetry.txt 安装Poetry。
然后,运行 poetry sync --all-extras,但要确保没有激活任何虚拟环境,或者激活的是 .venv,而 不是 .poetry(否则,除非你之前运行过 poetry config virtualenvs.in-project true,否则Poetry会愚蠢地将依赖项安装到 .poetry 中)。--all-extras 标志是安装 开发 依赖项(如pytest)所必需的。
更新依赖项
- 当依赖项 从外部 发生更改时,例如因为Renovate更新了
pyproject.toml 和 poetry.lock 文件,运行 poetry sync --all-extras 来更新你的本地环境。这将从你的 .venv 虚拟环境中移除任何过时的依赖项。
- 如果你 自己 在
pyproject.toml 中更新了一个依赖项,运行 poetry update && poetry sync --all-extras 来更新锁文件并安装更新后的依赖项(包括额外的依赖项)。
- 要仅更新 传递性 依赖项(保持
pyproject.toml 中的依赖项不变),运行 poetry update && poetry sync --all-extras,这将更新锁文件并将更新安装到活动的虚拟环境中。
在运行上述任何 poetry 命令时,请确保没有激活任何虚拟环境(或者激活的是 .venv 虚拟环境)。