latestOpenAPI 3.1.0raw.githubusercontent.com2026-08-216381,9552.9 MB

f2cf3228f366

MCP Servers

Register

Register a new MCP server under an application. Set server_type to HOSTED (C1 runs a catalog integration) or EXTERNAL (a third-party MCP server you point C1 at by URL). Auth credentials are validated and stored securely.

post/api/v1/apps/{app_id}/mcp_servers

Path parameters

app_idstring required

App to register the MCP server under. When empty and app_managed_state_binding_ref is not set, a new managed app is created automatically.

Request body

acknowledgedFindingIdsstring[] nullable

finding_ids from the diagnostic the admin acknowledged. Each must cover a blocking-relaxable finding on oauth_diagnostic_id.

dataSensitivity'MCP_SERVER_DATA_SENSITIVITY_UNSPECIFIED' | 'MCP_SERVER_DATA_SENSITIVITY_PUBLIC' | 'MCP_SERVER_DATA_SENSITIVITY_INTERNAL' | 'MCP_SERVER_DATA_SENSITIVITY_CONFIDENTIAL' | 'MCP_SERVER_DATA_SENSITIVITY_RESTRICTED'

Data sensitivity classification.

descriptionstring

Admin-provided description.

displayNamestring

Admin-provided display name.

oauthDiagnosticIdstring

When registering a DCR (client_id_mode=DCR) hosted server, the id of the diagnostic returned by DiscoverMCPOAuthConfig that the admin reviewed. When set, the server uses that diagnostic as the canonical discovery result and relaxes only the acknowledged findings. Empty preserves the strict path.

serverType'MCP_SERVER_TYPE_UNSPECIFIED' | 'MCP_SERVER_TYPE_HOSTED' | 'MCP_SERVER_TYPE_EXTERNAL'

The type of MCP server being registered.

toolPrefixstring

Optional prefix for tool names in the C1 MCP server. Tools are exposed as "<tool_prefix>_<tool_name>". When empty, the system uses an auto-derived prefix (service name or hostname).

tunnelApplianceIdstring

ID of the bridge (TunnelBridge.id, a KSUID) that proxies this server. Only set when tunneled == true; must match a bridge enrolled for this tenant. The server resolves this at register time to an active credential and persists that on the connector config; runtime routing through the wormhole requester is keyed on the resolved credential.

Cross-field invariant: proto validation uses ignore_empty:true so an empty value passes the regex check. The service layer enforces that this field is non-empty whenever tunneled==true (see applyTunneledRegisterResolution).

tunnelPathstring

Endpoint path on the appliance-side MCP server (e.g. "/sse", "/mcp"). Only used for EXTERNAL servers when tunneled == true: the service synthesizes external_config.url as http://<tunnel_service_name><tunnel_path>, since the tunnel host is the announced service name and only the admin knows the path. Empty defaults to "/". Ignored for HOSTED and non-tunneled.

tunnelServiceNamestring

Service name as declared by the appliance via AnnounceServices. Required when tunneled == true (for both EXTERNAL and HOSTED). The frontend populates this from a dropdown of services the picked appliance has announced. At runtime, mcp-gateway uses this name as the wormhole port-name argument to DialByName.

tunneledboolean

Whether the MCP server is reached over a tunnel to a private appliance instead of a public URL.

userIdsstring[] nullable

Integration owners for the MCP server connector.

Response

MCPServerServiceRegisterResponse returns the newly created MCP server.