Skip to content

client.mcp.endpoints

client.mcp.endpoints — the mcp.endpoints operations.

On AsyncKindgi every method is the same, awaited.

list(
*,
limit: int | None = None,
cursor: str | None = None,
transport: Literal['stdio', 'http-sse', 'streamable-http'] | None = None,
scope_kind: Literal['tenant', 'org', 'project'] | None = None,
scope_id: str | None = None,
inherit: bool | None = None,
timeout: float | None = None,
) -> MCPEndpointCollectionPage

List MCP endpoints. GET /v1/mcp/endpoints

Cursor-paginated. Optional ?transport= narrows to a single variant (stdio | http-sse | streamable-http). ?scopeKind + ?scopeId + ?inherit narrow to a specific scope; inherit is LOAD-BEARING here (policy/config-scoped binding — controls the upward-hierarchy walk).

register(
*,
idempotency_key: str | None = None,
timeout: float | None = None,
**fields: Any,
) -> RegisterMCPEndpointResult

Register an MCP endpoint. POST /v1/mcp/endpoints

Body is a full MCPEndpoint plus the scope to register it in (scopeKind + scopeId); authorization checks that scope. Server validates the closed transport enum + the config.transport matches transport guardrail + per-variant required fields (command for stdio; url for http-sse / streamable-http), and refuses unknown fields. secretRef names a secret in the deployment's store — plaintext secrets never cross the wire. A deployment with KINDGI_TENANT_HOST_ACCESS=deployed (the default outside development) refuses a stdio endpoint, which would run a command on the server's host: 403 host-access-denied.

get(*, timeout: float | None = None) -> MCPEndpoint

Fetch an MCP endpoint. GET /v1/mcp/endpoints/{endpointId}

Returns the wire-safe MCPEndpoint (secrets never cross the wire — secretRef names a secret the runtime resolves inside the deployment).

unregister(
*,
idempotency_key: str | None = None,
timeout: float | None = None,
) -> UnregisterMCPEndpointResult

Unregister an MCP endpoint. POST /v1/mcp/endpoints/{endpointId}/unregister