MCP Deployment
Versioning & Releases
Vectoralix uses immutable version snapshots — closer to AWS Launch Templates than to Git tags. This page covers the active/default split, the five-table snapshot, the deletion rules, and the waterfall that decides which version a live request actually sees.
Why immutable versions
Versions are append-only snapshots: once cut, a version never changes. That gives you four things at once — instant rollback by re-activating an older version, A/B comparison without redeploying, an audit trail of what was served when, and a guarantee that "the version I tested last week" still serves bit-for-bit the same response today.
The version lifecycle
- Create — takes a transactional snapshot of the server's current state. Version numbers auto-increment from 1.
- Activate — points the live endpoint at this version. Exactly one version is active at a time; activating a new one demotes the previous active to inactive.
- Set Default — designates the fallback version. The default does not have to be the most recent one — pick whichever you trust as a known-good baseline.
- Delete — removes a version and all its child snapshot records via cascade.
Creating, activating, and setting default require mcp_servers.can_view + mcp_servers.can_edit. Deleting a version requires mcp_servers.can_view + mcp_servers.can_delete.
Active vs default
These are two distinct pointers on the server record:
- Active — what the endpoint is serving right now.
- Default — the fallback. If the active is cleared (typically by deleting it), the endpoint falls back to default automatically.
The version-1 rule
When you cut version 1 for a server, it is automatically set as both active and default. From version 2 onward, activation and default assignment are explicit clicks — Vectoralix never silently promotes a new version into production.
What gets snapshotted
Each version is materialised across four content-side tables:
- mcp_server_versions — version metadata (number, optional release note, who created it, when).
- version_contents — content records, with category names denormalised inline (renaming a category later does not rewrite history).
- version_content_relations — relations stored by slug rather than ID, so they remain meaningful as records evolve.
- version_content_groups + version_content_group_items — groups with their pivot membership frozen at cut time.
Tool configuration is deliberately not snapshotted — it is read live on every request. See "What is NOT snapshotted" below for the reasoning.
What is NOT snapshotted
- The server-to-tool pivot itself — which tools are enabled is read live on every request, not from the snapshot.
- The server's name, description, and visibility — those are server-level fields, also read live.
- Cross-server relations — a relation whose target lives on a different server is skipped, because the external record would not be reachable from this version.
Important caveat for tools: Because tool enable/disable and tool configuration are live, a tool change is not captured in version history. If you want a deliberate audit trail for tool edits, treat them as standalone releases — note them in your own changelog, not in the version release notes here.
Request-time resolution (the waterfall)
On every inbound request, the runtime resolves the version like this:
1. Is active_version_id set? yes -> serve the active version
2. Is default_version_id set? yes -> serve the default version
3. Neither set -> 503, no version available
Switching the active version is immediate — the next request observes the new snapshot. There is no rebuild, no redeploy, and no warm-up.
Deletion rules
- The default version is protected — Vectoralix refuses to delete it. To remove it, you must reassign default to another version first.
- The active version can be deleted. When that happens, the active pointer is cleared and the endpoint immediately falls back to the default version.
- A version that is neither active nor default can be deleted freely.
- Deleting a version cascade-removes all of its child snapshot rows — version_contents, relations, groups, tools — automatically.
Change tracking
- Every version records who created it and when.
- There is no automatic diff between versions; Vectoralix does not generate a changelog.
- The optional release note attached at create time is the only human-readable summary of what changed — keep it short and operational ("added Q4 onboarding bundle, removed deprecated FAQ entries").
See also
- Server Configuration — why tool changes are live and not versioned.
- Content & Resources — the source data the snapshot freezes.