Image and packaging
A single Dockerfile builds the one generic runtime image,
distroless and nonroot. The spec is mounted or COPYed in and named on the
command line, so the same binary drives every .mcp.kdl.
Building is a CI consequence of a landed commit. The publish job builds on
every push to main and publishes the private single-architecture image as
forgejo.coilysiren.me/coilyco-flight-deck/mcp-beaver:<full-source-sha>. One
image serves every guardfile and publishes only when runtime source changes.
The trusted deploy runner owns the package-write credential, verifies the
remote manifest, and hands the exact reference to deploy. Fleet consumers use a
separate read-only credential. See ci.md.
Examples
forgejo-issues.mcp.kdl- the worked hello world: five guarded issue tools scoped tocoilyco-*andkai.skillsmp.mcp.kdl- two read tools over the SDK-backed transport.*.values.yaml- auth-neutral chart values: a ClusterIP read surface and an optional NodePort write surface.upstream.values.yaml- an allowlisted upstream proxy with a co-located MCP container.
Not yet built
actioncomposition - one tool chaining several ops, deferred until opcore exposes a composed chain.- Tool-name disambiguation -
verb_resourceis lossy when a resource carries its own separator, and unprefixed across multiply-mounted servers. A naming follow-up, not a guard concern.
See also: chart.md.