curl --request POST \
--url https://api.devic.ai/v1/tool-servers/{toolServerId}/clone \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.devic.ai/v1/tool-servers/{toolServerId}/clone"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.devic.ai/v1/tool-servers/{toolServerId}/clone', 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.devic.ai/v1/tool-servers/{toolServerId}/clone",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.devic.ai/v1/tool-servers/{toolServerId}/clone"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.devic.ai/v1/tool-servers/{toolServerId}/clone")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.devic.ai/v1/tool-servers/{toolServerId}/clone")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"_id": "<string>",
"clientUID": "<string>",
"enabled": true,
"url": "<string>",
"identifier": "<string>",
"name": "<string>",
"description": "<string>",
"mcpType": true,
"mcpServerProperties": {
"mode": "public",
"slug": "<string>",
"status": "active"
},
"toolServerDefinitionId": "<string>",
"imageUrl": "<string>",
"creartionTimestampMs": 123,
"lastEditTimestampMS": 123
}Clone a tool server
Creates a copy of the tool server and its definition. The cloned server will have ‘(Copy)’ appended to its name.
curl --request POST \
--url https://api.devic.ai/v1/tool-servers/{toolServerId}/clone \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.devic.ai/v1/tool-servers/{toolServerId}/clone"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.devic.ai/v1/tool-servers/{toolServerId}/clone', 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.devic.ai/v1/tool-servers/{toolServerId}/clone",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.devic.ai/v1/tool-servers/{toolServerId}/clone"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.devic.ai/v1/tool-servers/{toolServerId}/clone")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.devic.ai/v1/tool-servers/{toolServerId}/clone")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"_id": "<string>",
"clientUID": "<string>",
"enabled": true,
"url": "<string>",
"identifier": "<string>",
"name": "<string>",
"description": "<string>",
"mcpType": true,
"mcpServerProperties": {
"mode": "public",
"slug": "<string>",
"status": "active"
},
"toolServerDefinitionId": "<string>",
"imageUrl": "<string>",
"creartionTimestampMs": 123,
"lastEditTimestampMS": 123
}Authorizations
An API key from your Devic console, sent as Authorization: Bearer <key>. An embedded front end sends a tenant-session token instead, so no API key reaches the browser, and an OAuth integration sends its access token. Missing, invalid or expired credentials get a 401. See Authentication.
Path Parameters
The unique identifier of the tool server to clone
Response
Tool server cloned successfully
Tool server ID
Client UID
Whether the tool server is enabled
Base URL
Tool server identifier
Tool server name
Tool server description
Whether this is an MCP type server
Show child attributes
Show child attributes
Tool server definition ID
Image URL
Creation timestamp in milliseconds
Last edit timestamp in milliseconds