版本查询服务

MCP Releases Server是一个提供GitHub版本信息和PyPI包版本查询的服务,支持自动回退和仓库别名配置。

  • by hngkr
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 hngkr/releases-mcp

使用说明

MCP发布服务器

提供GitHub发布信息和PyPI包版本的MCP(模型上下文协议)服务器。

特性

  • GitHub发布:从任何GitHub存储库查询最新稳定版本
  • PyPI集成:查找Python包的最新生产版本
  • 智能回退:当GitHub版本不可用时,自动回退到PyPI
  • 存储库别名:为常用存储库配置短别名

工具

  • get_latest_release -返回GitHub存储库的最新稳定版本(带PyPI回退)
  • get_pypi_version -直接向PyPI查询任何Python包的最新稳定版本

配置

环境变量

创建可选 .env 在项目根目录下的文件中配置GitHub令牌:

export GITHUB_TOKEN="github_pat_TOKEN"

GitHub令牌是可选的,但建议避免API速率限制。服务器将在没有它的情况下工作,但速率限制较低。

存储库映射

在中配置存储库别名和PyPI包 repo_mapping.json:

{
  "fastapi": {
    "repo": "tiangolo/fastapi",
    "aliases": ["FastAPI"],
    "pypi_package": "fastapi"
  },
  "nomad": {
    "repo": "hashicorp/nomad",
    "aliases": ["Nomad"]
  }
}

领域:

  • repo:GitHub存储库位于 owner/name 格式(必填)
  • aliases:此存储库的备选名称列表(可选)
  • pypi_package:用于回退查找的PyPI包名称(可选)

使用Docker运行

docker-compose up --build

服务器将在以下时间可用 http://localhost:8000/mcp.

本地运行

uv sync
uv run uvicorn server:app --host 0.0.0.0 --port 8000

VSCode集成

将以下内容添加到VSCode设置中(.vscode/mcp.json 或用户设置):

{
  "mcp": {
    "servers": {
      "releases-server": {
        "url": "http://localhost:8000/mcp"
      }
    }
  }
}

或添加到 ~/.vscode/mcp.json:

{
  "servers": {
    "releases-server": {
      "url": "http://localhost:8000/mcp"
    }
  }
}

添加配置后,重新启动VSCode或重新加载窗口。这 get_latest_release 和 get_pypi_version Copilot将可以使用这些工具。

PyPI集成

运作原理

服务器包括两种查询PyPI的方法:

  1. 直接PyPI查找:使用 get_pypi_version() 直接向PyPI查询任何包
  2. 自动回退:何时 get_latest_release() 找不到GitHub版本,如果出现以下情况,它会自动检查PyPI pypi_package 配置在 repo_mapping.json

PyPI功能

  • 过滤掉预发布和开发版本
  • 仅返回稳定的生产版本
  • 包括包元数据(摘要、主页、URL)
  • 优雅地处理不存在的包

使用示例

直接PyPI查找:

from server import get_pypi_version

# Query any package directly
result = get_pypi_version("django")
print(result)
# Output:
# Latest stable version for django (from PyPI):
# Version: 6.0.1
# Summary: A high-level Python web framework...
# PyPI URL: https://pypi.org/project/django/6.0.1/

自动回退:

from server import get_latest_release

# Configure in repo_mapping.json:
# {
#   "my-package": {
#     "repo": "owner/repo",
#     "pypi_package": "my-package"
#   }
# }

# If GitHub fails, automatically falls back to PyPI
result = get_latest_release("my-package")

测试PyPI集成:

uv run python3 -c "
from server import get_latest_pypi_version
result = get_latest_pypi_version('requests')
print(f\"Version: {result['version']}\")
"

运行集成测试

使用以下命令运行集成套件 pytest (依赖关系由以下人员临时处理 uv).测试将自动加载 GITHUB_TOKEN 来自你的 .env 文件(如果存在):

uv run pytest test_integration.py -v

或运行特定的测试类别:

# Test GitHub functionality
uv run pytest test_integration.py -k "github" -v

# Test PyPI functionality
uv run pytest test_integration.py -k "pypi" -v

# Test with verbose output
uv run pytest test_integration.py -v -s