依赖包版本检查服务

一个提供多种开发生态系统中依赖包最新版本信息的MCP服务器,支持Python、NPM、Go等生态系统及近1000种开发工具。

  • by MShekow
  • Python
  • 混合部署
  • 9 星标
  • 更新于
在 GitHub 查看 MShekow/package-version-check-mcp

使用说明

包版本检查mcp

MCP服务器,返回您在各种生态系统(如Python、NPM、Go或GitHub Actions)中用作依赖项的包的最新稳定版本。

它还支持查找近1000个工具的最新版本,例如 开发运行时间 喜欢 python, node, dotnet, 开发工具 喜欢 gradle,以及各种 DevOps工具 喜欢 kubectl 或 terraform,通过 就位 工具。

我为什么需要这个?

每当AI编码代理生成固定依赖版本的文件时,它们都会插入 过时的版本 因为他们的训练发生在几周或几个月前,从那时起,新的依赖版本已经发布。作为一名开发人员,手动修复这些过时的版本很烦人。

此MCP修复了此问题。将其与MCP一起使用,例如 背景7 以避免您的AI代理生成过时的代码。

特性

支持的生态系统/工具:

  • 开发者生态系统:
    • NPM -来自注册表.npmjs.org的Node.js包
    • PyPI -PyPI中的Python包
    • 纽吉特 - .NET包从NuGet
    • Maven/Gradle -来自Maven存储库(Maven Central、Google Maven等)的Java/Kotlin/Scala包
    • 去 -Go模块来自proxy.golang.org
    • PHP -Packagist的PHP包(由Composer使用)
    • 红宝石 -Ruby宝石来自rubygems.org
    • 锈 -crates.io上的铁锈板条箱
    • 迅速 -来自GitHub仓库的Swift包
    • 飞镖 -来自pub.dev的Dart软件包
  • DevOps生态系统:
    • 码头工人 -来自Docker注册表的Docker容器镜像
    • 舵 -ChartMuseum存储库和OCI注册表中的Helm图表
    • GitHub操作 -在GitHub.com上托管的操作,返回其当前版本、输入和输出,以及(可选)包含使用示例的整个README
    • 地形 提供商 和 模块 -来自Terraform注册表、OpenTofu注册表或自定义注册表的提供者和模块
    • 多种 工具 例如 kubectl, terraform, gradle, maven等,由mise就地支持

用法

将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的最新版本。

要求:

  • 你需要 mise 如果你想调用这些工具,可以在PATH上使用二进制文件 get_supported_tools 或 get_latest_tool_versions

可选但推荐: 设置 GITHUB_PAT 环境变量到GitHub个人访问令牌(无需作用域),以避免GitHub API速率限制。

选项3:使用Docker运行(本地使用)

使用预构建的Docker镜像:

docker run --pull=always --rm -i ghcr.io/mshekow/package-version-check-mcp:latest --mode=stdio

可选但推荐: 通过 GITHUB_PAT 环境变量使用 -e GITHUB_PAT=your_token_here 以避免GitHub API速率限制。

缓存配置

为了提高性能并减少对程序包注册表的API调用,您可以启用缓存:

  • PACKAGE_VERSION_CACHE_ENABLED:设置为 true 启用缓存(默认情况下禁用)
  • PACKAGE_VERSION_CACHE_TTL_SECONDS:缓存持续时间(秒)(默认值:3600/1小时)
  • PACKAGE_VERSION_CACHE_MAX_SIZE_MB:最大缓存大小(MB)(默认值:64)

缓存是内存中的TTL(生存时间)缓存。当MCP服务器重新启动时,它会重置。

配置您的代理

添加MCP服务器后,您需要:

  1. 启用MCP工具 在代理的配置中。可用工具记录如下

  2. 轻按代理以使用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:“[注册表:]:“格式(例如,”org.springframework:springcore“)。如果省略注册表,则假定为Maven Central。
      • 对于go:绝对模块标识符(例如,“github.com/gin-gonic/gin”)
      • 对于php:包名采用“vendor/Package”格式(例如,“monolog/monolog”、“laravel/framework”)
      • 对于rubygems:宝石名称(例如,“rails”、“develope”)
      • 铁锈:板条箱名称(例如“serde”、“tokio”)
      • 对于swift:GitHub URL(例如,“https://github.com/Alamofire/Alamofire.git“或”github.com/owner/report.git“)。只支持github。
      • 对于dart:来自pub.dev的包名(例如,“http”、“flutter”)
      • 对于docker:完全限定的映像名称,包括注册表和命名空间(例如“index.docker.io/library/busybox”)
      • 掌舵人:ChartMuseum网址(“https://host/path/chart-name“)或OCI参考(”oci://host/path/chart-name")
      • 对于terraform_provider:“[registry/]/“格式(例如,”hashicorp/aws“或”registry.terraform.io/hashicorp.aws“)。如果省略注册表,则假定为register.terraform.io。支持registery.opentofu.org等替代注册表。
      • 对于terraform_module:“[registry/]//“格式(例如,”terraform aws modules/vpc/aws“或”registry.terraform.io/terraform aws-modules/vpc/aws“)。如果省略注册表,则假定为register.terraform.io。支持registery.openofu.org等替代注册表。
    • version_hint (可选):
      • 对于docker:tag兼容性提示(例如“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上托管的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:(可选)如果满足以下条件,则操作的README内容 include_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 或 专家:将Gradle或Maven版本固定在 distributionUrl 在 gradle-wrapper.properties 或 maven-wrapper.properties
    • 例子: distributionUrl=https://services.gradle.org/distributions/gradle-8.5-bin.zip
    • 例子: distributionUrl=https://repo.maven.apache.org/.../apache-maven-3.9.6-bin.zip
  • 地形改造:Pin terraform.required_version 在类似文件中 version.tf 或 versions.tf
    • 例子: terraform { required_version = "~> 1.6.0" }
  • kubectl 的 或 蔚蓝:将版本固定在名为的下载URL中 curl 或 wget例如,在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有各种优势:

  • 我们提供比其他MCP更好的生态系统覆盖率
  • 有完整的测试覆盖率,有自动的依赖关系更新(由Renovate提供支持)和定期的自动发布构建。相比之下,其他项目通常采用vibe编码,测试质量差(或没有),并且已经被放弃,因为作者只是在闲逛
  • 此MCP提供 若干 如何在本地运行它的替代方案(uvx或docker),或者你可以只使用免费的托管产品(其他MCP没有)
  • 此MCP使用 最小 Docker/OCI镜像,加强安全性。众所周知,您使用Trivy等工具生成的SBOM是正确的,并且图像已用Cosign签名(如果您想自行托管MCP,它允许您验证其真实性)

发展

先决条件

就位

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进行包管理

设置

在一台新机器上,为诗歌创建一个venv(在路径中 <project-root>/.poetry),一个用于项目本身(在路径中 <project-root>/.venv)例如,通过 C:\Users\USER\AppData\Local\Programs\Python\Python312\python.exe -m venv <path>. 这种分离对于避免依赖是必要的 冲突 在项目和诗歌之间。

使用 pip Poetry venv,通过安装Poetry pip install -r requirements-poetry.txt

然后,跑 poetry sync --all-extras,但请确保没有活动的venv,或者 .venv 一个,但是 不 这 .poetry 一个(否则Poetry会愚蠢地将依赖项安装到该程序中,除非您之前运行 poetry config virtualenvs.in-project true).这 --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,更新锁文件并将更新安装到活动venv中。

确保没有活动的venv(或 .venv venv处于活动状态),同时运行上述任何一项 poetry 命令。