dcc-mcp-cli-bin — PyPI wrapper for the dcc-mcp-cli binary
This directory builds the dcc-mcp-cli PyPI project: one platform-specific
wheel per release that puts the Rust CLI on PATH.
# Run it without installing anything
uvx dcc-mcp-cli --version
# Or install it into a tool environment / venv
uv tool install dcc-mcp-cli
pip install dcc-mcp-cli
Why a wrapper instead of a raw binary wheel?
pkg/dcc-mcp-server-bin ships its raw executable through maturin's
bindings = "bin". dcc-mcp-cli deliberately does not:
| Raw binary wheel | This wrapper | |
|---|---|---|
| Per-release PyPI storage | ~165 MB (three platforms) | ~66 MB (three platforms) |
| PyPI 10 GB budget | ~60 releases | ~152 releases |
| Payload | the executable | the release zip, unpacked on first use |
The wheel embeds the same dcc-mcp-cli-<version>-<platform>.zip the GitHub
Release publishes, verifies its SHA-256 against payload.json, and unpacks it
into the environment's scripts directory on the first invocation.
Layout
pkg/dcc-mcp-cli-bin/
├── pyproject.toml # hatchling; console script dcc-mcp-cli
├── python/dcc_mcp_cli/
│ ├── __init__.py # public API: binary_path(), main()
│ ├── __main__.py # python -m dcc_mcp_cli
│ ├── _bootstrap.py # unpack + exec
│ └── _payload/ # staged at build time, git-ignored
│ ├── payload.json
│ └── dcc-mcp-cli-<version>-<platform>.zip
└── tests/test_cli_bootstrap.py
Where the binary lands, and why it matters
The bootstrap unpacks the executable into the scripts directory of the
interpreter that installed the wheel — <venv>/bin on POSIX,
<venv>\Scripts on Windows — and then executes it. Consequences:
- Component contract.
current_exe.parent()resolves to that directory, sodcc-mcp-cli components ensure dcc-cuainstallsdcc-cuaas a sibling and detects it on the next run. A package manager must therefore keep the CLI in a single directory; unpacking intosite-packageswould break it. - POSIX vs Windows naming. On POSIX the unpacked binary replaces the
console script, so
dcc-mcp-clibecomes the native executable directly. On Windows the pip-generateddcc-mcp-cli.exelauncher is the running process image and cannot be replaced while mapped, so the binary is unpacked asdcc-mcp-cli-bin.exeand the launcher execs it. - Read-only prefixes. If the scripts directory is not writable, the
bootstrap falls back to a per-user directory
(
~/.local/share/dcc-mcp-cli/bin, or%LOCALAPPDATA%\dcc-mcp-cli\bin). SetDCC_MCP_CLI_BIN_DIRto pin the location explicitly.
dcc-cua is intentionally not distributed here. It is an independently
released companion executable that dcc-mcp-cli components ensure reconciles
by version next to the CLI; shipping it as a second distribution would create
two copies and version drift.
Self-update is disabled
The bootstrap writes dcc-mcp-cli.package-manager.json next to the unpacked
binary. crates/dcc-mcp-cli reads that marker and refuses update apply:
error: this dcc-mcp-cli was installed by a package manager (pypi)
The GitHub Release build keeps self-update; the package-manager build does
not, because replacing current_exe would fight the package manager's version
authority. Upgrade through the package manager instead:
uv tool upgrade dcc-mcp-cli
pipx upgrade dcc-mcp-cli
pip install --upgrade dcc-mcp-cli
Building locally
# 1. Build the release archive (example: current platform)
cargo build --release -p dcc-mcp-cli
python scripts/release/build_standalone_bundle.py \
--version 0.20.34 \
--platform windows-x86_64 \
--binary-name dcc-mcp-cli \
--binary-path target/release/dcc-mcp-cli.exe \
--out-dir dist
# 2. Stage the archive and build the retagged wheel
python -m pip install "build>=1.2" "hatchling>=1.25" "wheel>=0.46"
python scripts/release/build_cli_wrapper_wheel.py \
--version 0.20.34 \
--platform windows-x86_64 \
--zip dist/dcc-mcp-cli-0.20.34-windows-x86_64.zip \
--out-dir wheels
python scripts/release/cli_wheel_tags.py validate --wheel-dir wheels --version 0.20.34
CI runs the same three steps in the build-cli-wheels job of
.github/workflows/release.yml, once per platform, from the archives the
build-binaries job already produced.
Python compatibility
The bootstrap is pure Python with no third-party imports and runs unchanged on
Python 3.7 (Maya 2022), so the project's LTS floor applies: the wheel declares
Requires-Python: >=3.7 and carries the full 3.7–3.14 classifier set. The
binary it unpacks has no CPython ABI dependency — the interpreter only ever
starts it as a child process.
Release files for dcc-mcp-cli 0.20.35
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| dcc_mcp_cli-0.20.35-py3-none-win_amd64.whl | Python 3 | none | Windows x86-64 | Details |
| dcc_mcp_cli-0.20.35-py3-none-manylinux_2_39_x86_64.whl | Python 3 | none | Linux glibc 2.39+ x86-64 | Details |
| dcc_mcp_cli-0.20.35-py3-none-macosx_11_0_universal2.whl | Python 3 | none | macOS 11.0+ universal2 (ARM64, x86-64) | Details |
Total release size: 65.9 MB
Release files / dcc_mcp_cli-0.20.35-py3-none-win_amd64.whl
| Download URL | dcc_mcp_cli-0.20.35-py3-none-win_amd64.whl |
|---|---|
| Size | 16.0 MB |
| Tags | Python 3 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
ab121fd26dd81eb770cb5e212cf7d5c9911e610588d5b43c59597c7be17ae8f7
|
|
BLAKE2b-256 checksum How to use checksums |
d27c6ff4e51e4af6cd9719ac5c3f6153d6280f2d805b63cd23f9ecab4bcb6049
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 26, 2026.
Transparency logRelease files / dcc_mcp_cli-0.20.35-py3-none-manylinux_2_39_x86_64.whl
| Download URL | dcc_mcp_cli-0.20.35-py3-none-manylinux_2_39_x86_64.whl |
|---|---|
| Size | 17.0 MB |
| Tags | Linux glibc 2.39+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
de213793b067dc5e396ce9d393c59e7e9571a72b41a71627a61f65e4a3e59f21
|
|
BLAKE2b-256 checksum How to use checksums |
23bec763ecd686cb5620bb22435e7a533f975fe39d1272effd6a456c3cf5c244
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 26, 2026.
Transparency logRelease files / dcc_mcp_cli-0.20.35-py3-none-macosx_11_0_universal2.whl
| Download URL | dcc_mcp_cli-0.20.35-py3-none-macosx_11_0_universal2.whl |
|---|---|
| Size | 32.9 MB |
| Tags | Python 3 macOS 11.0+ universal2 (ARM64, x86-64) |
|
SHA-256 checksum How to use checksums |
23ba02e1f81dcc131a62e76d01effd30024dac021216bbf60b3681a043a659af
|
|
BLAKE2b-256 checksum How to use checksums |
da51d46d10f0e1105c59883be14ee437bcda373c64e285c5fa739666a6905b89
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 26, 2026.
Transparency log