🚀 包版本檢查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 虛擬環境)。