Skip to content

Versioning

mpak uses semantic versioning (semver) for all packages. Understanding how versions work helps you publish reliably and consume safely.

Every package version follows MAJOR.MINOR.PATCH:

BumpWhenExample
MAJORBreaking changes (removed tools, changed behavior)1.0.0 -> 2.0.0
MINORNew features (added tools, new capabilities)1.0.0 -> 1.1.0
PATCHBug fixes (no behavior change)1.0.0 -> 1.0.1

For MCP servers, a “breaking change” means: tools were removed, tool schemas changed incompatibly, or required configuration changed.

When you run a package without specifying a version, mpak resolves to the latest published version:

Terminal window
# Gets the latest version
mpak bundle run @org/server
# Gets a specific version
mpak bundle run @org/server@1.2.0

Pin to a specific version in your MCP client configuration to ensure reproducible behavior:

{
"mcpServers": {
"postgres": {
"command": "mpak",
"args": ["bundle", "run", "@nimblebraininc/postgres-mcp@1.2.0"]
}
}
}

This guarantees the same version runs every time, regardless of newer releases.

When to pin:

  • Production environments where stability matters
  • CI/CD pipelines where reproducibility is critical
  • When a specific version is known to work with your setup

When not to pin:

  • Development environments where you want the latest features
  • When you’re evaluating a package for the first time

Once a version is published, it cannot be overwritten. Publishing @org/server@1.0.0 a second time will be rejected by the registry.

This is critical for supply chain security: if you’ve verified that @org/server@1.0.0 is safe, you can trust that it won’t change.

To fix a bug in a published version, publish a new version:

1.0.0 <- published, immutable
1.0.1 <- bug fix

Deprecation marks a version or package as no longer recommended. Deprecated packages still work (they can be downloaded and run) but display a warning.