Visitar URL original
MCPB bundles + automated MCP-registry publishing; bump to 0.8.1 by joaoh82 · Pull Request #81 · joaoh82/rustunnel · GitHub
Skip to content

MCPB bundles + automated MCP-registry publishing; bump to 0.8.1 - #81

Merged
joaoh82 merged 2 commits into
mainfrom
feat/mcp-registry-publish-action
Jun 10, 2026
Merged

joaoh82 merged 2 commits into
mainfrom
feat/mcp-registry-publish-action

Conversation

@joaoh82

@joaoh82 joaoh82 commented Jun 10, 2026

Copy link
Copy Markdown
Owner

Why

The production MCP registry rejects registryType: "cargo" — support merged upstream 2026-06-03 (registry#1207) but is live only on their staging; prod is pinned to their v1.7.9 image from 2026-05-12 with no deployment schedule. A full crawl of the live registry (11,608 servers) shows exactly five accepted package types — and MCPB is the production-proven path for binary servers (454 live packages; Rust precedent: c2pa-mcp ships one bundle per target; Go: kubeshark ships 6).

What

  • rustunnel-mcp CLI resolution (the one blocking code change): create_tunnel used to spawn rustunnel strictly via PATH. Now: RUSTUNNEL_CLI env var → sibling binary next to the executable → PATH. The MCPB bundle ships both binaries and wires them via RUSTUNNEL_CLI, so a Claude Desktop double-click install needs no separate CLI install. Spawn errors now name the resolved path and the override.
  • deploy/mcpb/: manifest template (passes official @anthropic-ai/mcpb validate), build-mcpb.sh (repacks a release archive into a .mcpb — tested against real v0.8.0 darwin/windows assets, including the relative-out-dir path CI uses), make-server-json.sh (registry packages from .mcpb.sha256 sidecars).
  • release.yml: build-mcpb job packs 5 bundles (darwin arm64/x64, linux musl-x64 / gnu-arm64, windows x64) into the release; publish-mcp-registry job publishes to the registry after the release ships.
  • publish-mcp.yml: reusable (workflow_call) + manually dispatchable with a tag input — retry a publish any time from the Actions tab. OIDC auth (no device codes), mcp-publisher pinned with checksum verification.
  • 0.8.1 version bump so the bundled binaries contain the new resolution logic.

The repo server.json keeps the cargo package as the future-facing default; the publish workflow swaps in the mcpb packages until a registry release > v1.7.9 reaches production (then cargo can be re-added to the generator).

Verification

  • make check clean; 13/13 rustunnel-mcp tests (new: CLI resolution incl. trim/empty cases)
  • build-mcpb.sh run against real v0.8.0 assets (darwin tar.gz + windows zip): bundles contain both binaries + manifest; manifests pass npx @anthropic-ai/mcpb validate; windows manifest gets .exe entry point and RUSTUNNEL_CLI
  • make-server-json.sh output validates against the registry's 2025-12-11 server.schema.json shape used by live mcpb servers
  • Code-reviewed; all findings fixed (incl. a real CI-breaking relative-path bug in the zip step, reproduced then re-verified fixed)

After merge

Tag v0.8.1 → release pipeline builds binaries + bundles + publishes to the MCP registry automatically. I can run the tag step on request.

🤖 Generated with Claude Code

joaoh82 and others added 2 commits June 10, 2026 13:23
The production MCP registry does not accept registryType "cargo" yet
(merged upstream 2026-06-03, still staging-only; prod pinned to their
v1.7.9 image from 2026-05-12). MCPB is the production-proven path for
binary servers (454 live packages; Rust precedent: c2pa-mcp ships one
bundle per target), so publish that way now and add the cargo package
back once a registry release > v1.7.9 reaches production.

- rustunnel-mcp: resolve the CLI via RUSTUNNEL_CLI env var, then a
  sibling binary next to the executable, then PATH — the MCPB bundle
  ships both binaries and wires them with RUSTUNNEL_CLI, so bundle
  installs need no separate CLI install. Spawn-failure error now names
  the resolved path and the override.
- deploy/mcpb/: manifest template (validated against the official
  @anthropic-ai/mcpb schema), build-mcpb.sh (repacks a release archive
  into a .mcpb; tested against real v0.8.0 darwin + windows assets),
  make-server-json.sh (generates registry packages from .mcpb sha256
  sidecars).
- release.yml: new build-mcpb job packs 5 bundles (darwin arm64/x64,
  linux musl-x64/gnu-arm64, windows x64) into the release; new
  publish-mcp-registry job calls publish-mcp.yml after publishing.
- publish-mcp.yml: now workflow_call + workflow_dispatch(tag) — pulls
  .mcpb checksums from the release, generates server.json, publishes
  via GitHub OIDC (no device codes). Retry any time from the Actions
  tab.
- Version 0.8.1 so the bundled binaries include the RUSTUNNEL_CLI
  resolution.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- build-mcpb.sh: resolve OUT_DIR to an absolute path up front — the zip
  step cds into the temp bundle dir, so the relative mcpb-out/ passed by
  CI produced an empty path and failed (verified fixed with a
  relative-out repack of the real v0.8.0 darwin asset)
- release.yml: replace the pipefail-fragile ls-glob archive lookup with
  explicit file tests; document the artifact-pattern overmatch and the
  glibc arm64 bundle
- publish-mcp.yml: pin mcp-publisher to v1.7.9 with checksum
  verification (job holds an OIDC publishing credential); check out the
  tag being published on manual re-runs
- rustunnel-mcp: extract pure resolve_cli_path_from() so the unit test
  stops mutating process env; trim the RUSTUNNEL_CLI override
- server.json: sync versions to 0.8.1

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@joaoh82
joaoh82 merged commit f56e1f7 into main Jun 10, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant