Create a connector
/v1/mcp-integrationsCreate a connector.
Registers an upstream for the MCP Gateway: an MCP server (kind: MCP, the default), a REST API described by an OpenAPI document (OPENAPI) or a REST API with hand-declared endpoints (HTTP). Credentials (headers, query parameters, OAuth client secret) are stored encrypted and never returned. The URL, spec URL and token endpoint must pass the egress policy (public addresses only). The connector starts with sync_status: NEVER: sync it to discover its capabilities. Without workspace_id it is an organization-level connector that can be shared with workspaces.
Requires an organization admin key, or a workspace admin key for workspace_id (an organization-level connector needs an organization admin). Returns 400 when the settings do not fit together (for example headers with an OAuth auth type, a spec on an MCP connector, an unknown guardrail). Returns 402 when the organization's plan does not include the MCP Gateway.
Authorization
AuthorizationBearer va_A platform API key (
va_...), created under Settings > API keys. Scoped to an organization or one workspace, with an admin or member role. Used by the management API.
Request body application/json
the connector to create
organizationstringrequiredThe organization's identifier (slug).
At least 1 characters
namestringrequiredDisplay name, up to 255 characters.
At least 0 characters · At most 255 characters
urlstringrequiredThe upstream URL, up to 2048 characters: the MCP server's endpoint for
MCP, the API's base URL forOPENAPIandHTTP(no query string or fragment). It must pass the gateway's egress policy (public addresses only).At least 0 characters · At most 2048 characters
workspace_idstring<uuid>The workspace that owns the connector (UUID). Absent: an organization-level connector, which can be shared with several workspaces (see
global_workspace_accessand the workspace access endpoint).descriptionstringOptional free-text description.
transportenum<string>The upstream transport. Only
HTTP(Streamable HTTP); the default.One of
"HTTP"auth_typeenum<string>How the gateway authenticates upstream:
NONE,HEADERS,OAUTH_AUTOorOAUTH_CLIENT_CREDENTIALS. Default:HEADERSwhenheadersorquery_paramsare given, elseNONE.One of
"NONE","HEADERS","OAUTH_AUTO","OAUTH_CLIENT_CREDENTIALS"headersmap<string, string>HEADERSauth: header name to value, sent on every upstream request. Write-only. Names that the gateway sets itself (for exampleHost,Content-Type,Mcp-Session-Id) are refused, and values may not contain control characters. Cannot be combined with an OAuth auth type.oauthobjectOAuth settings for a connector that authenticates upstream with OAuth.
OAUTH_CLIENT_CREDENTIALSneedsclient_idandclient_secret: a client you registered at the upstream's authorization server. ForOAUTH_AUTOon an MCP server they are optional: without a client the gateway registers itself; give one when the upstream requires pre-registration. On anOPENAPIorHTTPconnector, OAuth needstoken_endpoint, andOAUTH_AUTOalso needsauthorization_endpointandclient_id.Child attributes
client_idstringThe OAuth client ID, up to 500 characters.
At least 0 characters · At most 500 characters
client_secretstringwrite-onlyThe client secret, up to 2000 characters. Write-only: stored encrypted, never returned.
At least 0 characters · At most 2000 characters
scopesstringScopes to request, space-separated, up to 1000 characters. Empty clears them.
At least 0 characters · At most 1000 characters
token_endpointstringThe upstream token endpoint, up to 2000 characters. On an MCP server it skips discovery for client credentials. It must pass the egress policy.
At least 0 characters · At most 2000 characters
authorization_endpointstringOAUTH_AUTOon anOPENAPIorHTTPconnector: where people sign in (an https URL, up to 2000 characters). An MCP server's is discovered, so it is refused there.At least 0 characters · At most 2000 characters
kindenum<string>What is behind the connector:
MCP(default),OPENAPIorHTTP. Fixed once created.One of
"MCP","OPENAPI","HTTP"spec_urlstringOPENAPIonly: where the OpenAPI document is fetched from, on every sync. Give this orspec_content. Up to 2048 characters.At least 0 characters · At most 2048 characters
spec_contentstringOPENAPIonly: the OpenAPI 3.0 or 3.1 document itself, in the formatspec_formatnames.spec_formatenum<string>OPENAPIonly: the format ofspec_content,JSONorYAML. Required withspec_content.One of
"JSON","YAML"http_toolsobject[]HTTPonly: the endpoints, declared by hand. At most 200.At most 200 items
Child attributes
namestringrequiredThe tool's name, up to 128 characters.
At least 0 characters · At most 128 characters
methodstringrequiredThe HTTP method:
GET,POST,PUT,PATCH,DELETEorHEAD.At least 1 characters
pathstringrequiredThe path, relative to the connector's base URL, up to 2048 characters. May hold
{name}placeholders filled from arguments.At least 0 characters · At most 2048 characters
titlestringHuman-readable title, up to 255 characters.
At least 0 characters · At most 255 characters
descriptionstringWhat the tool does, up to 4000 characters. Agents read it to choose the tool.
At least 0 characters · At most 4000 characters
querystring[]Arguments sent as query parameters.
headersstring[]Arguments sent as request headers.
input_schemamap<string, object>A JSON Schema of type
object; its properties are the tool's arguments.body_formatstringHow the body is encoded:
json(default) orform.
query_paramsmap<string, string>OPENAPIandHTTPwithHEADERSauth: API keys sent as query parameters (name to value), alone or withheaders. Write-only.global_workspace_accessbooleanOrganization-level connectors only:
truelets every workspace in the organization use it. Defaultfalse. Ignored for a workspace-owned connector.org_connection_for_usersbooleanOAUTH_AUTOonly:truelets a signed-in person who has not connected their own account use the organization connection. Defaultfalse. Agents on an MCP key always use the organization connection.guardrail_slugsstring[]Guardrails run on every call through this connector, in order, at most 10: INPUT checks on the arguments sent upstream, OUTPUT checks on what the upstream returns. Each must exist in the organization; an organization-level connector takes only organization-level guardrails.
At most 10 items
Responses
Created
idstring<uuid>The connector's ID (UUID).
slugstringThe connector's slug (
mcpi-followed by 16 characters), used in the API paths.organizationstringThe organization that owns it.
workspace_idstring<uuid>The owning workspace (UUID). Absent for an organization-level connector.
namestringDisplay name.
descriptionstringDescription.
urlstringThe upstream URL (the base URL for a REST connector).
kindenum<string>MCP,OPENAPIorHTTP.One of
"MCP","OPENAPI","HTTP"spec_urlstringOPENAPI: where the document is fetched from.has_spec_documentbooleanOPENAPIandHTTP: whether an uploaded document is stored. The document itself is not returned.spec_formatenum<string>OPENAPI: the format of the uploaded document,JSONorYAML.One of
"JSON","YAML"spec_hashstringOPENAPIandHTTP: SHA-256 of the spec the last sync read.http_toolsobject[]HTTP: the declared endpoints.Child attributes
namestringrequiredThe tool's name, up to 128 characters.
At least 0 characters · At most 128 characters
methodstringrequiredThe HTTP method:
GET,POST,PUT,PATCH,DELETEorHEAD.At least 1 characters
pathstringrequiredThe path, relative to the connector's base URL, up to 2048 characters. May hold
{name}placeholders filled from arguments.At least 0 characters · At most 2048 characters
titlestringHuman-readable title, up to 255 characters.
At least 0 characters · At most 255 characters
descriptionstringWhat the tool does, up to 4000 characters. Agents read it to choose the tool.
At least 0 characters · At most 4000 characters
querystring[]Arguments sent as query parameters.
headersstring[]Arguments sent as request headers.
input_schemamap<string, object>A JSON Schema of type
object; its properties are the tool's arguments.body_formatstringHow the body is encoded:
json(default) orform.
query_param_namesstring[]Names of the query-parameter credentials. Their values are never returned.
transportenum<string>The upstream transport:
HTTP.One of
"HTTP"auth_typeenum<string>NONE,HEADERS,OAUTH_AUTOorOAUTH_CLIENT_CREDENTIALS.One of
"NONE","HEADERS","OAUTH_AUTO","OAUTH_CLIENT_CREDENTIALS"header_namesstring[]Names of the stored credential headers. Their values are never returned.
oauthobjectA connector's OAuth client registration with its upstream. The client secret is never returned.
Child attributes
client_idstringThe OAuth client ID the gateway uses at the upstream.
registrationstringHow the client was registered:
PRE_REGISTERED(given by you),CIMD(a client ID metadata document) orDCR(dynamic client registration). Absent until the first sign-in or token request.has_client_secretbooleantruewhen a client secret is stored.issuerstringThe upstream authorization server the registration is bound to.
scopesstringThe scopes requested, space-separated.
authorization_endpointstringWhere people sign in. Shown for
OPENAPIandHTTPconnectors only.token_endpointstringThe upstream token endpoint.
global_workspace_accessbooleanWhether every workspace in the organization may use it.
org_connection_for_usersbooleanOAUTH_AUTO: whether a signed-in person without their own connected account may use the organization connection.statusenum<string>ACTIVEorDISABLED.One of
"ACTIVE","DISABLED"protocol_versionstringThe MCP protocol version the upstream spoke on the last sync.
protocol_eraenum<string>MODERNorLEGACY, fromprotocol_version.One of
"MODERN","LEGACY"server_namestringThe name the upstream reported on the last sync (a REST connector: the spec's title).
server_versionstringThe version the upstream reported on the last sync.
instructionsstringUsage instructions the upstream sent for agents, if any.
sync_statusenum<string>NEVER,OK,FAILEDorSTALE.One of
"NEVER","OK","FAILED","STALE"sync_errorstringWhy the last sync failed. Absent unless
sync_statusisFAILED.last_synced_atstring<date-time>When the last successful sync finished (ISO 8601).
last_sync_attempt_atstring<date-time>When a sync was last attempted (ISO 8601).
created_bystringThe user who created it.
created_atstring<date-time>When it was created (ISO 8601).
updated_atstring<date-time>When it was last changed (ISO 8601).
guardrail_slugsstring[]Guardrails run on every call through this connector, in order. Empty when there are none.