使用说明
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.py
HTTP:
# Windows (PowerShell)
$env:TRANSPORT="http"; python server.py
# Linux / macOS
TRANSPORT=http python server.py
Docker:
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 |
