@@ -355,6 +355,7 @@ mcp dev teradata-mcp-server
355355## Build, Test, and Publish
356356
357357We build with ** uv** , test locally (wheel), then push to ** TestPyPI** before PyPI.
358+ The examples below use the Twine utility.
358359
359360### Versions
360361- The CLI reads its version from package metadata (` importlib.metadata ` ).
@@ -379,13 +380,13 @@ uv tool install --reinstall ./dist/teradata_mcp_server-<ver>-py3-none-any.whl
379380
380381### 3) Verify metadata/README
381382``` bash
382- twine check dist/*
383+ uvx twine check dist/*
383384```
384385
385386### 4) Publish to ** TestPyPI** (dress rehearsal)
386387``` bash
387388# Upload
388- python -m twine upload --repository testpypi dist/*
389+ uvx twine upload --repository testpypi dist/*
389390
390391# Try installing the just-published version with uvx
391392uvx --no-cache \
@@ -400,9 +401,11 @@ Notes:
400401
401402### 5) Publish to ** PyPI**
402403``` bash
403- python -m twine upload dist/*
404+ uvx twine upload dist/*
404405```
405- If you see ` File already exists ` , bump the version in ` pyproject.toml ` , rebuild, and upload again.
406+ If you see ` File already exists ` , it is either:
407+ - You haven't bumped the the version in ` pyproject.toml ` . Do so, rebuild, and upload again.
408+ - You have prior builds in the ./dist directory. Remove prior or be specify the exact version (eg. ` uvx twine upload dist/*1.4.0* ` )
406409
407410### 6) Post‑publish smoke test
408411``` bash
0 commit comments