Contrib virtual workspaces for kcp.
| Component | What it serves | Image |
|---|---|---|
| access/ | SelfClusterAccessReview — "which workspaces can this user access?" in one call | ghcr.io/kcp-dev/contrib-virtual-workspaces/access-vw |
| mcp/ | Model Context Protocol as a virtual workspace, scoped to what the caller can see (uses the access VW) | ghcr.io/kcp-dev/contrib-virtual-workspaces/mcp-vw |
| ephemeral/ | Non-persisted resources: POST in, a provider webhook answers, nothing reaches etcd |
ghcr.io/kcp-dev/contrib-virtual-workspaces/ephemeral-vw |
Each component's README documents its design, deployment and limits.
- One
go.modat the root. The kcp Kubernetes fork replace block lives here once, andhack/verify-fork-pin.shchecks it against virtual-workspace-framework's. - One
Dockerfilewith a shared builder stage and one final stage per component; images are selected with--target access-vw|mcp-vw|ephemeral-vw. - The root
Makefileowns building, testing and verification (make build,make test,make verify,make images,make test-e2e-<component>). Component Makefiles keep only the local development targets that need to run next to their manifests. - CI runs one verify job, one build/test job, and one e2e job per component
(
.github/workflows/ci.yaml); images build as a three-way matrix over the Dockerfile targets (.github/workflows/images.yaml).
make build # all binaries into bin/
make build-access # or per component
make images # all three container images
make image-mcp # or per componentmake test # unit tests
make verify # gofmt, vet, fork pin, manifest rendering, tidy -diff
make test-e2e-access # kind + kcp-operator
make test-e2e-mcp # kind + kcp-operator + both VWs from this checkout
make test-e2e-ephemeral # local processes against a real kcpThis repository merges three formerly separate repositories, imported with full history:
- contrib-access-virtual-workspace →
access/ - contrib-mcp-virtual-workspace →
mcp/ - contrib-virtual-ephemeral-resources-virtual-workspace →
ephemeral/