Eval runs

Get one eval suite's configuration

The suite's full settings — attached environments, hosts, execution config, judge, schedule. The list route returns run rollups instead; this is the shape the edit routes read and write.

get/projects/{projectId}/eval-suites/{suiteId}

Path parameters

projectIdstring required

ID of the hosted project that contains the server.

suiteIdstring required

Eval suite ID, as returned by POST /eval-runs.

Headers

x-mcpjam-eval-vocabulary'1' | '2'

Which vocabulary this request and its response speak. Absent means 1, which is byte-for-byte today's contract: the same request fields, the same refusals, the same response projection. 2 is the canonical vocabulary. Any other value is a 400 with code: "VALIDATION_ERROR".

Today it decides one thing: the spelling of an evaluator's policy role. Vocabulary 1 accepts and returns gating; vocabulary 2 accepts both spellings and returns the canonical required. Sending required without the header is a 400, deliberately — vocabulary 1 is not widened to meet vocabulary 2 half way, because a boundary that accepts a spelling it does not announce is one two implementations can disagree about.

A response that varies by vocabulary sends Vary: x-mcpjam-eval-vocabulary.

Response

The suite.

idstring required
declaredIdstring

The suite's declared file identity (suite.id in a suite file). Present on file-owned suites; absent on UI-authored suites, which have no declared id and cannot be claimed by eval run --file.

managedBy'ci' | 'app'

Where this suite's configuration lives. ci means it is owned by a committed suite file or by MCPJam SDK ingest, and the platform REFUSES configuration writes to it — name, settings, environments, schedule, models, skills, execution config and cases — from this API and from the app alike, with 409 CONFLICT and details.reason: "CI_OWNED_SUITE_READ_ONLY".

Running, replaying, comparing and DELETING are unaffected — deleting a suite is not editing one, and it is the only cleanup an SDK-created suite has. To change a CI-owned suite, either edit its file and send that file's suite.id as declaredSuiteId on the write, or duplicate the suite for an editable copy.

declaredId alone is not this answer: a suite created by SDK ingest is CI-owned and has no declared id.

namestring nullable
descriptionstring nullable
projectIdstring nullable
environmentIdsstring[]

Attached project environments, in attach order.

revisionNumberinteger nullable

How many committed edits this suite has had, or null on a deployment that does not record revisions. Send it back as expectedRevisionNumber on a PATCH to make that edit a compare-and-set.

createdAtnumber nullable

Epoch milliseconds.

updatedAtnumber nullable

Changes