Before the first release, configure PyPI Trusted Publishing:
- Go to https://pypi.org/manage/account/publishing/
- Add a new pending publisher:
- PyPI project name:
mcp-server-python-docs - Owner: your GitHub username or org
- Repository:
python-docs-mcp-server - Workflow name:
release.yml - Environment name:
pypi
- PyPI project name:
- In the GitHub repo, go to Settings > Environments
- Create an environment named
pypi - (Optional) Add environment protection rules:
- Required reviewers (recommended for first release)
- Deployment branches: only
maintags
Runtime coverage: The release workflow builds and tests against Python 3.13 only.
Python 3.12 is covered by the CI workflow (ci.yml) which runs a 2x2 matrix
(3.12/3.13 x ubuntu/macos) on every push to main. Since tags are created
from commits that have already passed CI, 3.12 compatibility is verified before
the release workflow runs. This is an accepted trade-off to keep the release
artifact pipeline simple (single Python version produces the wheel).
Documentation coverage: The full docs index target is Python documentation versions 3.10 through 3.14.
-
Ensure all tests pass on main:
uv run pytest --tb=short -q uv run ruff check src/ tests/ uv run pyright src/
-
Verify the version in
pyproject.tomlis correct:grep '^version' pyproject.toml # Should show: version = "0.1.0"
-
Create and push the tag:
git tag -a v0.1.0 -m "Release v0.1.0" git push origin v0.1.0 -
Monitor the release workflow at: https://github.com//python-docs-mcp-server/actions/workflows/release.yml
-
Verify the package on PyPI: https://pypi.org/project/mcp-server-python-docs/0.1.0/
After the package is published:
# In a fresh environment:
uvx mcp-server-python-docs --version
# Should print: 0.1.0
# Or via pipx:
pipx run mcp-server-python-docs --version
# Should print: 0.1.0Complete these steps in order. Each step has a checkbox -- do not skip ahead.
- All CI tests green on main: check https://github.com//python-docs-mcp-server/actions/workflows/ci.yml
- Local test suite passes:
uv run pytest --tb=short -q
- Version in
pyproject.tomlis0.1.0:grep '^version' pyproject.toml - Integration tests from
.github/INTEGRATION-TEST.mdare complete and signed off - Doctor subcommand passes:
mcp-server-python-docs doctor
- PyPI pending publisher configured at https://pypi.org/manage/account/publishing/:
- PyPI project name:
mcp-server-python-docs - Owner:
<your-github-username> - Repository:
python-docs-mcp-server - Workflow name:
release.yml - Environment name:
pypi
- PyPI project name:
- GitHub environment
pypicreated in repo Settings > Environments
- Create the annotated tag:
git tag -a v0.1.0 -m "Release v0.1.0 First public release of mcp-server-python-docs. A read-only, version-aware MCP retrieval server over Python standard library documentation (3.10 through 3.14). Installable via: uvx mcp-server-python-docs"
- Push the tag to trigger the release workflow:
git push origin v0.1.0
- Monitor the workflow run: https://github.com//python-docs-mcp-server/actions/workflows/release.yml
- Verify all three jobs pass:
build->publish->github-release
- Package visible on PyPI: https://pypi.org/project/mcp-server-python-docs/0.1.0/
- Attestation visible on PyPI package page (look for "Provenance" badge)
- Fresh install test:
# Clear any cached version uv cache clean mcp-server-python-docs 2>/dev/null || true # Install and verify version uvx mcp-server-python-docs --version # Expected output: 0.1.0
- Full README flow test (from a clean environment):
# Step 1: Install uvx mcp-server-python-docs --version # Should print 0.1.0 # Step 2: Build index uvx mcp-server-python-docs build-index --versions 3.10,3.11,3.12,3.13,3.14 # Should complete successfully # Step 3: Doctor check uvx mcp-server-python-docs doctor # All checks should PASS
- Slow E2E workflow passes:
- Run GitHub Actions workflow
Slow E2E - Confirm Python 3.13 and Python 3.14 jobs both pass
- Confirm each job installs the built wheel, runs
build-index --versions 3.10,3.11,3.12,3.13,3.14,doctor, andvalidate-corpus
- Run GitHub Actions workflow
- Claude Desktop test with published package:
Configure
mcpServerswithuvx mcp-server-python-docsand verify "what is asyncio.TaskGroup" returns a correct hit
- GitHub Release exists with attached artifacts
- PyPI page shows 0.1.0 with attestation
- README install instructions verified end-to-end
- Slow E2E workflow passed for the release candidate
- Tag v0.1.0 exists in git
Release date: _______________ Released by: _______________