pycompat_mcp
一个Python MCP服务器,用于解析、审核和查找PyPI包版本,并对目标Python运行时进行完全兼容性检查。作为本地stdio进程或远程HTTP API服务器运行。
实时端点: https://pycompat.duckdns.org/mcp (可用性可能因地区而异)
______________________________________________________________________
快速连接
克劳德代码
claude mcp add --transport http pycompat https://pycompat.duckdns.org/mcp克劳德桌面
{
"mcpServers": {
"pycompat": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://pycompat.duckdns.org/mcp"]
}
}
}语言链/语言图
from langchain_mcp_adapters.client import MultiServerMCPClient
client = MultiServerMCPClient({
"pycompat": {
"url": "https://pycompat.duckdns.org/mcp",
"transport": "streamable_http",
}
})
tools = await client.get_tools()OpenAI/LiteLLM
response = litellm.completion(
model="gpt-4o",
mcp_servers=[{"url": "https://pycompat.duckdns.org/mcp"}],
messages=[{"role": "user", "content": "Resolve fastapi and pydantic for Python 3.11"}]
)健康检查
curl https://pycompat.duckdns.org/health
# → {"status": "ok", "server": "pycompat_mcp"}______________________________________________________________________
工具(4)
pycompat_resolve
解析包列表和目标Python版本的最新相互兼容版本。
它是如何工作的:
- 从PyPI获取每个包的实时元数据
- 按以下方式筛选版本
requires_python反对 目标 Python(不是主机解释器) - 为每个包选择最新的传递版本(贪婪,最新优先)
- 跑 约束传播 --检测到冲突时,扫描备选候选人以自动修复(最多5轮)
- 排放a
requirements.txt仅当已解决的集合完全无冲突时才阻止 - 否则,用可操作的提示抑制该块——建议增加
max_candidates当冲突使用精确的针时(==)说明符
输入:
| 字段 | 类型 | 必填 | 默认 | 描述 |
|---|---|---|---|---|
packages | list[str] | ✅ | — | PyPI包名称(最多30个) |
python_version | str | ✅ | — | 目标Python,例如。 "3.11" |
max_candidates | int | — | 5 | 每个包要评估的版本(1-20) |
输出: Markdown表格+ requirements.txt block+EOL/预发布警告+冲突详细信息
______________________________________________________________________
pycompat_package_info
获取单个PyPI包的完整元数据,可以选择特定版本。
输入:
| 字段 | 类型 | 必填 | 描述 |
|---|---|---|---|
package | str | ✅ | PyPI包名称 |
version | str | —— | 具体版本;省略为最新 |
输出(JSON):
{
"name": "numpy",
"version": "2.4.3",
"summary": "...",
"requires_python": ">=3.10",
"license": "BSD-3-Clause",
"author": "...",
"home_page": "...",
"requires_dist": ["..."],
"latest_versions": ["2.4.3", "2.4.2", "..."],
"only_prerelease_versions": false
}______________________________________________________________________
pycompat_check_pinned
审核一组现有的固定版本的相互兼容性和Python运行时兼容性。
输入:
| 字段 | 类型 | 必填 | 描述 |
|---|---|---|---|
pinned | dict[str, str] | ✅ | {"numpy": "1.26.4", "pandas": "2.2.1"} |
python_version | str | ✅ | 目标Python,例如。 "3.11" |
输出: Markdown表——每包Python OK/fail+任何跨包约束违规
______________________________________________________________________
pycompat_latest_versions
在一次轻量级调用中获取最多50个包的最新稳定版本。
比...更快 pycompat_package_info -每个包同时调用一个API,只返回版本号、发布日期和PyPI链接。
输入:
| 字段 | 类型 | 必填 | 默认 | 描述 |
|---|---|---|---|---|
packages | list[str] | ✅ | — | PyPI包名称(最多50个) |
include_prerelease | bool | — | false | 当比稳定版本更新时,也返回最新的预发布版本 |
输出: Markdown表--包/最新稳定/(预发布)/已发布/PyPI链接
______________________________________________________________________
输入验证
| 检查 | 行为 |
|---|---|
Python版本无效(abc) | Pydantic验证错误 |
无意义次要版本(3.999) | 已拒绝--显示有效范围 3.0–3.13 |
EOL Python(2.7, 3.0–3.9) | 已接受,但在所有工具中都有警告 |
未来Python(3.14) | 已拒绝——请参阅中的维护者注释 models.py |
重复的包(scikit-learn + scikit_learn) | 因归一化错误而被拒绝 |
重复的固定名称(Numpy + numpy) | 因归一化错误而被拒绝 |
| 包不在PyPI上 | 清除错误,其他包继续解析 |
| 版本不在PyPI上 | 与“找不到包”不同的错误 |
______________________________________________________________________
自足执行
运输方式
TRANSPORT env var | 模式 | 用例 |
|---|---|---|
stdio (默认) | 本地子流程 | 克劳德桌面,克劳德代码本地 |
http | 上的可流式HTTP API /mcp | 任何通过HTTP与MCP通信的LLM客户端 |
安装
git clone https://github.com/Adhvyth-T/pycompat_mcp.git
cd pycompat_mcp
pip install -r requirements.txt在本地运行
标准 :
python server.pyHTTP:
# Windows (PowerShell)
$env:TRANSPORT="http"; python server.py
# Linux / macOS
TRANSPORT=http python server.pyDocker:
docker compose up --build连接本地实例
克劳德代码--stdio:
claude mcp add pycompat python "/absolute/path/to/server.py"克劳德代码——HTTP:
claude mcp add --transport http pycompat http://localhost:8000/mcp______________________________________________________________________
文件结构
pycompat_mcp/
├── server.py # Entry point — transport selection, health endpoint, mcp.run()
├── models.py # Pydantic input models + shared validators (EOL list, version range)
├── pypi.py # PyPI HTTP client + all metadata helpers
├── resolver.py # Greedy resolver + constraint propagation loop
├── tools.py # MCP tool definitions (4 tools)
├── requirements.txt
├── Dockerfile
├── docker-compose.yml
├── .mcp.json # Claude Code project config (HTTP mode)
└── .gitignore______________________________________________________________________
已知限制
| 限制 | 详细信息 |
|---|---|
| ABI/运行时不兼容 | numpy 2.0与pandas 1.5的C-ABI断点对PyPI元数据不可见——只捕获声明的约束违规 |
max_candidates window | 传播仅从已获取的版本中选取;可能需要严格的精确引脚冲突 max_candidates 提高到10-20 |
| Python 3.14 | 在验证时被拒绝,直到 VALID_PYTHON_MINORS 在 models.py 被碰撞——已存在一个注释占位符 |
| Python 3.10 EOL | 计划于2026年10月-已在中注释占位符 EOL_PYTHON_VERSIONS 在 models.py |
______________________________________________________________________
维护人员注意事项
Python 3.14发布时: 在 models.py,颠簸 VALID_PYTHON_MINORS["3"] 从 range(0, 14) → range(0, 15). 轨道:https://www.python.org/downloads/
当Python 3.10达到EOL(2026年10月)时: 在 models.py,取消评论 "3.10" 在 EOL_PYTHON_VERSIONS. 轨道:https://devguide.python.org/versions/
______________________________________________________________________
依赖项
| 包 | 版本 |
|---|---|
mcp[cli] | ≥ 1.26.0 |
httpx | ≥ 0.28.1 |
packaging | ≥ 26.0 |
uvicorn | ≥ 0.42.0 |
starlette | ≥ 0.52.1 |
