Register an upstream MCP server
Registers a server for the gateway to proxy. The URL is validated against internal and loopback targets, and default_headers is checked against a blocklist, so a registration cannot be used to reach inside the network or forge platform headers. Registering does not discover tools — run a probe afterwards.
curl -X POST "https://mythic-analytics.gulp.workers.dev/builder/mcp/servers" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-d '{
"name": "Internal research server",
"url": "https://mcp.example.com/mcp",
"default_headers": {
"Authorization": "Bearer upstream-token"
},
"is_enabled": true
}'
import requests
import json
url = "https://mythic-analytics.gulp.workers.dev/builder/mcp/servers"
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_API_TOKEN"
}
data = {
"name": "Internal research server",
"url": "https://mcp.example.com/mcp",
"default_headers": {
"Authorization": "Bearer upstream-token"
},
"is_enabled": true
}
response = requests.post(url, headers=headers, json=data)
print(response.json())
const response = await fetch("https://mythic-analytics.gulp.workers.dev/builder/mcp/servers", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_API_TOKEN"
},
body: JSON.stringify({
"name": "Internal research server",
"url": "https://mcp.example.com/mcp",
"default_headers": {
"Authorization": "Bearer upstream-token"
},
"is_enabled": true
})
});
const data = await response.json();
console.log(data);
package main
import (
"fmt"
"net/http"
"bytes"
"encoding/json"
)
func main() {
data := []byte(`{
"name": "Internal research server",
"url": "https://mcp.example.com/mcp",
"default_headers": {
"Authorization": "Bearer upstream-token"
},
"is_enabled": true
}`)
req, err := http.NewRequest("POST", "https://mythic-analytics.gulp.workers.dev/builder/mcp/servers", bytes.NewBuffer(data))
if err != nil {
panic(err)
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Authorization", "Bearer YOUR_API_TOKEN")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
fmt.Println("Response Status:", resp.Status)
}
require 'net/http'
require 'json'
uri = URI('https://mythic-analytics.gulp.workers.dev/builder/mcp/servers')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri)
request['Content-Type'] = 'application/json'
request['Authorization'] = 'Bearer YOUR_API_TOKEN'
request.body = '{
"name": "Internal research server",
"url": "https://mcp.example.com/mcp",
"default_headers": {
"Authorization": "Bearer upstream-token"
},
"is_enabled": true
}'
response = http.request(request)
puts response.body
{
"data": {
"id": "123e4567-e89b-12d3-a456-426614174000",
"name": "Internal research server",
"url": "https://mcp.example.com/mcp",
"is_enabled": true,
"ownership": "agency",
"tool_count": 12,
"last_probed_at": "2024-12-25T10:00:00Z",
"created_at": "2024-12-25T10:00:00Z",
"updated_at": "2024-12-25T10:00:00Z"
}
}
{
"error": "Bad Request",
"message": "The request contains invalid parameters or malformed data",
"code": 400,
"details": [
{
"field": "email",
"message": "Invalid email format"
}
]
}
{
"error": "Forbidden",
"message": "You don't have permission to access this resource",
"code": 403
}
/builder/mcp/servers
Target server for requests. Edit to use your own host.
An agency key (ak_). Location secret keys are rejected. Scoped keys (mcp_) are not accepted here (403 not_available_to_scoped_keys).
ak_). Location secret keys are rejected. Scoped keys (mcp_) are not accepted here (403 not_available_to_scoped_keys).The media type of the request body
Public HTTPS endpoint of the upstream server.
Headers sent on every proxied request, e.g. upstream auth.
Request Preview
Response
Response will appear here after sending the request
Authentication
Bearer token. An agency key (ak_). Location secret keys are rejected. Scoped keys (mcp_) are not accepted here (403 not_available_to_scoped_keys).
Body
Internal research serverHeaders sent on every proxied request, e.g. upstream auth.
{"Authorization":"Bearer upstream-token"}true