curl --request PATCH \
--url https://api.engini.io/v1/mcpservers/{mcpServerToken} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"isActive": true,
"connections": [
{
"connectionId": 123,
"applicationSlug": "<string>",
"toolSlugs": [
"<string>"
]
}
],
"workflows": [
{
"workflowToken": "<string>",
"toolName": "<string>",
"toolDescription": "<string>"
}
]
}
'import requests
url = "https://api.engini.io/v1/mcpservers/{mcpServerToken}"
payload = {
"name": "<string>",
"isActive": True,
"connections": [
{
"connectionId": 123,
"applicationSlug": "<string>",
"toolSlugs": ["<string>"]
}
],
"workflows": [
{
"workflowToken": "<string>",
"toolName": "<string>",
"toolDescription": "<string>"
}
]
}
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>',
isActive: true,
connections: [{connectionId: 123, applicationSlug: '<string>', toolSlugs: ['<string>']}],
workflows: [{workflowToken: '<string>', toolName: '<string>', toolDescription: '<string>'}]
})
};
fetch('https://api.engini.io/v1/mcpservers/{mcpServerToken}', 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://api.engini.io/v1/mcpservers/{mcpServerToken}",
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>',
'isActive' => true,
'connections' => [
[
'connectionId' => 123,
'applicationSlug' => '<string>',
'toolSlugs' => [
'<string>'
]
]
],
'workflows' => [
[
'workflowToken' => '<string>',
'toolName' => '<string>',
'toolDescription' => '<string>'
]
]
]),
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://api.engini.io/v1/mcpservers/{mcpServerToken}"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"isActive\": true,\n \"connections\": [\n {\n \"connectionId\": 123,\n \"applicationSlug\": \"<string>\",\n \"toolSlugs\": [\n \"<string>\"\n ]\n }\n ],\n \"workflows\": [\n {\n \"workflowToken\": \"<string>\",\n \"toolName\": \"<string>\",\n \"toolDescription\": \"<string>\"\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://api.engini.io/v1/mcpservers/{mcpServerToken}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"isActive\": true,\n \"connections\": [\n {\n \"connectionId\": 123,\n \"applicationSlug\": \"<string>\",\n \"toolSlugs\": [\n \"<string>\"\n ]\n }\n ],\n \"workflows\": [\n {\n \"workflowToken\": \"<string>\",\n \"toolName\": \"<string>\",\n \"toolDescription\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.engini.io/v1/mcpservers/{mcpServerToken}")
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 \"isActive\": true,\n \"connections\": [\n {\n \"connectionId\": 123,\n \"applicationSlug\": \"<string>\",\n \"toolSlugs\": [\n \"<string>\"\n ]\n }\n ],\n \"workflows\": [\n {\n \"workflowToken\": \"<string>\",\n \"toolName\": \"<string>\",\n \"toolDescription\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"mcpServerToken": "<string>",
"name": "<string>",
"isActive": true,
"isAnonymousAllowed": true,
"connections": [
{
"connectionId": 123,
"applicationSlug": "<string>",
"toolSlugs": [
"<string>"
],
"availableToolsCount": 123,
"selectedToolsCount": 123,
"applicationName": "<string>"
}
],
"workflows": [
{
"workflowToken": "<string>",
"workflowName": "<string>",
"toolName": "<string>",
"toolDescription": "<string>"
}
],
"createdDate": "2023-11-07T05:31:56Z",
"url": "<string>",
"updatedDate": "2023-11-07T05:31:56Z",
"createdByAccountUserId": 123,
"updatedByAccountUserId": 123
}{
"errorCode": "<string>",
"message": "<string>",
"requestId": "<string>",
"timestamp": "<string>",
"path": "<string>",
"details": [
{
"field": "<string>",
"issue": "<string>"
}
]
}{
"errorCode": "<string>",
"message": "<string>",
"requestId": "<string>",
"timestamp": "<string>",
"path": "<string>",
"details": [
{
"field": "<string>",
"issue": "<string>"
}
]
}{
"errorCode": "<string>",
"message": "<string>",
"requestId": "<string>",
"timestamp": "<string>",
"path": "<string>",
"details": [
{
"field": "<string>",
"issue": "<string>"
}
]
}{
"errorCode": "<string>",
"message": "<string>",
"requestId": "<string>",
"timestamp": "<string>",
"path": "<string>",
"details": [
{
"field": "<string>",
"issue": "<string>"
}
]
}{
"errorCode": "<string>",
"message": "<string>",
"requestId": "<string>",
"timestamp": "<string>",
"path": "<string>",
"details": [
{
"field": "<string>",
"issue": "<string>"
}
]
}{
"errorCode": "<string>",
"message": "<string>",
"requestId": "<string>",
"timestamp": "<string>",
"path": "<string>",
"details": [
{
"field": "<string>",
"issue": "<string>"
}
]
}Update an MCP server.
Updates an MCP server belonging to the caller’s account. Only the fields present in the request body are changed - name, isActive, connections and workflows are each left unchanged when omitted (null); supplying connections or workflows replaces the entire set, it does not merge with the existing one. Every connection entry must carry an explicit connectionId. isAnonymousAllowed is read-only here and is always preserved.
curl --request PATCH \
--url https://api.engini.io/v1/mcpservers/{mcpServerToken} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"isActive": true,
"connections": [
{
"connectionId": 123,
"applicationSlug": "<string>",
"toolSlugs": [
"<string>"
]
}
],
"workflows": [
{
"workflowToken": "<string>",
"toolName": "<string>",
"toolDescription": "<string>"
}
]
}
'import requests
url = "https://api.engini.io/v1/mcpservers/{mcpServerToken}"
payload = {
"name": "<string>",
"isActive": True,
"connections": [
{
"connectionId": 123,
"applicationSlug": "<string>",
"toolSlugs": ["<string>"]
}
],
"workflows": [
{
"workflowToken": "<string>",
"toolName": "<string>",
"toolDescription": "<string>"
}
]
}
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>',
isActive: true,
connections: [{connectionId: 123, applicationSlug: '<string>', toolSlugs: ['<string>']}],
workflows: [{workflowToken: '<string>', toolName: '<string>', toolDescription: '<string>'}]
})
};
fetch('https://api.engini.io/v1/mcpservers/{mcpServerToken}', 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://api.engini.io/v1/mcpservers/{mcpServerToken}",
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>',
'isActive' => true,
'connections' => [
[
'connectionId' => 123,
'applicationSlug' => '<string>',
'toolSlugs' => [
'<string>'
]
]
],
'workflows' => [
[
'workflowToken' => '<string>',
'toolName' => '<string>',
'toolDescription' => '<string>'
]
]
]),
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://api.engini.io/v1/mcpservers/{mcpServerToken}"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"isActive\": true,\n \"connections\": [\n {\n \"connectionId\": 123,\n \"applicationSlug\": \"<string>\",\n \"toolSlugs\": [\n \"<string>\"\n ]\n }\n ],\n \"workflows\": [\n {\n \"workflowToken\": \"<string>\",\n \"toolName\": \"<string>\",\n \"toolDescription\": \"<string>\"\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://api.engini.io/v1/mcpservers/{mcpServerToken}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"isActive\": true,\n \"connections\": [\n {\n \"connectionId\": 123,\n \"applicationSlug\": \"<string>\",\n \"toolSlugs\": [\n \"<string>\"\n ]\n }\n ],\n \"workflows\": [\n {\n \"workflowToken\": \"<string>\",\n \"toolName\": \"<string>\",\n \"toolDescription\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.engini.io/v1/mcpservers/{mcpServerToken}")
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 \"isActive\": true,\n \"connections\": [\n {\n \"connectionId\": 123,\n \"applicationSlug\": \"<string>\",\n \"toolSlugs\": [\n \"<string>\"\n ]\n }\n ],\n \"workflows\": [\n {\n \"workflowToken\": \"<string>\",\n \"toolName\": \"<string>\",\n \"toolDescription\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"mcpServerToken": "<string>",
"name": "<string>",
"isActive": true,
"isAnonymousAllowed": true,
"connections": [
{
"connectionId": 123,
"applicationSlug": "<string>",
"toolSlugs": [
"<string>"
],
"availableToolsCount": 123,
"selectedToolsCount": 123,
"applicationName": "<string>"
}
],
"workflows": [
{
"workflowToken": "<string>",
"workflowName": "<string>",
"toolName": "<string>",
"toolDescription": "<string>"
}
],
"createdDate": "2023-11-07T05:31:56Z",
"url": "<string>",
"updatedDate": "2023-11-07T05:31:56Z",
"createdByAccountUserId": 123,
"updatedByAccountUserId": 123
}{
"errorCode": "<string>",
"message": "<string>",
"requestId": "<string>",
"timestamp": "<string>",
"path": "<string>",
"details": [
{
"field": "<string>",
"issue": "<string>"
}
]
}{
"errorCode": "<string>",
"message": "<string>",
"requestId": "<string>",
"timestamp": "<string>",
"path": "<string>",
"details": [
{
"field": "<string>",
"issue": "<string>"
}
]
}{
"errorCode": "<string>",
"message": "<string>",
"requestId": "<string>",
"timestamp": "<string>",
"path": "<string>",
"details": [
{
"field": "<string>",
"issue": "<string>"
}
]
}{
"errorCode": "<string>",
"message": "<string>",
"requestId": "<string>",
"timestamp": "<string>",
"path": "<string>",
"details": [
{
"field": "<string>",
"issue": "<string>"
}
]
}{
"errorCode": "<string>",
"message": "<string>",
"requestId": "<string>",
"timestamp": "<string>",
"path": "<string>",
"details": [
{
"field": "<string>",
"issue": "<string>"
}
]
}{
"errorCode": "<string>",
"message": "<string>",
"requestId": "<string>",
"timestamp": "<string>",
"path": "<string>",
"details": [
{
"field": "<string>",
"issue": "<string>"
}
]
}Authorizations
Enter your JWT token
Path Parameters
The token identifying the MCP server to update.
Body
The fields to update on the MCP server.
Request body for updating an MCP server; null members are left unchanged, and a non-null Connections or Workflows replaces the whole set rather than merging into it.
New display name; null leaves it unchanged.
New active state; null leaves it unchanged.
Replacement connection set; null leaves it unchanged.
Show child attributes
Show child attributes
Replacement workflow set; null leaves it unchanged.
Show child attributes
Show child attributes
Response
The updated MCP server.
Public-shape DTO for an MCP server — an account-wide endpoint that exposes a chosen set of Engini tools and workflows over the Model Context Protocol.
Not to be confused with the MCPClient connection kind, which is Engini consuming a third-party MCP server. This resource is Engini exposing one.
The internal UI shape is McpServerDTO; that type carries the account token and the raw tool-catalog blob and is deliberately not reused here.
Unique identifier of the MCP server (its token); also the component of the server's SSE URL.
Display name of the MCP server.
Whether the server is currently serving requests. Unlike a toolset, this is a real on/off toggle rather than a deletion tombstone — a deactivated server still appears in list and get.
Whether the server accepts unauthenticated callers. Read-only on this API: it is configured from the engini.io UI and is preserved unchanged by every update here.
Connections exposed by this server and their permitted tools.
Show child attributes
Show child attributes
Workflows exposed by this server as MCP tools.
Show child attributes
Show child attributes
When the MCP server was created.
Public SSE endpoint URL of the MCP server.
When the MCP server was last updated; null if never updated.
Account-user ID that created the MCP server.
Account-user ID that last updated the MCP server; null until first updated.