Local package -> Docker image workflow¶
This guide walks through building Node Wire packages locally (as wheels) and using those wheels to build the Docker images in docker/.
The Dockerfiles in this repo install local wheel artifacts from packages/**/dist/*.whl, so you must build wheels first.
Prerequisites¶
- Python 3.11+ available in your shell
- Docker installed and running
- Build tooling installed:
Run all commands from the repository root:
1) Build wheel packages locally¶
Build all runtime + connector wheels:
Build only specific packages (faster when iterating):
bash scripts/build-packages.sh \
packages/runtime \
packages/connectors/smtp \
packages/connectors/stripe
The script (scripts/build-packages.sh in default mode, not --all):
- builds host wheels and Linux-compatible wheels (via Docker),
- writes artifacts under each package's dist/ folder,
- fails if any .py source files leak into a wheel.
For optional local cibuildwheel builds (broader wheel matrix on your host), see Optional: broader wheels in docs/packaging.md.
2) Confirm wheel artifacts exist¶
Quick check (example for SMTP):
ls packages/runtime/dist/*.whl
ls packages/connectors/smtp/dist/*.whl
ls packages/connectors/stripe/dist/*.whl
If ls fails, rebuild that package before continuing.
3) Build Docker images from local wheels¶
Build all MCP connector images¶
With explicit version tag:
This builds:
- nw-google-drive
- nw-smartonfhir-epic
- nw-smartonfhir-cerner
- nw-smtp
- nw-stripe
- nw-salesforce
- nw-slack
Build one image manually¶
Wheel requirements by image¶
Each Dockerfile expects specific wheel files to exist in dist/. Keep this table in sync with the Dockerfiles in docker/ — add a row here whenever you add a Tier 3 standalone MCP image (see connectors.md — Step 12).
| Image | Required wheels |
|---|---|
docker/smtp/Dockerfile |
packages/runtime/dist/*.whl, packages/connectors/smtp/dist/*.whl |
docker/google-drive/Dockerfile |
packages/runtime/dist/*.whl, packages/connectors/google_drive/dist/*.whl |
docker/fhir-epic/Dockerfile |
packages/runtime/dist/*.whl, packages/connectors/fhir_epic/dist/*.whl |
docker/fhir-cerner/Dockerfile |
packages/runtime/dist/*.whl, packages/connectors/fhir_cerner/dist/*.whl |
docker/stripe/Dockerfile |
packages/runtime/dist/*.whl, packages/connectors/stripe/dist/*.whl |
docker/salesforce/Dockerfile |
packages/runtime/dist/*.whl, packages/connectors/salesforce/dist/*.whl |
docker/slack/Dockerfile |
packages/runtime/dist/*.whl, packages/connectors/slack/dist/*.whl |
Dockerfile (unified MCP server) |
runtime + connector wheels (http_generic, stripe, smtp, slack, google_drive, fhir_epic, fhir_cerner) |
Common failures and fixes¶
COPY ... dist/*.whl failed: no source files were specified¶
A required wheel is missing. Re-run scripts/build-packages.sh for the missing package(s), then rebuild the image.
Docker build cannot find src/ or config/¶
Use repo root as build context (.):
Do not run docker build from inside docker/<name>/.
Docker daemon not running¶
Start Docker Desktop (or daemon) and retry package/image builds.