Skip to main content

A Model Context Protocol (MCP) service for building and publishing Python packages to PyPI

Project description

pkg-publisher

更新日期: 2026-01-29 版本: 0.1.5

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): 仓库名称,pypitestpypi,默认 pypi
  • skip_existing (boolean, optional): 是否跳过已存在的版本,默认 false
  • project_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): 仓库名称,pypitestpypi,默认 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

pkg_publisher-0.1.5.tar.gz (18.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pkg_publisher-0.1.5-py3-none-any.whl (19.0 kB view details)

Uploaded Python 3

File details

Details for the file pkg_publisher-0.1.5.tar.gz.

File metadata

  • Download URL: pkg_publisher-0.1.5.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

Hashes for pkg_publisher-0.1.5.tar.gz
Algorithm Hash digest
SHA256 6ea869e5f9e0ac4cf1dc887fbe4ba5f254cdef611e43c972d6b441e304a13dd5
MD5 9d6db6076ce9adbf2a434251a3e34b0a
BLAKE2b-256 c8e9d383ccbcb4c855375a227f80c91b15f747a99b5b2d6fe4f7a7097af1820f

See more details on using hashes here.

File details

Details for the file pkg_publisher-0.1.5-py3-none-any.whl.

File metadata

  • Download URL: pkg_publisher-0.1.5-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

Hashes for pkg_publisher-0.1.5-py3-none-any.whl
Algorithm Hash digest
SHA256 731f5002d8a9e66e73983ca30ef1ea83c56f94dce1716ab3507b16cce16e9f6b
MD5 42e35caadb7941fa0f4f78106b5be9c8
BLAKE2b-256 6b2e738e4553ee6070c59c1d9e7d6a51e6c87f38c972d62f8817d31eec585962

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page