curl --request PATCH \
--url https://api.reasonmachines.ai/v3/organizations/{orgId}/mcp-servers/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"icon": "<string>",
"description": "<string>",
"url": "<string>",
"command": "<string>",
"args": [
"<string>"
],
"env": {},
"headers": {},
"secrets": {},
"enabled": true
}
'import requests
url = "https://api.reasonmachines.ai/v3/organizations/{orgId}/mcp-servers/{id}"
payload = {
"name": "<string>",
"icon": "<string>",
"description": "<string>",
"url": "<string>",
"command": "<string>",
"args": ["<string>"],
"env": {},
"headers": {},
"secrets": {},
"enabled": True
}
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>',
icon: '<string>',
description: '<string>',
url: '<string>',
command: '<string>',
args: ['<string>'],
env: {},
headers: {},
secrets: {},
enabled: true
})
};
fetch('https://api.reasonmachines.ai/v3/organizations/{orgId}/mcp-servers/{id}', 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.reasonmachines.ai/v3/organizations/{orgId}/mcp-servers/{id}",
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>',
'icon' => '<string>',
'description' => '<string>',
'url' => '<string>',
'command' => '<string>',
'args' => [
'<string>'
],
'env' => [
],
'headers' => [
],
'secrets' => [
],
'enabled' => true
]),
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.reasonmachines.ai/v3/organizations/{orgId}/mcp-servers/{id}"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"icon\": \"<string>\",\n \"description\": \"<string>\",\n \"url\": \"<string>\",\n \"command\": \"<string>\",\n \"args\": [\n \"<string>\"\n ],\n \"env\": {},\n \"headers\": {},\n \"secrets\": {},\n \"enabled\": true\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.reasonmachines.ai/v3/organizations/{orgId}/mcp-servers/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"icon\": \"<string>\",\n \"description\": \"<string>\",\n \"url\": \"<string>\",\n \"command\": \"<string>\",\n \"args\": [\n \"<string>\"\n ],\n \"env\": {},\n \"headers\": {},\n \"secrets\": {},\n \"enabled\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.reasonmachines.ai/v3/organizations/{orgId}/mcp-servers/{id}")
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 \"icon\": \"<string>\",\n \"description\": \"<string>\",\n \"url\": \"<string>\",\n \"command\": \"<string>\",\n \"args\": [\n \"<string>\"\n ],\n \"env\": {},\n \"headers\": {},\n \"secrets\": {},\n \"enabled\": true\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"slug": "<string>",
"name": "<string>",
"icon": "<string>",
"description": "<string>",
"source": "<string>",
"transport": "http",
"url": "<string>",
"command": "<string>",
"args": [
"<string>"
],
"env": {},
"headers": {},
"auth_type": "none",
"secret_names": [
"<string>"
],
"access": "<string>",
"enabled": true,
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}{
"error": "missing_scope",
"required_scope": "sessions:read"
}{
"error": "session_not_found"
}Update an MCP server
Partial update. Send only the fields you want to change. Secret values are stored write-only and never returned.
Scope:mcp:writecurl --request PATCH \
--url https://api.reasonmachines.ai/v3/organizations/{orgId}/mcp-servers/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"icon": "<string>",
"description": "<string>",
"url": "<string>",
"command": "<string>",
"args": [
"<string>"
],
"env": {},
"headers": {},
"secrets": {},
"enabled": true
}
'import requests
url = "https://api.reasonmachines.ai/v3/organizations/{orgId}/mcp-servers/{id}"
payload = {
"name": "<string>",
"icon": "<string>",
"description": "<string>",
"url": "<string>",
"command": "<string>",
"args": ["<string>"],
"env": {},
"headers": {},
"secrets": {},
"enabled": True
}
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>',
icon: '<string>',
description: '<string>',
url: '<string>',
command: '<string>',
args: ['<string>'],
env: {},
headers: {},
secrets: {},
enabled: true
})
};
fetch('https://api.reasonmachines.ai/v3/organizations/{orgId}/mcp-servers/{id}', 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.reasonmachines.ai/v3/organizations/{orgId}/mcp-servers/{id}",
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>',
'icon' => '<string>',
'description' => '<string>',
'url' => '<string>',
'command' => '<string>',
'args' => [
'<string>'
],
'env' => [
],
'headers' => [
],
'secrets' => [
],
'enabled' => true
]),
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.reasonmachines.ai/v3/organizations/{orgId}/mcp-servers/{id}"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"icon\": \"<string>\",\n \"description\": \"<string>\",\n \"url\": \"<string>\",\n \"command\": \"<string>\",\n \"args\": [\n \"<string>\"\n ],\n \"env\": {},\n \"headers\": {},\n \"secrets\": {},\n \"enabled\": true\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.reasonmachines.ai/v3/organizations/{orgId}/mcp-servers/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"icon\": \"<string>\",\n \"description\": \"<string>\",\n \"url\": \"<string>\",\n \"command\": \"<string>\",\n \"args\": [\n \"<string>\"\n ],\n \"env\": {},\n \"headers\": {},\n \"secrets\": {},\n \"enabled\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.reasonmachines.ai/v3/organizations/{orgId}/mcp-servers/{id}")
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 \"icon\": \"<string>\",\n \"description\": \"<string>\",\n \"url\": \"<string>\",\n \"command\": \"<string>\",\n \"args\": [\n \"<string>\"\n ],\n \"env\": {},\n \"headers\": {},\n \"secrets\": {},\n \"enabled\": true\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"slug": "<string>",
"name": "<string>",
"icon": "<string>",
"description": "<string>",
"source": "<string>",
"transport": "http",
"url": "<string>",
"command": "<string>",
"args": [
"<string>"
],
"env": {},
"headers": {},
"auth_type": "none",
"secret_names": [
"<string>"
],
"access": "<string>",
"enabled": true,
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}{
"error": "missing_scope",
"required_scope": "sessions:read"
}{
"error": "session_not_found"
}Authorizations
Your Reason API key from Settings > API. New keys use reason_; legacy ara_ keys remain accepted. Keys are capability-scoped: run, mcp:read, mcp:write, secrets:read, secrets:write, sessions:read, sessions:debug, knowledge:read, memory:read, memory:write, skills:read, skills:write, repos:read, repos:write, reviews:read, reviews:write, deployment:read, analytics:read, org:read, org:write, attachments:read, attachments:write, guardrails:read, guardrails:write, automations:read, automations:write, agent_auth:read. mcp:write manages MCP server configuration only; it does not authorize remote MCP-tool execution. sessions:debug is privileged: it expands diagnostic session events only for organization owners/admins.
Path Parameters
Organization id or slug. Resolve it with GET /v3/self.
The MCP server id.
Body
Request body for creating or updating an MCP server. On update, every property is optional and only the supplied fields change.
http, stdio, sse Show child attributes
Show child attributes
Show child attributes
Show child attributes
none, oauth, bearer Write-only. Secret values to store for this server. Never returned in any response.
Show child attributes
Show child attributes
Response
The updated MCP server.
An org-level MCP server. Secret values are write-only and are never returned; only secret_names lists which secrets are set.
http, stdio, sse Show child attributes
Show child attributes
Show child attributes
Show child attributes
none, oauth, bearer The names of the secrets configured for this server. Secret values are write-only and are never returned.

