Skip to main content
POST
Create an eval suite (author-only, does not run)

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.

Path Parameters

projectId
string
required

ID of the hosted project that contains the server.

Body

application/json

Author-only suite-create body. A suite-level default model (and optional provider) applies to every test unless the test overrides it.

name
string
required

Suite name.

Minimum string length: 1
serverIds
string[]
required

Servers (by canonical project ID) the suite's cases run against.

Minimum array length: 1
model
string
required

Suite-level default model id (e.g. anthropic/claude-haiku-4.5). Used for any test that omits model.

Minimum string length: 1
tests
object[]
required

Test cases to create in the suite. The object is CLOSED: an unknown key is a VALIDATION_ERROR, never a silently dropped field. repetitions, passThreshold and kind are per-case policy fields this surface cannot author — set them through POST /v1/projects/{projectId}/eval-suites/{suiteId}/cases.

Required array length: 1 - 100 elements
description
string
serverNames
string[]

Optional display names, parallel to serverIds.

hosts
object[]

Clients (hosts) to attach the suite to, in attach order. A suite with no attached client reports none wherever it is listed, and a run has no host to select. Same shape as the PATCH hosts field.

provider
string

Optional suite-level default provider. When omitted, the provider is derived from a provider/model id.

passCriteria
object

The floor a run must clear, as a PERCENT in [0, 100] — 80 means 80%. minimumPassRatePercent is the canonical spelling (the unit is in the name); minimumPassRate is the deprecated alias for it. Send exactly one. THE NAME DISAMBIGUATES THE UNIT: a value in (0, 1) is accepted on minimumPassRatePercent, where it unambiguously means a sub-1% floor the evaluator can act on, and REJECTED on the bare minimumPassRate, where 0.8 cannot be told apart from a fraction sent by mistake and would silently make the gate unfailable. Neither field ever reinterprets a value. A per-case passThreshold IS a fraction; this suite/run floor is not.

tags
string[]

Accepted for forward-compat; not persisted today (no-op).

Response

The suite was created.

suiteId
string
required
name
string
required
caseUpsert
object
required

Per-case create outcomes. Partial failures don't abort the suite; an all-failed new suite is rejected with VALIDATION_ERROR.

servers
object[]

The servers attached to the suite. name is present when supplied.

hosts
object[]

The clients (hosts) attached to the suite at create time. Empty when none were named.