Versioning
- The API is versioned in the path:
/v1/.... The MCP server advertises its protocol version ininitialize. v1is stable. Withinv1we only make additive, backward-compatible changes.
What is a backward-compatible (allowed within v1) change
- Adding a new endpoint, or a new optional request field.
- Adding a new field to a response object.
- Adding a new enum value only where the consumer is documented to tolerate unknown values (otherwise it’s breaking).
- Adding a new optional response header.
- Loosening a validation rule; making a required field optional.
What is a breaking change (requires a new major version)
- Removing or renaming an endpoint, field, or enum value.
- Making an optional request field required, or tightening validation.
- Changing a field’s type or a default.
- Changing authentication, scopes, or error
codesemantics.
/v2); v1 continues per the
deprecation window below.
Deprecation window
- A deprecated endpoint keeps working for at least 12 months from the day it is marked deprecated (the Sunset date).
- During that window, responses carry:
Deprecation:— HTTP-date it became deprecated.Sunset:— HTTP-date it stops responding (≥ 12 months afterDeprecation).Link: <url>; rel="deprecation"— the migration guide.
- Deprecations are announced in the changelog and to registered integrators before the headers appear.
deprecationHeaders() in
supabase/functions/_shared/deprecation.ts — a deprecated route spreads its headers
onto the response.
Currently deprecated:
The headers appear only on responses to requests that actually use the deprecated
form (an
offset parameter), so a caller already on cursors is never warned.
Status page (managed service — ops)
A public status page (managed, e.g. the Better Stack page from the health work) exposes three components — REST API, MCP server, Webhooks — with uptime + incident history. Incidents and maintenance windows are posted there. This is an operational setup, coordinated with the system-health monitoring, not application code.MCP & webhooks
- MCP follows the same additive rule; tool removals/renames are breaking and follow
the window. Protocol-version negotiation is handled in
initialize. - Webhooks: event payloads follow the additive rule (consumers ignore unknown fields); the signature scheme and header names are covered by this policy.