Skip to content

How the Registry Works

mpak’s registry connects publishers (who build MCP servers and skills) with consumers (who run them). Here’s how the pieces fit together.

Publishing:
┌──────────────┐ ┌──────────────────┐ ┌──────────────────┐
│ Your Repo │────►│ GitHub Actions │────►│ GitHub Release │
│ + manifest │ │ (mcpb-pack) │ │ (.mcpb asset) │
└──────────────┘ └────────┬─────────┘ └──────────────────┘
│ OIDC token + metadata
┌──────────────────┐
│ mpak Registry │
│ (metadata only) │
└──────────────────┘
Consuming:
┌──────────────┐ ┌──────────────────┐ ┌──────────────────┐
│ mpak CLI │────►│ mpak Registry │────►│ GitHub Release │
│ search/run │ │ (resolve pkg) │ │ (download .mcpb)│
└──────────────┘ └──────────────────┘ └──────────────────┘
┌──────────────┐
│ ~/.mpak/ │
│ cache/ │
│ (extract │
│ + run) │
└──────────────┘
  1. Add a manifest to your repo

    Create manifest.json describing your MCP server (name, version, how to run it).

  2. Add the GitHub Action

    Add the mcpb-pack action to .github/workflows/release.yml with id-token: write permission.

  3. Create a GitHub Release

    Tag your code and publish a release on GitHub.

  4. The action builds the bundle

    mcpb-pack vendors all dependencies into a .mcpb file (a zip archive).

  5. The action uploads to your release

    The .mcpb file is attached as a GitHub Release asset. You retain full control of the artifact.

  6. The action announces to mpak

    Using a GitHub OIDC token, the action tells the registry: “this package exists, here’s the metadata, here’s where to download it.”

  7. The registry verifies and records

    mpak verifies the OIDC token against GitHub’s public keys, confirms the scope matches the GitHub owner, and stores the metadata.

The registry never stores your bundle. It stores metadata: name, version, description, download URL, provenance claims, and certification results.

  1. User searches or runs

    mpak bundle search postgres queries the registry API. mpak bundle run @org/server triggers a resolve-and-run.

  2. CLI queries the registry

    The CLI calls the registry API to resolve the package name to metadata, including the download URL pointing to a GitHub Release asset.

  3. CLI downloads the bundle

    The .mcpb file is downloaded directly from GitHub Releases (not from mpak’s servers).

  4. CLI extracts and caches

    The bundle is extracted to ~/.mpak/cache/<scope>/<name>/<version>/. Subsequent runs use the cache.

  5. CLI runs the server

    The server starts using the vendored dependencies inside the bundle. No system-level installation needed.

Bundles are stored as GitHub Release assets, not on mpak’s servers. The registry stores metadata only. This means:

ConcernHow It’s Handled
CDN / bandwidthGitHub handles distribution globally
AvailabilityBundles are as available as GitHub
ControlPublishers retain full control of their artifacts
CostNo storage costs on mpak’s side
DeletionDeleting a GitHub Release removes the bundle

Every layer of the registry is designed around trust and verification:

  • Authentication: Publishing uses GitHub OIDC, not API keys. No secrets to leak.
  • Scope enforcement: Your GitHub org/username determines your package scope. Cryptographically enforced. See Naming Conventions.
  • Provenance: Every bundle has a verifiable chain from source code to published artifact. See Provenance.
  • Certification: Bundles are automatically scanned against the mpak Trust Framework. See Certification.
  • Access: The registry is public. See Access Model.