curl --request POST \
--url 'https://api.flashcat.cloud/safari/mcp/server/update?app_key=' \
--header 'Content-Type: application/json' \
--data '
{
"server_id": "mcp_4kP9wQ2nLceRtY7uVb3xA1",
"description": "Query Prometheus metrics, alerts, and rules."
}
'import requests
url = "https://api.flashcat.cloud/safari/mcp/server/update?app_key="
payload = {
"server_id": "mcp_4kP9wQ2nLceRtY7uVb3xA1",
"description": "Query Prometheus metrics, alerts, and rules."
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
server_id: 'mcp_4kP9wQ2nLceRtY7uVb3xA1',
description: 'Query Prometheus metrics, alerts, and rules.'
})
};
fetch('https://api.flashcat.cloud/safari/mcp/server/update?app_key=', 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.flashcat.cloud/safari/mcp/server/update?app_key=",
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([
'server_id' => 'mcp_4kP9wQ2nLceRtY7uVb3xA1',
'description' => 'Query Prometheus metrics, alerts, and rules.'
]),
CURLOPT_HTTPHEADER => [
"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.flashcat.cloud/safari/mcp/server/update?app_key="
payload := strings.NewReader("{\n \"server_id\": \"mcp_4kP9wQ2nLceRtY7uVb3xA1\",\n \"description\": \"Query Prometheus metrics, alerts, and rules.\"\n}")
req, _ := http.NewRequest("POST", url, payload)
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://api.flashcat.cloud/safari/mcp/server/update?app_key=")
.header("Content-Type", "application/json")
.body("{\n \"server_id\": \"mcp_4kP9wQ2nLceRtY7uVb3xA1\",\n \"description\": \"Query Prometheus metrics, alerts, and rules.\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.flashcat.cloud/safari/mcp/server/update?app_key=")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"server_id\": \"mcp_4kP9wQ2nLceRtY7uVb3xA1\",\n \"description\": \"Query Prometheus metrics, alerts, and rules.\"\n}"
response = http.request(request)
puts response.read_body{
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4",
"data": {
"server_id": "mcp_4kP9wQ2nLceRtY7uVb3xA1",
"account_id": 10023,
"team_id": 0,
"can_edit": true,
"environment_kind": "",
"environment_id": "",
"server_name": "prometheus",
"description": "Query Prometheus metrics, alerts, and rules.",
"transport": "streamable-http",
"url": "https://mcp.example.com/prometheus",
"status": "enabled",
"connect_timeout": 10,
"call_timeout": 60,
"tool_count": 2,
"tools": [
{
"name": "query",
"description": "Run a PromQL instant query."
},
{
"name": "query_range",
"description": "Run a PromQL range query."
}
],
"auth_mode": "shared",
"created_by": 80011,
"created_at": 1716960000000,
"updated_at": 1717046400000
}
}{
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4",
"error": {
"code": "InvalidParameter",
"message": "The specified parameter skill_id is not valid."
}
}{
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4",
"error": {
"code": "Unauthorized",
"message": "You are unauthorized."
}
}{
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4",
"error": {
"code": "AccessDenied",
"message": "Access Denied."
}
}{
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4",
"error": {
"code": "RequestTooFrequently",
"message": "Request too frequently."
}
}{
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4",
"error": {
"code": "InternalError",
"message": "We encountered an internal error, and it has been reported. Please try again later."
}
}Update MCP server
Update an MCP server’s configuration. Omit a field to leave it unchanged.
curl --request POST \
--url 'https://api.flashcat.cloud/safari/mcp/server/update?app_key=' \
--header 'Content-Type: application/json' \
--data '
{
"server_id": "mcp_4kP9wQ2nLceRtY7uVb3xA1",
"description": "Query Prometheus metrics, alerts, and rules."
}
'import requests
url = "https://api.flashcat.cloud/safari/mcp/server/update?app_key="
payload = {
"server_id": "mcp_4kP9wQ2nLceRtY7uVb3xA1",
"description": "Query Prometheus metrics, alerts, and rules."
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
server_id: 'mcp_4kP9wQ2nLceRtY7uVb3xA1',
description: 'Query Prometheus metrics, alerts, and rules.'
})
};
fetch('https://api.flashcat.cloud/safari/mcp/server/update?app_key=', 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.flashcat.cloud/safari/mcp/server/update?app_key=",
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([
'server_id' => 'mcp_4kP9wQ2nLceRtY7uVb3xA1',
'description' => 'Query Prometheus metrics, alerts, and rules.'
]),
CURLOPT_HTTPHEADER => [
"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.flashcat.cloud/safari/mcp/server/update?app_key="
payload := strings.NewReader("{\n \"server_id\": \"mcp_4kP9wQ2nLceRtY7uVb3xA1\",\n \"description\": \"Query Prometheus metrics, alerts, and rules.\"\n}")
req, _ := http.NewRequest("POST", url, payload)
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://api.flashcat.cloud/safari/mcp/server/update?app_key=")
.header("Content-Type", "application/json")
.body("{\n \"server_id\": \"mcp_4kP9wQ2nLceRtY7uVb3xA1\",\n \"description\": \"Query Prometheus metrics, alerts, and rules.\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.flashcat.cloud/safari/mcp/server/update?app_key=")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"server_id\": \"mcp_4kP9wQ2nLceRtY7uVb3xA1\",\n \"description\": \"Query Prometheus metrics, alerts, and rules.\"\n}"
response = http.request(request)
puts response.read_body{
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4",
"data": {
"server_id": "mcp_4kP9wQ2nLceRtY7uVb3xA1",
"account_id": 10023,
"team_id": 0,
"can_edit": true,
"environment_kind": "",
"environment_id": "",
"server_name": "prometheus",
"description": "Query Prometheus metrics, alerts, and rules.",
"transport": "streamable-http",
"url": "https://mcp.example.com/prometheus",
"status": "enabled",
"connect_timeout": 10,
"call_timeout": 60,
"tool_count": 2,
"tools": [
{
"name": "query",
"description": "Run a PromQL instant query."
},
{
"name": "query_range",
"description": "Run a PromQL range query."
}
],
"auth_mode": "shared",
"created_by": 80011,
"created_at": 1716960000000,
"updated_at": 1717046400000
}
}{
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4",
"error": {
"code": "InvalidParameter",
"message": "The specified parameter skill_id is not valid."
}
}{
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4",
"error": {
"code": "Unauthorized",
"message": "You are unauthorized."
}
}{
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4",
"error": {
"code": "AccessDenied",
"message": "Access Denied."
}
}{
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4",
"error": {
"code": "RequestTooFrequently",
"message": "Request too frequently."
}
}{
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4",
"error": {
"code": "InternalError",
"message": "We encountered an internal error, and it has been reported. Please try again later."
}
}Restrictions
| Aspect | Value |
|---|---|
| Rate limits | 1,000 requests/minute; 50 requests/second per account |
| Permissions | MCP Manage (ai-sre) |
Usage
- Masked secret values in
env/headersare preserved — sending the masked value back does not overwrite the stored secret. environment_kind/environment_idare independent partial-update fields: omit both to leave the runner binding unchanged; set either to change it, subject to the samebyoc-or-empty constraint as create.- Changing
team_idrequires reassignment permission on the destination team; if the runner binding is left unchanged, it must still be selectable by the caller under the new team or the update is rejected. - Every call is recorded in the account audit log.
Authorizations
App key issued from the Flashduty console. Required on every public API call. Keep it secret — it grants the same access as the owning account.
Body
Partial update of an MCP server. Omit a field to leave it unchanged.
Target MCP server ID.
New name.
1 - 255New description.
1 - 1024Transport protocol.
stdio, sse, streamable-http Executable command (stdio transport).
Command arguments (stdio transport).
Environment variables (stdio transport).
Show child attributes
Show child attributes
Server URL (sse / streamable-http transport).
HTTP headers (sse / streamable-http).
Show child attributes
Show child attributes
Connection timeout in seconds. 0 = default (10s).
Tool-call timeout in seconds. 0 = default (60s).
Authentication mode: shared (default), per_user_secret, or per_user_oauth.
JSON secret schema; required when auth_mode=per_user_secret.
JSON OAuth metadata; reserved for per_user_oauth.
Reassign team scope: 0 = account-wide; >0 = team. Omit to leave unchanged.
Reassign the runner binding: byoc (with environment_id) or empty string to reset to automatic selection. Omit (null) to leave the current binding unchanged.
Runner ID paired with environment_kind=byoc. Omit (null) to leave the current binding unchanged.
Allow OAuth token exchange over plaintext HTTP. Omit to leave unchanged.
Skip TLS certificate verification. Omit to leave unchanged.
Response
Success
Standard response envelope used by every Flashduty public API. On success data contains the endpoint-specific payload and error is absent. On failure error is present and data is absent. request_id is always present and is also mirrored in the Flashcat-Request-Id response header.
Unique ID for this request. Mirrored in the Flashcat-Request-Id header. Include it when reporting issues.
"01HK8XQE3Z7JM2NTFQ5YJ8P9R4"
Error payload inside the response envelope. Present only on non-2xx responses.
Show child attributes
Show child attributes
An MCP server (connector) registered on the account.
Show child attributes
Show child attributes
Was this page helpful?