Resolve or create a file-owned eval suite
Resolve a file-owned suite by declared id within the project, or create one. Lookup is by (projectId, declaredSuiteId) and never by name. A UI-authored suite has no declared id and cannot be claimed. The inspector parses the suite file; this body is the declared identity, source hash, optional provenance, and hosted settings — not the raw file.
201 on first create; 200 on a later update of the same declared id.
curl --request POST \
--url https://app.mcpjam.com/api/v1/projects/{projectId}/eval-suites/from-file \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"declaredSuiteId": "<string>",
"name": "<string>",
"sourceHash": "<string>",
"description": "<string>",
"environment": {
"servers": [
"<string>"
],
"serverBindings": [
{
"serverName": "<string>",
"projectServerId": "<string>"
}
]
},
"minIterations": 5,
"defaultPassCriteria": {
"minimumPassRate": 123
}
}
'import requests
url = "https://app.mcpjam.com/api/v1/projects/{projectId}/eval-suites/from-file"
payload = {
"declaredSuiteId": "<string>",
"name": "<string>",
"sourceHash": "<string>",
"description": "<string>",
"environment": {
"servers": ["<string>"],
"serverBindings": [
{
"serverName": "<string>",
"projectServerId": "<string>"
}
]
},
"minIterations": 5,
"defaultPassCriteria": { "minimumPassRate": 123 }
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
declaredSuiteId: '<string>',
name: '<string>',
sourceHash: '<string>',
description: '<string>',
environment: {
servers: ['<string>'],
serverBindings: [{serverName: '<string>', projectServerId: '<string>'}]
},
minIterations: 5,
defaultPassCriteria: {minimumPassRate: 123}
})
};
fetch('https://app.mcpjam.com/api/v1/projects/{projectId}/eval-suites/from-file', 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/from-file",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'declaredSuiteId' => '<string>',
'name' => '<string>',
'sourceHash' => '<string>',
'description' => '<string>',
'environment' => [
'servers' => [
'<string>'
],
'serverBindings' => [
[
'serverName' => '<string>',
'projectServerId' => '<string>'
]
]
],
'minIterations' => 5,
'defaultPassCriteria' => [
'minimumPassRate' => 123
]
]),
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/from-file"
payload := strings.NewReader("{\n \"declaredSuiteId\": \"<string>\",\n \"name\": \"<string>\",\n \"sourceHash\": \"<string>\",\n \"description\": \"<string>\",\n \"environment\": {\n \"servers\": [\n \"<string>\"\n ],\n \"serverBindings\": [\n {\n \"serverName\": \"<string>\",\n \"projectServerId\": \"<string>\"\n }\n ]\n },\n \"minIterations\": 5,\n \"defaultPassCriteria\": {\n \"minimumPassRate\": 123\n }\n}")
req, _ := http.NewRequest("POST", 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.post("https://app.mcpjam.com/api/v1/projects/{projectId}/eval-suites/from-file")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"declaredSuiteId\": \"<string>\",\n \"name\": \"<string>\",\n \"sourceHash\": \"<string>\",\n \"description\": \"<string>\",\n \"environment\": {\n \"servers\": [\n \"<string>\"\n ],\n \"serverBindings\": [\n {\n \"serverName\": \"<string>\",\n \"projectServerId\": \"<string>\"\n }\n ]\n },\n \"minIterations\": 5,\n \"defaultPassCriteria\": {\n \"minimumPassRate\": 123\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.mcpjam.com/api/v1/projects/{projectId}/eval-suites/from-file")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"declaredSuiteId\": \"<string>\",\n \"name\": \"<string>\",\n \"sourceHash\": \"<string>\",\n \"description\": \"<string>\",\n \"environment\": {\n \"servers\": [\n \"<string>\"\n ],\n \"serverBindings\": [\n {\n \"serverName\": \"<string>\",\n \"projectServerId\": \"<string>\"\n }\n ]\n },\n \"minIterations\": 5,\n \"defaultPassCriteria\": {\n \"minimumPassRate\": 123\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.
Body
Declared identity and hosted settings for a file-owned suite. The inspector parses the suite file; this is not the raw file.
The file's suite.id. Lookup is by this id within the project, never by name.
SHA-256 hex of the suite-file bytes. Lowercase, 64 characters.
^[a-f0-9]{64}$Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
1 <= x <= 10Show child attributes
Show child attributes
Response
The existing file-owned suite was updated.
True on the first upload of this declared id in the project; false on a later update of the same suite.
One eval suite's full configuration. Distinct from the EvalSuite summary returned by the list route, which carries run rollups instead of settings.
Show child attributes
Show child attributes
Was this page helpful?
curl --request POST \
--url https://app.mcpjam.com/api/v1/projects/{projectId}/eval-suites/from-file \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"declaredSuiteId": "<string>",
"name": "<string>",
"sourceHash": "<string>",
"description": "<string>",
"environment": {
"servers": [
"<string>"
],
"serverBindings": [
{
"serverName": "<string>",
"projectServerId": "<string>"
}
]
},
"minIterations": 5,
"defaultPassCriteria": {
"minimumPassRate": 123
}
}
'import requests
url = "https://app.mcpjam.com/api/v1/projects/{projectId}/eval-suites/from-file"
payload = {
"declaredSuiteId": "<string>",
"name": "<string>",
"sourceHash": "<string>",
"description": "<string>",
"environment": {
"servers": ["<string>"],
"serverBindings": [
{
"serverName": "<string>",
"projectServerId": "<string>"
}
]
},
"minIterations": 5,
"defaultPassCriteria": { "minimumPassRate": 123 }
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
declaredSuiteId: '<string>',
name: '<string>',
sourceHash: '<string>',
description: '<string>',
environment: {
servers: ['<string>'],
serverBindings: [{serverName: '<string>', projectServerId: '<string>'}]
},
minIterations: 5,
defaultPassCriteria: {minimumPassRate: 123}
})
};
fetch('https://app.mcpjam.com/api/v1/projects/{projectId}/eval-suites/from-file', 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/from-file",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'declaredSuiteId' => '<string>',
'name' => '<string>',
'sourceHash' => '<string>',
'description' => '<string>',
'environment' => [
'servers' => [
'<string>'
],
'serverBindings' => [
[
'serverName' => '<string>',
'projectServerId' => '<string>'
]
]
],
'minIterations' => 5,
'defaultPassCriteria' => [
'minimumPassRate' => 123
]
]),
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/from-file"
payload := strings.NewReader("{\n \"declaredSuiteId\": \"<string>\",\n \"name\": \"<string>\",\n \"sourceHash\": \"<string>\",\n \"description\": \"<string>\",\n \"environment\": {\n \"servers\": [\n \"<string>\"\n ],\n \"serverBindings\": [\n {\n \"serverName\": \"<string>\",\n \"projectServerId\": \"<string>\"\n }\n ]\n },\n \"minIterations\": 5,\n \"defaultPassCriteria\": {\n \"minimumPassRate\": 123\n }\n}")
req, _ := http.NewRequest("POST", 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.post("https://app.mcpjam.com/api/v1/projects/{projectId}/eval-suites/from-file")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"declaredSuiteId\": \"<string>\",\n \"name\": \"<string>\",\n \"sourceHash\": \"<string>\",\n \"description\": \"<string>\",\n \"environment\": {\n \"servers\": [\n \"<string>\"\n ],\n \"serverBindings\": [\n {\n \"serverName\": \"<string>\",\n \"projectServerId\": \"<string>\"\n }\n ]\n },\n \"minIterations\": 5,\n \"defaultPassCriteria\": {\n \"minimumPassRate\": 123\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.mcpjam.com/api/v1/projects/{projectId}/eval-suites/from-file")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"declaredSuiteId\": \"<string>\",\n \"name\": \"<string>\",\n \"sourceHash\": \"<string>\",\n \"description\": \"<string>\",\n \"environment\": {\n \"servers\": [\n \"<string>\"\n ],\n \"serverBindings\": [\n {\n \"serverName\": \"<string>\",\n \"projectServerId\": \"<string>\"\n }\n ]\n },\n \"minIterations\": 5,\n \"defaultPassCriteria\": {\n \"minimumPassRate\": 123\n }\n}"
response = http.request(request)
puts response.read_body
