Skip to main content
POST
/
v1
/
integrations
/
connections
/
custom-mcp
Connect a customer-supplied MCP server (static creds or OAuth)
curl --request POST \
  --url https://api-sandbox.featherhq.com/v1/integrations/connections/custom-mcp \
  --header 'Content-Type: application/json' \
  --header 'x-api-key: <api-key>' \
  --data '
{
  "nickname": "<string>",
  "server_url": "<string>",
  "transport": "sse",
  "auth_type": "none",
  "token": "<string>",
  "api_key": "<string>",
  "api_key_header": "X-API-Key",
  "headers": {},
  "oauth_authorize_url": "<string>",
  "oauth_token_url": "<string>",
  "oauth_client_id": "<string>",
  "oauth_client_secret": "<string>",
  "oauth_scopes": [
    "<string>"
  ]
}
'
{
  "connection_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
  "status": "<string>",
  "vendor": "<string>",
  "authorize_url": "<string>",
  "state": "<string>"
}

Authorizations

x-api-key
string
header
required

Body

application/json

Body for POST /v1/integrations/connections/custom-mcp.

One shape for all four auth types. none/bearer/api_key are the static-credential paths (Step 6 — the row is born active); oauth is the authorization-code path (Step 7 — the row starts pending_oauth and the response carries authorize_url + state). The OAuth endpoint URLs are optional because :func:discover_mcp_oauth fills them in when the server advertises RFC 9728 metadata; customer-supplied values override discovery.

nickname
string
required
server_url
string
required
transport
string
default:sse
auth_type
string
default:none
token
string | null
api_key
string | null
api_key_header
string
default:X-API-Key
headers
Headers · object
oauth_authorize_url
string | null
oauth_token_url
string | null
oauth_client_id
string | null
oauth_client_secret
string | null
oauth_scopes
string[]

Response

Successful Response

Returned by POST /v1/integrations/connections/custom-mcp.

authorize_url + state are populated only for the oauth path so the frontend can redirect the user to the provider; the static paths return status="active" with both None.

connection_id
string<uuid>
required
status
string
required
vendor
string
required
authorize_url
string | null
state
string | null