# Versioning and compatibility > How the SDK, CLI, MCP server, and React hooks version together, and how to check what an API speaks — generated from the source. `@myna-sh/sdk`, `@myna-sh/cli`, `@myna-sh/mcp`, and `@myna-sh/react` are released in lockstep: they are published together, from the same commit, carrying the same version number. Installing matching versions of any two of them is therefore just a matter of installing the same number. | Package | Version documented here | |---|---| | `@myna-sh/sdk` | 0.17.0 | | `@myna-sh/cli` | 0.17.0 | | `@myna-sh/mcp` | 0.17.0 | | `@myna-sh/react` | 0.17.0 | ## This site documents the repository, not your install These docs are generated from the source on every deploy, while npm receives tagged releases. A command or tool documented here can therefore be newer than the one you have installed. When something described here is missing locally, compare versions before assuming a bug: ```bash myna --version npm view @myna-sh/cli version ``` ## What the server speaks The API declares its own compatibility at `GET /v1/meta`. It is public and unauthenticated, so a client can check before it holds credentials: ```bash curl -s https://api.myna.sh/v1/meta ``` ```json { "data": { "apiVersion": "2026-08-31", "minClientVersion": "0.16.0", "capabilities": [ "assets", "assets.images", "assets.similar", "auth.whoami.scopes", "auth.passkeys", "auth.reauth", "billing", "change-sets", "change-sets.checks", "change-sets.checks.auto", "change-sets.checks.external", "change-sets.checks.policy", "change-sets.checks.settings-ui", "change-sets.checks.pending", "change-sets.actor-identity", "change-sets.comments", "change-sets.diff", "change-sets.diff.words", "change-sets.concurrent", "change-sets.rebase", "change-sets.ready-for-review", "change-sets.reviews", "change-sets.schedule", "entries.bulk", "entries.duplicate", "entries.import", "entries.import.upsert", "entries.reorder", "entries.references", "entries.search", "entries.restore", "entries.contention", "keys.collection-scope", "localization", "localization.filters", "localization.coverage", "mcp.hosted", "mcp.oauth", "plans.internal", "products", "keys.admin-all", "feedback", "feedback.boards", "feedback.ingest", "feedback.ingest.signed-identity", "feedback.identity.properties", "feedback.boards.require-identity", "feedback.keys.project-scope", "feedback.keys.rotate", "feedback.read-back", "feedback.reporters", "feedback.attachments", "feedback.similar", "feedback.retest", "analytics", "analytics.ingest", "analytics.content", "analytics.release-impact", "analytics.friction", "analytics.funnels", "analytics.catalog", "analytics.retention", "guidance", "releases", "releases.revert", "previews", "previews.overlay", "projects.cors-check", "projects.access-check", "projects.export", "projects.origins", "content.references", "github.app", "content.at", "projects.views", "schema.drift", "schema.promote", "schema.push", "webhooks", "webhooks.headers", "webhooks.body-template" ] } } ``` | Field | Meaning | |---|---| | `apiVersion` | Dated version of the HTTP surface. Changes when an observable request or response shape changes. | | `minClientVersion` | Oldest `@myna-sh/*` release this API supports. Below it, upgrade before filing a bug. | | `capabilities` | Features to branch on. Entries are added when a feature ships and removed only with an `apiVersion` bump. | ## Capabilities | Capability | Available | |---|---| | `assets` | yes | | `assets.images` | yes | | `assets.similar` | yes | | `auth.whoami.scopes` | yes | | `auth.passkeys` | yes | | `auth.reauth` | yes | | `billing` | yes | | `change-sets` | yes | | `change-sets.checks` | yes | | `change-sets.checks.auto` | yes | | `change-sets.checks.external` | yes | | `change-sets.checks.policy` | yes | | `change-sets.checks.settings-ui` | yes | | `change-sets.checks.pending` | yes | | `change-sets.actor-identity` | yes | | `change-sets.comments` | yes | | `change-sets.diff` | yes | | `change-sets.diff.words` | yes | | `change-sets.concurrent` | yes | | `change-sets.rebase` | yes | | `change-sets.ready-for-review` | yes | | `change-sets.reviews` | yes | | `change-sets.schedule` | yes | | `entries.bulk` | yes | | `entries.duplicate` | yes | | `entries.import` | yes | | `entries.import.upsert` | yes | | `entries.reorder` | yes | | `entries.references` | yes | | `entries.search` | yes | | `entries.restore` | yes | | `entries.contention` | yes | | `keys.collection-scope` | yes | | `localization` | yes | | `localization.filters` | yes | | `localization.coverage` | yes | | `mcp.hosted` | yes | | `mcp.oauth` | yes | | `plans.internal` | yes | | `products` | yes | | `keys.admin-all` | yes | | `feedback` | yes | | `feedback.boards` | yes | | `feedback.ingest` | yes | | `feedback.ingest.signed-identity` | yes | | `feedback.identity.properties` | yes | | `feedback.boards.require-identity` | yes | | `feedback.keys.project-scope` | yes | | `feedback.keys.rotate` | yes | | `feedback.read-back` | yes | | `feedback.reporters` | yes | | `feedback.attachments` | yes | | `feedback.similar` | yes | | `feedback.retest` | yes | | `analytics` | yes | | `analytics.ingest` | yes | | `analytics.content` | yes | | `analytics.release-impact` | yes | | `analytics.friction` | yes | | `analytics.funnels` | yes | | `analytics.catalog` | yes | | `analytics.retention` | yes | | `guidance` | yes | | `releases` | yes | | `releases.revert` | yes | | `previews` | yes | | `previews.overlay` | yes | | `projects.cors-check` | yes | | `projects.access-check` | yes | | `projects.export` | yes | | `projects.origins` | yes | | `content.references` | yes | | `github.app` | yes | | `content.at` | yes | | `projects.views` | yes | | `schema.drift` | yes | | `schema.promote` | yes | | `schema.push` | yes | | `webhooks` | yes | | `webhooks.headers` | yes | | `webhooks.body-template` | yes | Treat an absent capability as absent, not as an error: a client written against a newer API should degrade rather than fail when it talks to an older one.