Skip to main content
GET
Get one eval case

Authorizations

Authorization
string
header
required

MCPJam API key (sk_…). Create one at Settings → API keys. Guest sessions cannot use the API, and API keys cannot manage other API keys.

Headers

x-mcpjam-eval-vocabulary
enum<string>

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.

Available options:
1,
2

Path Parameters

projectId
string
required

ID of the hosted project that contains the server.

suiteId
string
required

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

caseId
string
required

Eval case id.

Response

The case.

A persisted eval case, in the public steps-first shape. Note this is NOT EvalTestCase, which is the INLINE authoring shape accepted by suite creation.

id
string
required
title
string
required
steps
object[]
required

Ordered test steps. A prompt step is a model turn; a single model-free toolCall step is a render-check; assert steps hold the expectations.

Minimum array length: 1
iterations
integer
required
Required range: 1 <= x <= 10
isNegative
boolean
required

When true, the case passes if NO tools are called.

models
object[]
required
judge
object

Per-case judge override. enabled: false skips goal-completion grading for this case.

declaredId
string

The case's effective declared id. Absent on cases authored before declared identity existed.

expectedOutput
string
repetitions
integer

Trials this case runs under per-case grading, overriding the suite default. Absent means the case inherits it. NOT a second spelling of iterations: that one is read as a FLOOR (max(iterations, suite.minimumIterations)) by a suite decided on suite-wide accuracy, and a per-case-graded case still reports it for compatibility. This one REPLACES the count rather than raising it — a case at 7 runs 7 times under a floor of 3 and 3 times under a default of 3.

Required range: x >= 1
passThreshold
number

Fraction of this case's trials that must pass, overriding the suite default. Absent means the case inherits it. Never derived from the suite's minimumAccuracy, which is a PERCENT under a different resolver.

Required range: 0 <= x <= 1
scenario
string
intent
string

Optional authored analytics grouping label. Must be already trimmed; absent means unlabelled.

Required string length: 1 - 64
Pattern: ^\S(?:[\s\S]*\S)?$
kind
enum<string>

Authored case kind for the simple editor. Absent means the editor derives it from matchOptions.

Available options:
capability,
regression
matchOptions
object

Absent when the case sets none — omitted from the response rather than sent as null.

checks
object

Absent when the case sets none — omitted from the response rather than sent as null.

import
object

What a converter CLAIMED about one imported case. exact is CONVERTER-CLAIMED exact — the converter says it applied a structural mapping rule, cited in note. MCPJam has NOT verified semantic equivalence, so user-facing copy must say "claimed exact", never "verified" or "accepted". Claim-only: who approved an approximation, when, and why is a PER-RUN decision frozen on the run (ImportEligibility.approvedApproximationReceipts), never stored on the case — an approval that lived on a case would outlive the run it was granted for and the edit that invalidated it. Approval and internal keys are rejected with 400, never stripped.

source
object

Where an AI-assisted Markdown case was authored from. Provenance only: the file, its hash, and the line range the extractor read, so a reader can trace a case back to its source document. It is not an import claim (see EvalCaseImportClaim) and carries no approval semantics.

createdAt
number | null
updatedAt
number | null
suppressedSuiteStandardCheckIds
string[]

Stable standard assertion family IDs suppressed from suite defaults. Applies before inherit/extend/replace resolution; explicit case and step assertions are preserved. Omitted updates preserve; [] clears. At most 64 IDs, normalized to unique sorted values.

Maximum array length: 64