rustsdcmcp v0.1.0 lab prerelease 3
Pre-releaseLab-only prerelease. Not a public release — v0.1.0 remains blocked until
one coherent upstream mecmcp release replaces all 59 compatibility ledger
entries.
Built from 37db74a5a0b959444d335793297d3f7b07224009 with all five shared
mecmcp crates pinned to changeset-v0.3.7.
What changed since lab.2
Nine PRs from a review pass over the initial implementation. Three were
security-relevant:
- Listener authentication hole (#5) —
--tokens-filetogether with
--allow-no-authfell through to a_ => Nonearm that dropped the token
store, producing an unauthenticated MCP listener on any bind address with no
warning.mecmcp_runtime::cli_validatedoes not catch the pair. - Cancellation was inert (#5) — every tool built a fresh
CancellationToken::new(), so the plumbing threaded through twenty client
methods was connected to nothing. Now takes rmcp'sRequestContext::ct. - No shutdown handling (#5, #12) — SIGTERM had no handler. Both listeners
now drain behind one deadline, sessions end on the process token, and the SDC
client abandons in-flight work rather than holding a drain open for the
job-poll deadline.
Also:
KNOWN_TOOLScould drift from the registered router without any test failing,
silently breaking token minting (#5)- Unknown SDC job statuses no longer fail the whole read; the vendor's string is
preserved verbatim into the audit artifact (#7) - The prepared-change envelope is digested once per apply instead of four times
(#7) - Two test assertions that could never fail were replaced (#6), and a third that
replaced them badly was fixed (#11) - systemd egress policy, with an installer probe that reports whether it is
actually enforced rather than assuming (#8, #12)
Known limitation in this build
The systemd IPAddress* egress directives are defence in depth only and are
likely inert on an unprivileged LXC: systemd implements them with cgroup eBPF
and fails open when it cannot attach. The installer now probes and reports
ENFORCED / NO POLICY / NOT ENFORCED / UNKNOWN, and
docs/operations.md covers where to enforce instead. Check with:
systemctl show rustsdcmcp.service -p IPEgressBytes --value # [no data] = inertVerify the archive
gh release download v0.1.0-lab.3 \
--repo fastrevmd-lab/rustsdcmcp \
--pattern 'rustsdcmcp_0.1.0-lab.20260805.37db74a5a0b9_amd64.tar.gz*'
sha256sum -c rustsdcmcp_0.1.0-lab.20260805.37db74a5a0b9_amd64.tar.gz.sha256BUILD-INFO in the archive records release_status=lab-only, the source commit,
and mecmcp_ref=changeset-v0.3.7; SBOM.cdx.json carries the CycloneDX
dependency set.