Skip to content

Access Model

mpak is a public registry. Understanding what’s public, what’s authenticated, and how scope enforcement works helps you publish and consume with confidence.

All bundles published to mpak are public. Anyone can search, view, download, and run them without creating an account or authenticating.

This is by design. The goal is zero-friction distribution: if someone finds your package, they should be able to use it immediately.

All read operations are unauthenticated:

Operation Auth Required Example
Search packages No mpak bundle search postgres
View package details No mpak bundle show @org/server
Download bundles No mpak bundle pull @org/server
Run bundles No mpak bundle run @org/server
Browse mpak.dev No Visit mpak.dev
Query the API No GET registry.mpak.dev/v1/bundles/search

No API keys, no tokens, no accounts needed for consuming packages.

Publishing is authenticated via GitHub Actions OIDC tokens. There are no user accounts, no API keys, and no manual enrollment.

When you publish:

  1. Your GitHub Action requests an OIDC token from GitHub
  2. The token contains cryptographic claims about: which repository, which workflow, which commit
  3. The mcpb-pack action sends this token to mpak when announcing
  4. mpak verifies the token against GitHub’s public JWKS endpoint
  5. If valid, the package is registered under the scope matching the GitHub owner

This means:

  • No secrets to manage: No API keys to rotate or leak
  • No registration: Your GitHub identity is your mpak identity
  • No impersonation: Only code running in your GitHub Actions can publish to your scope
  • Full auditability: Every publish is tied to a specific repo, workflow, and commit

See Provenance for details on the cryptographic verification chain.

The registry enforces that your package scope matches your GitHub owner:

GitHub Owner Can Publish To Cannot Publish To
NimbleBrainInc @nimblebraininc/* @someoneelse/*
johndoe @johndoe/* @nimblebraininc/*

This is verified at the OIDC token level. The claim repository_owner in the GitHub OIDC token must match the package scope. There is no override, no admin bypass, no exception.

See Naming Conventions for scope format rules.