---
title: "Get a plugin version"
method: GET
path: "/plugin-versions/{pluginVersionId}"
tags: ["Plugins"]
---

# Get a plugin version

`GET /plugin-versions/{pluginVersionId}`

One imported plugin version with its component projections: declared MCP servers (placement, auth timing, materialized server id) and declared skills (namespaced model refs). Addressed by the version id alone — access is membership of the version's own project, and historical versions of uninstalled plugins stay readable because eval snapshots and stale environment pins reference them.

## Path parameters

- `pluginVersionId` string, required

## Response `200`

The plugin version.

- PluginVersion — One immutable imported plugin version with its component projections.
  - `id` string, required
  - `pluginId` string, required
  - `declaredVersion` string — `manifest.version` — metadata only; `bundleHash` is the identity.
  - `bundleHash` string, required
  - `manifestHash` string
  - `status` 'staging' | 'ready' | 'invalid', required — Only `ready` versions resolve at runtime.
  - `componentCounts` object, required — Per-component tallies. `apps` counts preserved `.app.json` metadata entries only (no runtime effect).
    - `skills` number, required
    - `servers` number, required
    - `apps` number, required
    - `assets` number, required
    - `unsupported` number, required
  - `servers` object[], required — Declared MCP server components, with the project server row each one materialized as.
    - `componentId` string, required
    - `componentKey` string, required
    - `declaredName` string, required
    - `placement` 'remote' | 'local' | 'computer', required — Where the component can execute; `local`/`computer` components never run on MCPJam hosted servers.
    - `authenticationPolicy` 'on_install' | 'on_use', required
    - `materializedServerId` string, required
  - `skills` object[], required — Declared skill components, with the project skill row each one materialized as.
    - `componentId` string, required
    - `componentKey` string, required
    - `declaredName` string, required
    - `modelRef` string, required — Namespaced model-facing reference: `<plugin-name>/<skill-name>`.
    - `materializedSkillId` string, required
  - `createdAt` number, required
  - `readyAt` number

## Other responses

- `401` — Missing, invalid, revoked, or orphaned key (`UNAUTHORIZED`) — or the **target MCP server** needs an OAuth grant (`OAUTH_REQUIRED`), which is a property of the server, not your key.
- `403` — Key is valid but not allowed to do this.
- `404` — Unknown project, server, or resource.
- `429` — Per-key rate limit exceeded (60 requests/minute sustained, bursts up to 10). Honor `Retry-After` and back off with jitter.
- `500` — Something failed on MCPJam's side.
- `502` — Could not connect to the target MCP server.

---

[API](https://skmtc.net/mcpjam/apis/mcpjam-api.md) · [All operations](https://skmtc.net/mcpjam/apis/mcpjam-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/mcpjam/mcpjam-api/revisions/b8c36aef7731/schema)
