This release is a pre-release and may not be stable for production use.
clops-mcp — deployment scaffold
This branch is not the project. It is the smallest thing that can be released, existing only to prove the release pipeline works before the real code goes anywhere near it.
The real package lives on main.
Why this exists
The release workflow has run exactly once, on v0.2.0, and failed at the
publish step. Publishing is the part of a release you cannot rehearse by
reading it — trusted publishing either authenticates or it doesn't, and you find
out at the moment you least want to.
So: rehearse it with something disposable. This branch has no history, no runtime, and nothing worth reviewing. Tag it, watch the pipeline run end to end, fix whatever breaks, and repeat until it's boring. Then migrate the real code in knowing the deployment already works.
What it contains
pyproject.toml name = clops-mcp, version = 0.0.1a1
clops/__init__.py __version__ only
clops/_scaffold.py prints where it was installed from, exits 0
.github/workflows/release.yml
LICENSE
README.md
That is everything. No tests, no docs, no dependencies.
What tagging it proves
Each of these has failed for somebody, and none is provable by inspection:
- The tag/version guard rejects a tag that disagrees with
pyproject.toml. uv buildproduces a wheel and an sdist.- The wheel installs into a clean venv and imports from the wheel — note the
-Pflag in the workflow. Without it,python -puts the current directory onsys.path, the job's checkout shadows the installed package, and the smoke test silently checks the source tree instead. This bug was live in the real workflow. uvx clops-mcpresolves.uvx <name>runs an executable also named<name>, so a distribution calledclops-mcpneeds a script calledclops-mcp. It didn't have one, anduvx clops— the obvious next guess — installs an unrelated project from PyPI.- OIDC trusted publishing authenticates with no token stored anywhere.
- The published artifact is installable by a stranger, which is a different claim from "the upload succeeded".
gh release createworks with the workflow's own token.
Setup, once
On pypi.org:
Account settings → Publishing → Add a pending publisher
Field Value PyPI Project Name clops-mcpOwner clops-mcpRepository clops-mcpWorkflow release.ymlEnvironment (blank)
"Pending" is the right kind: it authorises a project that does not exist yet, and the first successful publish creates it.
Running it
git push origin scaffold/deploy-proof
git tag v0.0.1a1
git push origin v0.0.1a1
Watch: gh run watch
To run it again, bump both the version in pyproject.toml and the tag —
0.0.1a3, 0.0.1a4, and so on. PyPI will not accept a version it already has,
and this is the single most common way a second release attempt fails. Note the
asymmetry with the TestPyPI rehearsal: a burned version number on real PyPI is
burned permanently.
Already proven on TestPyPI
This exact pipeline ran green against TestPyPI as clops-mcp 0.0.1a1: built,
smoke-tested the wheel, published, installed itself back down from the index,
and cut a GitHub release. Only the publish target changed for real PyPI.
Worth recording, because it will happen again: the first attempt failed at
the publish step with 503 Service Unavailable. uv reports that as
"is trusted publishing correctly configured?", which is a guess — the
configuration was correct, and the index was briefly in maintenance. A re-run
seconds later went straight through. Check whether the index is actually up
before you go rewriting a publisher config that was never wrong.
Version numbers
0.0.1a2 is a pre-release, so pip install clops-mcp will not resolve to it
without --pre. A scaffold cannot become somebody's accidental install. The real
package starts at 0.3.0, which sorts above every 0.0.1aN.
The point of publishing a stub at all is to claim the distribution name
before someone else does. clops on PyPI is already an unrelated project;
clops-mcp should not go the same way.
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 clops_mcp-0.0.1a2.tar.gz.
File metadata
- Download URL: clops_mcp-0.0.1a2.tar.gz
- Upload date:
- Size: 8.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
90abc4e22298143e6084413f69c5c55be2ea7089c87f5967ca18021d80fe9370
|
|
| MD5 |
122bbab17666a4f49a8d7d2b54b2dd1d
|
|
| BLAKE2b-256 |
bb9be9f104cdd775f52eb6f96f6cba4edcdb9a947e66bdfc74651caa4e0fae82
|
File details
Details for the file clops_mcp-0.0.1a2-py3-none-any.whl.
File metadata
- Download URL: clops_mcp-0.0.1a2-py3-none-any.whl
- Upload date:
- Size: 8.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6d7b0743036427f6f0693b677293f5564be6c9773712a72b1b6eee212ffc676f
|
|
| MD5 |
67ef40ea933cf43821d37bf8a98c1a7a
|
|
| BLAKE2b-256 |
9e0480c172d6a51fcf87c64695ff765fefa438f32bca3c6f545946b9c3d7db7e
|