A Model Context Protocol (MCP) service for building and publishing Python packages to PyPI
Project description
pkg-publisher
更新日期: 2026-01-29 版本: 0.1.6
Python Package Publisher MCP Service - 专门用于构建和发布 Python 包到 PyPI 的 MCP 工具。
功能特性
- 包构建: 自动构建 Python 包(.whl 和 .tar.gz)
- 包发布: 一键发布到 PyPI 或 TestPyPI
- 包验证: 验证包是否符合 PyPI 规范
- 包信息查询: 查询 PyPI 上的包信息
- 环境变量支持: 从环境变量读取 API Token
- 自动化友好: 适合 CI/CD 集成
安装
cd pkg_publisher_standalone
pip install -e .
使用方法
MCP 配置
在 MCP 客户端配置中添加:
方式一:使用 uvx 从 PyPI 安装
{
"mcpServers": {
"pkg-publisher": {
"command": "uvx",
"args": [
"pkg-publisher"
],
"env": {
"PYPI_API_TOKEN": "your-pypi-api-token",
"TEST_PYPI_API_TOKEN": "your-testpypi-api-token",
"PKG_PUBLISHER_PYTHON_PATH": "D:\\ProgramData\\miniconda3\\python.exe"
}
}
}
}
环境配置
PyPI API Token 配置
方式一:系统环境变量
# Windows CMD
set PYPI_API_TOKEN=pypi-xxx...
# Windows PowerShell
$env:PYPI_API_TOKEN = "pypi-xxx..."
# Linux/Mac
export PYPI_API_TOKEN="pypi-xxx..."
方式二:MCP 配置
{
"mcpServers": {
"pkg-publisher": {
"command": "uvx",
"args": ["pkg-publisher"],
"env": {
"PYPI_API_TOKEN": "pypi-xxx...",
"TEST_PYPI_API_TOKEN": "pypi-xxx..."
}
}
}
}
环境变量说明
| 变量名 | 说明 | 必填 | 示例 |
|---|---|---|---|
PYPI_API_TOKEN |
PyPI API Token | 发布到 PyPI 时必填 | pypi-xxx... |
TEST_PYPI_API_TOKEN |
TestPyPI API Token | 发布到 TestPyPI 时必填 | pypi-xxx... |
PKG_PUBLISHER_PYTHON_PATH |
指定使用的 Python 可执行文件路径 | 否 | C:\Python39\python.exe |
PKG_PUBLISHER_LOG_LEVEL |
日志级别 | 否 | DEBUG/INFO/WARNING/ERROR |
PKG_PUBLISHER_LOG_FILE |
自定义日志文件路径 | 否 | /path/to/log.txt |
工具接口
build_package
构建 Python 包。
参数:
project_path(string, optional): 项目路径,默认当前目录clean(boolean, optional): 是否清理旧的构建产物,默认 true
返回:
{
"success": true,
"output": "build output",
"error": "",
"dist_files": [
"/path/to/package-0.1.0-py3-none-any.whl",
"/path/to/package-0.1.0.tar.gz"
],
"project_path": "/path/to/project"
}
publish_package
发布 Python 包到 PyPI。
参数:
package_path(string, optional): 包文件路径,默认dist/*repository(string, optional): 仓库名称,pypi或testpypi,默认pypiskip_existing(boolean, optional): 是否跳过已存在的版本,默认 falseproject_path(string, optional): 项目路径,用于查找 dist 目录
返回:
{
"success": true,
"output": "upload output",
"error": "",
"repository": "pypi",
"package_files": [
"/path/to/package-0.1.0-py3-none-any.whl",
"/path/to/package-0.1.0.tar.gz"
]
}
validate_package
验证 Python 包是否符合 PyPI 规范。
参数:
package_path(string): 包文件路径
返回:
{
"success": true,
"output": "validation output",
"error": "",
"package_path": "/path/to/package-0.1.0-py3-none-any.whl"
}
get_package_info
查询 PyPI 上的包信息。
参数:
package_name(string): 包名version(string, optional): 版本号repository(string, optional): 仓库名称,pypi或testpypi,默认pypi
返回:
{
"success": true,
"package_name": "package-name",
"version": "0.1.0",
"info": {
"name": "package-name",
"version": "0.1.0",
"summary": "Package description",
...
},
"error": null
}
使用示例
构建并发布
# 构建包
build_result = build_package()
if build_result["success"]:
print(f"Built: {build_result['dist_files']}")
# 发布到 PyPI
publish_result = publish_package(repository="pypi")
if publish_result["success"]:
print("Published successfully!")
发布到 TestPyPI
# 构建包
build_result = build_package()
# 发布到 TestPyPI
publish_result = publish_package(
repository="testpypi",
skip_existing=True
)
验证包
# 验证包
validate_result = validate_package("dist/package-0.1.0-py3-none-any.whl")
if validate_result["success"]:
print("Package is valid")
查询包信息
# 查询包信息
info_result = get_package_info("requests")
if info_result["success"]:
print(f"Latest version: {info_result['info']['info']['version']}")
# 查询特定版本
info_result = get_package_info("requests", version="2.31.0")
技术架构
- 框架: FastMCP
- 构建工具: python-build
- 发布工具: twine
- HTTP 客户端: requests
- 平台: 跨平台
安全说明
- API Token 仅从环境变量读取,不记录到日志
- 支持临时 Token(有效期限制)
- 不在 MCP 响应中返回 Token
- 建议使用 PyPI 的 Trusted Publishers 或 Token API
许可证
MIT License
贡献
欢迎提交 Issue 和 Pull Request。
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pkg_publisher-0.1.6.tar.gz.
File metadata
- Download URL: pkg_publisher-0.1.6.tar.gz
- Upload date:
- Size: 18.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ced88450bad509ac507ca1b9381bca2c505eafb270f5895730ead26d61bdf94b
|
|
| MD5 |
4babf52b5eaeb5ee4e01a7daedfecc29
|
|
| BLAKE2b-256 |
e399641e81b08ed75b093310c86a992ed2e50a641a5f50536b504f538fc1ec18
|
File details
Details for the file pkg_publisher-0.1.6-py3-none-any.whl.
File metadata
- Download URL: pkg_publisher-0.1.6-py3-none-any.whl
- Upload date:
- Size: 19.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5f358cf756a2dcc6349cc75261debe29264ec3601c7271190842b220b558da31
|
|
| MD5 |
37d7676f621a28d3144a5f0239b4f5b2
|
|
| BLAKE2b-256 |
6a07903280b8b9b7fe30fd95d65abf4ebc49e7ac6f89cfacef905ee65e8607ef
|