MCP Servers

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

Request

  • Base URL
    https://example.conductor.one
  • URL
    https://example.conductor.one/api/v1/apps/{app_id}/mcp_servers
  • Auth
    HTTP bearer and OAuth 2
    Client credentials
    Token URL: /auth/v1/token

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

accessProfileIdsstring[] nullable

Deprecated: use access_provisioning.request. Retained for older clients; used when access_provisioning.request is absent.

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.

accessProfilesAttachedboolean

Whether the selected system toolset reached every profile in the request access profiles. False means the server registered but the attach failed afterwards, and the profiles have to be wired from the server page. Always true when no request access profiles were supplied, since there was nothing to attach.

Changes

    • info

      added the new optional request property

    • info

      request property deprecated

    • info

      added the new optional request property

    • info

      added the optional property to the response with the status

    • info

      added the optional property // to the response with the status