---
title: "Preview what an environment resolves to"
method: GET
path: "/projects/{projectId}/environments/{environmentId}/resolve"
tags: ["Environments"]
---

# Preview what an environment resolves to

`GET /projects/{projectId}/environments/{environmentId}/resolve`

Resolve an environment to the exact execution inputs a run would use right now: the host's current config, the closed server set (including servers contributed by pinned plugin versions), and the resolved plugin versions. Returns 409 when the environment cannot currently produce a runnable configuration — for example a pinned plugin was disabled or deleted; `details.code` carries the specific reason (`ENV_PLUGIN_UNAVAILABLE`, `ENV_NO_SERVERS`, `ENV_HOST_MISSING`, …).

## Path parameters

- `projectId` string, required
- `environmentId` string, required

## Response `200`

The resolved execution inputs.

- ProjectEnvironmentResolved — What an environment resolves to right now — the same resolution an eval run performs.
  - `environment` object, required
    - `id` string, required
    - `name` string, required
    - `revision` integer, required — The revision this resolution reflects.
  - `hostId` string, required
  - `hostName` string, required
  - `hostConfigId` string, required — The host's config at resolve time — hosts rotate configs live, so this can change without the environment's `revision` changing.
  - `serverAttachmentId` string
  - `sandboxImageId` string — The environment's sandbox-image pin, when set.
  - `selectedServerIds` string[], required — The closed non-plugin server set.
  - `effectiveServerIds` string[], required — `selectedServerIds` plus the servers contributed by pinned plugin versions — the set a run actually connects. Identical to `selectedServerIds` when no plugins are pinned.
  - `pluginVersions` object[], required — The resolved plugin version pins, in pin order.
    - `pluginId` string, required
    - `pluginVersionId` string, required
    - `name` string, required
    - `bundleHash` string, required
  - `servers` object[], required — Connectable projection of `effectiveServerIds`, healed to the current live servers.
    - `serverId` string, required
    - `name` string, required

## 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.
- `409` — The resource is not in a state that accepts this write — a stale `expectedRevision`, a duplicate name, or an environment that cannot currently be launched. The request was well-formed; re-read the resource and retry.
- `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/versions/b767df188d0c/schema)
