Update an eval suite's settings
Partial update — omitted fields are left as they are. environmentIds is tri-state: a non-empty array sets/replaces, null clears (reverting the suite to legacy config), and [] is rejected rather than silently treated as a clear. Responds with the full updated suite.
curl --request PATCH \
--url https://app.mcpjam.com/api/v1/projects/{projectId}/eval-suites/{suiteId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"description": "<string>",
"environment": {
"servers": [
"<string>"
],
"computerEnvironment": "<string>"
},
"environmentIds": [
"<string>"
],
"executionConfig": {
"model": "<string>",
"systemPrompt": "<string>",
"temperature": 123
},
"hosts": [
{
"host": "<string>",
"servers": [
"<string>"
]
}
],
"settings": {
"minimumAccuracy": 50,
"minimumIterations": 5,
"matchOptions": {},
"checks": [
{}
],
"judge": {
"enabled": true,
"model": "<string>",
"autoRun": true,
"threshold": 0.5
}
}
}
'import requests
url = "https://app.mcpjam.com/api/v1/projects/{projectId}/eval-suites/{suiteId}"
payload = {
"name": "<string>",
"description": "<string>",
"environment": {
"servers": ["<string>"],
"computerEnvironment": "<string>"
},
"environmentIds": ["<string>"],
"executionConfig": {
"model": "<string>",
"systemPrompt": "<string>",
"temperature": 123
},
"hosts": [
{
"host": "<string>",
"servers": ["<string>"]
}
],
"settings": {
"minimumAccuracy": 50,
"minimumIterations": 5,
"matchOptions": {},
"checks": [{}],
"judge": {
"enabled": True,
"model": "<string>",
"autoRun": True,
"threshold": 0.5
}
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
description: '<string>',
environment: {servers: ['<string>'], computerEnvironment: '<string>'},
environmentIds: ['<string>'],
executionConfig: {model: '<string>', systemPrompt: '<string>', temperature: 123},
hosts: [{host: '<string>', servers: ['<string>']}],
settings: {
minimumAccuracy: 50,
minimumIterations: 5,
matchOptions: {},
checks: [{}],
judge: {enabled: true, model: '<string>', autoRun: true, threshold: 0.5}
}
})
};
fetch('https://app.mcpjam.com/api/v1/projects/{projectId}/eval-suites/{suiteId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.mcpjam.com/api/v1/projects/{projectId}/eval-suites/{suiteId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'description' => '<string>',
'environment' => [
'servers' => [
'<string>'
],
'computerEnvironment' => '<string>'
],
'environmentIds' => [
'<string>'
],
'executionConfig' => [
'model' => '<string>',
'systemPrompt' => '<string>',
'temperature' => 123
],
'hosts' => [
[
'host' => '<string>',
'servers' => [
'<string>'
]
]
],
'settings' => [
'minimumAccuracy' => 50,
'minimumIterations' => 5,
'matchOptions' => [
],
'checks' => [
[
]
],
'judge' => [
'enabled' => true,
'model' => '<string>',
'autoRun' => true,
'threshold' => 0.5
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.mcpjam.com/api/v1/projects/{projectId}/eval-suites/{suiteId}"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"environment\": {\n \"servers\": [\n \"<string>\"\n ],\n \"computerEnvironment\": \"<string>\"\n },\n \"environmentIds\": [\n \"<string>\"\n ],\n \"executionConfig\": {\n \"model\": \"<string>\",\n \"systemPrompt\": \"<string>\",\n \"temperature\": 123\n },\n \"hosts\": [\n {\n \"host\": \"<string>\",\n \"servers\": [\n \"<string>\"\n ]\n }\n ],\n \"settings\": {\n \"minimumAccuracy\": 50,\n \"minimumIterations\": 5,\n \"matchOptions\": {},\n \"checks\": [\n {}\n ],\n \"judge\": {\n \"enabled\": true,\n \"model\": \"<string>\",\n \"autoRun\": true,\n \"threshold\": 0.5\n }\n }\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://app.mcpjam.com/api/v1/projects/{projectId}/eval-suites/{suiteId}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"environment\": {\n \"servers\": [\n \"<string>\"\n ],\n \"computerEnvironment\": \"<string>\"\n },\n \"environmentIds\": [\n \"<string>\"\n ],\n \"executionConfig\": {\n \"model\": \"<string>\",\n \"systemPrompt\": \"<string>\",\n \"temperature\": 123\n },\n \"hosts\": [\n {\n \"host\": \"<string>\",\n \"servers\": [\n \"<string>\"\n ]\n }\n ],\n \"settings\": {\n \"minimumAccuracy\": 50,\n \"minimumIterations\": 5,\n \"matchOptions\": {},\n \"checks\": [\n {}\n ],\n \"judge\": {\n \"enabled\": true,\n \"model\": \"<string>\",\n \"autoRun\": true,\n \"threshold\": 0.5\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.mcpjam.com/api/v1/projects/{projectId}/eval-suites/{suiteId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"environment\": {\n \"servers\": [\n \"<string>\"\n ],\n \"computerEnvironment\": \"<string>\"\n },\n \"environmentIds\": [\n \"<string>\"\n ],\n \"executionConfig\": {\n \"model\": \"<string>\",\n \"systemPrompt\": \"<string>\",\n \"temperature\": 123\n },\n \"hosts\": [\n {\n \"host\": \"<string>\",\n \"servers\": [\n \"<string>\"\n ]\n }\n ],\n \"settings\": {\n \"minimumAccuracy\": 50,\n \"minimumIterations\": 5,\n \"matchOptions\": {},\n \"checks\": [\n {}\n ],\n \"judge\": {\n \"enabled\": true,\n \"model\": \"<string>\",\n \"autoRun\": true,\n \"threshold\": 0.5\n }\n }\n}"
response = http.request(request)
puts response.read_bodyAuthorizations
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
ID of the hosted project that contains the server.
Eval suite ID, as returned by POST /eval-runs.
Body
Partial update of a suite's settings. Omitted fields are left as they are.
1LEGACY server bag. Unrelated to environmentIds.
Show child attributes
Show child attributes
Tri-state: a non-empty array sets/replaces the attachments, null CLEARS them (reverting the suite to legacy config), and [] is REJECTED rather than silently read as a clear.
11Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Response
The updated suite.
One eval suite's full configuration. Distinct from the EvalSuite summary returned by the list route, which carries run rollups instead of settings.
LEGACY server bag, kept as rollback data, plus the suite's sandbox-image pin. Unrelated to environmentIds.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Recurring-run schedule. A schedule fires exactly ONE run, so an environment-based suite pins the environment it runs against.
Show child attributes
Show child attributes
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.
Show child attributes
Show child attributes
Attached project environments, in attach order.
Epoch milliseconds.
Was this page helpful?
curl --request PATCH \
--url https://app.mcpjam.com/api/v1/projects/{projectId}/eval-suites/{suiteId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"description": "<string>",
"environment": {
"servers": [
"<string>"
],
"computerEnvironment": "<string>"
},
"environmentIds": [
"<string>"
],
"executionConfig": {
"model": "<string>",
"systemPrompt": "<string>",
"temperature": 123
},
"hosts": [
{
"host": "<string>",
"servers": [
"<string>"
]
}
],
"settings": {
"minimumAccuracy": 50,
"minimumIterations": 5,
"matchOptions": {},
"checks": [
{}
],
"judge": {
"enabled": true,
"model": "<string>",
"autoRun": true,
"threshold": 0.5
}
}
}
'import requests
url = "https://app.mcpjam.com/api/v1/projects/{projectId}/eval-suites/{suiteId}"
payload = {
"name": "<string>",
"description": "<string>",
"environment": {
"servers": ["<string>"],
"computerEnvironment": "<string>"
},
"environmentIds": ["<string>"],
"executionConfig": {
"model": "<string>",
"systemPrompt": "<string>",
"temperature": 123
},
"hosts": [
{
"host": "<string>",
"servers": ["<string>"]
}
],
"settings": {
"minimumAccuracy": 50,
"minimumIterations": 5,
"matchOptions": {},
"checks": [{}],
"judge": {
"enabled": True,
"model": "<string>",
"autoRun": True,
"threshold": 0.5
}
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
description: '<string>',
environment: {servers: ['<string>'], computerEnvironment: '<string>'},
environmentIds: ['<string>'],
executionConfig: {model: '<string>', systemPrompt: '<string>', temperature: 123},
hosts: [{host: '<string>', servers: ['<string>']}],
settings: {
minimumAccuracy: 50,
minimumIterations: 5,
matchOptions: {},
checks: [{}],
judge: {enabled: true, model: '<string>', autoRun: true, threshold: 0.5}
}
})
};
fetch('https://app.mcpjam.com/api/v1/projects/{projectId}/eval-suites/{suiteId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.mcpjam.com/api/v1/projects/{projectId}/eval-suites/{suiteId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'description' => '<string>',
'environment' => [
'servers' => [
'<string>'
],
'computerEnvironment' => '<string>'
],
'environmentIds' => [
'<string>'
],
'executionConfig' => [
'model' => '<string>',
'systemPrompt' => '<string>',
'temperature' => 123
],
'hosts' => [
[
'host' => '<string>',
'servers' => [
'<string>'
]
]
],
'settings' => [
'minimumAccuracy' => 50,
'minimumIterations' => 5,
'matchOptions' => [
],
'checks' => [
[
]
],
'judge' => [
'enabled' => true,
'model' => '<string>',
'autoRun' => true,
'threshold' => 0.5
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.mcpjam.com/api/v1/projects/{projectId}/eval-suites/{suiteId}"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"environment\": {\n \"servers\": [\n \"<string>\"\n ],\n \"computerEnvironment\": \"<string>\"\n },\n \"environmentIds\": [\n \"<string>\"\n ],\n \"executionConfig\": {\n \"model\": \"<string>\",\n \"systemPrompt\": \"<string>\",\n \"temperature\": 123\n },\n \"hosts\": [\n {\n \"host\": \"<string>\",\n \"servers\": [\n \"<string>\"\n ]\n }\n ],\n \"settings\": {\n \"minimumAccuracy\": 50,\n \"minimumIterations\": 5,\n \"matchOptions\": {},\n \"checks\": [\n {}\n ],\n \"judge\": {\n \"enabled\": true,\n \"model\": \"<string>\",\n \"autoRun\": true,\n \"threshold\": 0.5\n }\n }\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://app.mcpjam.com/api/v1/projects/{projectId}/eval-suites/{suiteId}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"environment\": {\n \"servers\": [\n \"<string>\"\n ],\n \"computerEnvironment\": \"<string>\"\n },\n \"environmentIds\": [\n \"<string>\"\n ],\n \"executionConfig\": {\n \"model\": \"<string>\",\n \"systemPrompt\": \"<string>\",\n \"temperature\": 123\n },\n \"hosts\": [\n {\n \"host\": \"<string>\",\n \"servers\": [\n \"<string>\"\n ]\n }\n ],\n \"settings\": {\n \"minimumAccuracy\": 50,\n \"minimumIterations\": 5,\n \"matchOptions\": {},\n \"checks\": [\n {}\n ],\n \"judge\": {\n \"enabled\": true,\n \"model\": \"<string>\",\n \"autoRun\": true,\n \"threshold\": 0.5\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.mcpjam.com/api/v1/projects/{projectId}/eval-suites/{suiteId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"environment\": {\n \"servers\": [\n \"<string>\"\n ],\n \"computerEnvironment\": \"<string>\"\n },\n \"environmentIds\": [\n \"<string>\"\n ],\n \"executionConfig\": {\n \"model\": \"<string>\",\n \"systemPrompt\": \"<string>\",\n \"temperature\": 123\n },\n \"hosts\": [\n {\n \"host\": \"<string>\",\n \"servers\": [\n \"<string>\"\n ]\n }\n ],\n \"settings\": {\n \"minimumAccuracy\": 50,\n \"minimumIterations\": 5,\n \"matchOptions\": {},\n \"checks\": [\n {}\n ],\n \"judge\": {\n \"enabled\": true,\n \"model\": \"<string>\",\n \"autoRun\": true,\n \"threshold\": 0.5\n }\n }\n}"
response = http.request(request)
puts response.read_body
