Update Server
curl --request PUT \
--url https://api.example.com/servers/:name \
--header 'Content-Type: application/json' \
--data '
{
"version": "<string>",
"description": "<string>",
"license": "<string>",
"repository": {
"type": "<string>",
"url": "<string>"
},
"pricing": {
"currency": "<string>",
"amount": 123
},
"metadata": {
"homepage": "<string>"
}
}
'import requests
url = "https://api.example.com/servers/:name"
payload = {
"version": "<string>",
"description": "<string>",
"license": "<string>",
"repository": {
"type": "<string>",
"url": "<string>"
},
"pricing": {
"currency": "<string>",
"amount": 123
},
"metadata": { "homepage": "<string>" }
}
headers = {"Content-Type": "application/json"}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
version: '<string>',
description: '<string>',
license: '<string>',
repository: {type: '<string>', url: '<string>'},
pricing: {currency: '<string>', amount: 123},
metadata: {homepage: '<string>'}
})
};
fetch('https://api.example.com/servers/:name', 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.example.com/servers/:name",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'version' => '<string>',
'description' => '<string>',
'license' => '<string>',
'repository' => [
'type' => '<string>',
'url' => '<string>'
],
'pricing' => [
'currency' => '<string>',
'amount' => 123
],
'metadata' => [
'homepage' => '<string>'
]
]),
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.example.com/servers/:name"
payload := strings.NewReader("{\n \"version\": \"<string>\",\n \"description\": \"<string>\",\n \"license\": \"<string>\",\n \"repository\": {\n \"type\": \"<string>\",\n \"url\": \"<string>\"\n },\n \"pricing\": {\n \"currency\": \"<string>\",\n \"amount\": 123\n },\n \"metadata\": {\n \"homepage\": \"<string>\"\n }\n}")
req, _ := http.NewRequest("PUT", 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.put("https://api.example.com/servers/:name")
.header("Content-Type", "application/json")
.body("{\n \"version\": \"<string>\",\n \"description\": \"<string>\",\n \"license\": \"<string>\",\n \"repository\": {\n \"type\": \"<string>\",\n \"url\": \"<string>\"\n },\n \"pricing\": {\n \"currency\": \"<string>\",\n \"amount\": 123\n },\n \"metadata\": {\n \"homepage\": \"<string>\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/servers/:name")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"version\": \"<string>\",\n \"description\": \"<string>\",\n \"license\": \"<string>\",\n \"repository\": {\n \"type\": \"<string>\",\n \"url\": \"<string>\"\n },\n \"pricing\": {\n \"currency\": \"<string>\",\n \"amount\": 123\n },\n \"metadata\": {\n \"homepage\": \"<string>\"\n }\n}"
response = http.request(request)
puts response.read_body{
"status": "success",
"message": "Server 'weather-mcp' updated successfully",
"server": {
"name": "weather-mcp",
"version": "1.3.0",
"description": "Enhanced weather server with 10-day forecasts and alerts",
"author": "areeb",
"lang": "python",
"license": "MIT",
"entrypoint": "main.py",
"repository": {
"type": "git",
"url": "https://github.com/areeb/weather-mcp"
},
"pricing": {
"currency": "INR",
"amount": 0
}
}
}
{
"status": "error",
"detail": "New version must be greater than current version"
}
{
"status": "error",
"detail": "Only the server owner can update it"
}
{
"status": "error",
"detail": "Server not found"
}
Servers API
Update Server
Update metadata and configuration of an existing MCP server
PUT
/
servers
/
:name
Update Server
curl --request PUT \
--url https://api.example.com/servers/:name \
--header 'Content-Type: application/json' \
--data '
{
"version": "<string>",
"description": "<string>",
"license": "<string>",
"repository": {
"type": "<string>",
"url": "<string>"
},
"pricing": {
"currency": "<string>",
"amount": 123
},
"metadata": {
"homepage": "<string>"
}
}
'import requests
url = "https://api.example.com/servers/:name"
payload = {
"version": "<string>",
"description": "<string>",
"license": "<string>",
"repository": {
"type": "<string>",
"url": "<string>"
},
"pricing": {
"currency": "<string>",
"amount": 123
},
"metadata": { "homepage": "<string>" }
}
headers = {"Content-Type": "application/json"}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
version: '<string>',
description: '<string>',
license: '<string>',
repository: {type: '<string>', url: '<string>'},
pricing: {currency: '<string>', amount: 123},
metadata: {homepage: '<string>'}
})
};
fetch('https://api.example.com/servers/:name', 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.example.com/servers/:name",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'version' => '<string>',
'description' => '<string>',
'license' => '<string>',
'repository' => [
'type' => '<string>',
'url' => '<string>'
],
'pricing' => [
'currency' => '<string>',
'amount' => 123
],
'metadata' => [
'homepage' => '<string>'
]
]),
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.example.com/servers/:name"
payload := strings.NewReader("{\n \"version\": \"<string>\",\n \"description\": \"<string>\",\n \"license\": \"<string>\",\n \"repository\": {\n \"type\": \"<string>\",\n \"url\": \"<string>\"\n },\n \"pricing\": {\n \"currency\": \"<string>\",\n \"amount\": 123\n },\n \"metadata\": {\n \"homepage\": \"<string>\"\n }\n}")
req, _ := http.NewRequest("PUT", 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.put("https://api.example.com/servers/:name")
.header("Content-Type", "application/json")
.body("{\n \"version\": \"<string>\",\n \"description\": \"<string>\",\n \"license\": \"<string>\",\n \"repository\": {\n \"type\": \"<string>\",\n \"url\": \"<string>\"\n },\n \"pricing\": {\n \"currency\": \"<string>\",\n \"amount\": 123\n },\n \"metadata\": {\n \"homepage\": \"<string>\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/servers/:name")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"version\": \"<string>\",\n \"description\": \"<string>\",\n \"license\": \"<string>\",\n \"repository\": {\n \"type\": \"<string>\",\n \"url\": \"<string>\"\n },\n \"pricing\": {\n \"currency\": \"<string>\",\n \"amount\": 123\n },\n \"metadata\": {\n \"homepage\": \"<string>\"\n }\n}"
response = http.request(request)
puts response.read_body{
"status": "success",
"message": "Server 'weather-mcp' updated successfully",
"server": {
"name": "weather-mcp",
"version": "1.3.0",
"description": "Enhanced weather server with 10-day forecasts and alerts",
"author": "areeb",
"lang": "python",
"license": "MIT",
"entrypoint": "main.py",
"repository": {
"type": "git",
"url": "https://github.com/areeb/weather-mcp"
},
"pricing": {
"currency": "INR",
"amount": 0
}
}
}
{
"status": "error",
"detail": "New version must be greater than current version"
}
{
"status": "error",
"detail": "Only the server owner can update it"
}
{
"status": "error",
"detail": "Server not found"
}
Endpoint
Authentication
- Required
This endpoint requires authentication. You must be the server owner.
Only the server owner can update server metadata
Path Parameters
string
required
Unique server identifier to update. Example:
weather-mcpRequest Body
All fields are optional. Only include fields you want to update.
string
New semantic version number. Format:
MAJOR.MINOR.PATCH. Must be greater than the current version.string
Updated description. Length: 20-500 characters
string
Updated software license. Examples:
MIT, Apache-2.0, GPL-3.0object
object
Response
string
"success" on success, "error" on failurestring
Human-readable confirmation message
object
The updated server object (same structure as the Get Server response)
Examples
# Update version and description
curl -X PUT "https://api.superbox.ai/api/v1/servers/weather-mcp" \
-H "Authorization: Bearer $SUPERBOX_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"version": "1.3.0",
"description": "Enhanced weather server with 10-day forecasts"
}'
# Update pricing
curl -X PUT "https://api.superbox.ai/api/v1/servers/weather-mcp" \
-H "Authorization: Bearer $SUPERBOX_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"pricing": {
"currency": "INR",
"amount": 99
}
}'
// Update description
const updates = {
description: "Enhanced weather server with 10-day forecasts and alerts"
};
const response = await fetch(
'https://api.superbox.ai/api/v1/servers/weather-mcp',
{
method: 'PUT',
headers: {
'Authorization': `Bearer ${process.env.SUPERBOX_API_TOKEN}`,
'Content-Type': 'application/json'
},
body: JSON.stringify(updates)
}
);
const result = await response.json();
if (result.status === 'success') {
console.log('Server updated successfully');
console.log('Updated server:', result.server.name);
} else {
console.error('Failed:', result.detail);
}
import requests
import os
server_name = "weather-mcp"
url = f"https://api.superbox.ai/api/v1/servers/{server_name}"
updates = {
"pricing": {
"currency": "INR",
"amount": 99
}
}
headers = {
"Authorization": f"Bearer {os.getenv('SUPERBOX_API_TOKEN')}",
"Content-Type": "application/json"
}
response = requests.put(url, headers=headers, json=updates)
result = response.json()
if result['status'] == 'success':
print(f"Server updated: {result['message']}")
else:
print(f"Failed: {result['detail']}")
package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
"os"
)
type ServerUpdate struct {
Version string `json:"version,omitempty"`
Description string `json:"description,omitempty"`
Pricing *Pricing `json:"pricing,omitempty"`
}
type Pricing struct {
Currency string `json:"currency"`
Amount float64 `json:"amount"`
}
func updateServer(name string, updates ServerUpdate) error {
url := fmt.Sprintf("https://api.superbox.ai/api/v1/servers/%s", name)
jsonData, _ := json.Marshal(updates)
req, _ := http.NewRequest("PUT", url, bytes.NewBuffer(jsonData))
req.Header.Set("Authorization", "Bearer "+os.Getenv("SUPERBOX_API_TOKEN"))
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
return err
}
defer resp.Body.Close()
var result map[string]interface{}
json.NewDecoder(resp.Body).Decode(&result)
if result["status"] == "success" {
fmt.Println("Server updated successfully")
}
return nil
}
func main() {
updates := ServerUpdate{
Version: "1.3.0",
Description: "Enhanced weather server",
}
updateServer("weather-mcp", updates)
}
Response Examples
{
"status": "success",
"message": "Server 'weather-mcp' updated successfully",
"server": {
"name": "weather-mcp",
"version": "1.3.0",
"description": "Enhanced weather server with 10-day forecasts and alerts",
"author": "areeb",
"lang": "python",
"license": "MIT",
"entrypoint": "main.py",
"repository": {
"type": "git",
"url": "https://github.com/areeb/weather-mcp"
},
"pricing": {
"currency": "INR",
"amount": 0
}
}
}
{
"status": "error",
"detail": "New version must be greater than current version"
}
{
"status": "error",
"detail": "Only the server owner can update it"
}
{
"status": "error",
"detail": "Server not found"
}
Update Scenarios
Version Bump
Version Bump
When to bump versions:
- Patch (1.0.0 to 1.0.1): Bug fixes, minor changes
- Minor (1.0.0 to 1.1.0): New features, backward compatible
- Major (1.0.0 to 2.0.0): Breaking changes
await fetch(url, {
method: 'PUT',
headers,
body: JSON.stringify({ version: '1.0.1' })
});
Pricing Changes
Pricing Changes
// Make server free
await fetch(url, {
method: 'PUT',
headers,
body: JSON.stringify({
pricing: { currency: 'INR', amount: 0 }
})
});
Existing users keep their current pricing until the next billing cycle
Description Updates
Description Updates
requests.put(url, headers=headers, json={
'description': 'Now with 10-day forecasts and weather alerts!'
})
Repository Migration
Repository Migration
Repository changes trigger a new security scan
await fetch(url, {
method: 'PUT',
headers,
body: JSON.stringify({
repository: {
type: 'git',
url: 'https://github.com/new-org/weather-mcp'
}
})
});
Best Practices
Semantic Versioning
Follow semver strictly to communicate changes clearly to users
Document Changes
Update your README and changelog when making updates
Test Before Update
Test changes in your repository before updating the server
Notify Users
For breaking changes, notify users through your communication channels
⌘I