feat(release): ship MCPB bundles and publish them to the MCP Registry (#1246) - #1547
Merged
Conversation
…#1246) Every release now carries .mcpb one-click-install bundles alongside the archives, and the MCP Registry entry lists them with per-file sha256: - package-release.sh (canonical) builds codebase-memory-mcp-<target>.mcpb for darwin/windows and the STATIC linux builds — manifest.json + the same staged (stripped, gated) binary + LICENSE + THIRD_PARTY_NOTICES.md. The glibc-dynamic linux targets stay archive-only: a dynamic binary defeats the one-click promise. - _build.yml / release-draft: bundles flow through provenance attestation, checksums.txt, cosign signing and the release asset list; checksums.txt is also preserved as a same-run artifact for the registry job. - verify: the canonical scan matrix grows to 14 containers; MCPB manifests are validated (parse, binary server, entry_point member, command binds the entry point). Bundle binaries dedupe to the archive scan objects, so the VT gate gains only the three distinct manifest.json files. - publish-mcp-registry: gen-mcpb-registry-entries.sh appends one mcpb package entry per bundle (release-asset URL + fileSha256 from the attested checksums) to server.json before mcp-publisher runs. Idempotent; a checksums file without bundles is a hard failure. - contracts: Step 0o pins the bundle shape at its producer on every leg, Step 0p pins the registry entries against the live server.json, and the extractor contract covers the 14-container matrix incl. broken-manifest fail-closed cases. The linux test image gains zip for the packager. Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
core.filemode=false hid the +x here, and release.yml invokes the registry-entries generator directly — a 644 mode would fail the publish job the first time it runs. Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Implements the MCPB half of discussion #1246: every release now ships
.mcpbone-click-install bundles, and our MCP Registry entry advertises them with per-file SHA-256.What ships
scripts/package-release.sh(the canonical packaging step) buildscodebase-memory-mcp-<target>.mcpbfor darwin arm64/amd64, windows amd64/arm64, and the static linux builds —manifest.json+ the same staged (stripped, composition-gated) binary + LICENSE + third-party notices. The glibc-dynamic linux targets stay archive-only: a dynamic binary defeats the one-click promise.checksums.txt, cosign signing, and the release asset list. The verify job's canonical scan matrix grows from 8 to 14 containers, and MCPB manifests are structurally validated (parse, binary server type, entry_point is a member, command binds the entry point). Bundle binaries are byte-identical to the archive binaries, so the VirusTotal scan set dedupes them — the only new scan objects are the three distinctmanifest.jsonfiles.publish-mcp-registry: a newscripts/ci/gen-mcpb-registry-entries.shappends onemcpbpackage entry per bundle (release-asset URL +fileSha256from the attested checksums, delivered as a same-run workflow artifact) toserver.jsonbeforemcp-publisher publish. Idempotent on re-runs; a checksums file without bundles is a hard failure rather than a silent un-listing.Verification
server.json; the extractor contract covers the 14-container matrix including broken-manifest fail-closed cases.zipfor the packager (the only new tool dependency; the registry-entries generator is pure python3).The registry
mcpbpackage type requires GitHub-release hosting, afileSha256per artifact, and "mcp" in the URL — all satisfied here (clients verify the hash before installation). The end-to-end publish path proves out on the next stable release.OCI (the other open item from #1246) is intentionally not part of this PR.