---
title: Konnect AI Catalog OpenAPI Specification
description: Konnect AI Catalog is the API for creating and managing AI interfaces
  in the Konnect Catalog.
url: "/api/konnect/ai-builder/v1/"
canonical_url: "/api/konnect/ai-builder/v1/"
content_type: api
canonical: true


---

# Konnect AI Catalog OpenAPI Specification










```yaml
---
openapi: 3.0.3
info:
  title: Konnect AI Catalog
  version: 1.12.5
  description: 'Konnect AI Catalog is the API for creating and managing AI interfaces
    in the Konnect Catalog.

    '
  contact:
    name: Kong
    url: https://cloud.konghq.com
  x-oas-source: kong/platform-api@8758c1f94510708747045d57362099c3f399b919
  x-oas-source-link: https://github.com/Kong/platform-api/commit/8758c1f94510708747045d57362099c3f399b919
servers:
- url: https://us.api.konghq.com/v1
  description: United-States Production region
- url: https://eu.api.konghq.com/v1
  description: Europe Production region
- url: https://au.api.konghq.com/v1
  description: Australia Production region
- url: https://me.api.konghq.com/v1
  description: Middle-East Production region
- url: https://in.api.konghq.com/v1
  description: India Production region
- url: https://sg.api.konghq.com/v1
  description: Singapore Production region
paths:
  "/ai-models":
    get:
      operationId: list-ai-models
      summary: List AI Models
      description: 'Returns a paginated list of AI Models for the current organization.
        Each row includes a `managed_by` object derived from whether the model is
        linked to an AI Gateway model.

        '
      parameters:
      - "$ref": "#/components/parameters/PageSize"
      - "$ref": "#/components/parameters/PageNumber"
      - name: filter
        in: query
        description: Filter AI Models returned in the response.
        required: false
        schema:
          "$ref": "#/components/schemas/AiModelFilterParameters"
        style: deepObject
      - "$ref": "#/components/parameters/AiModelSort"
      responses:
        '200':
          description: A paginated list of AI Models
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/AiModelList"
        '400':
          "$ref": "#/components/responses/BadRequest"
        '401':
          "$ref": "#/components/responses/Unauthorized"
        '403':
          "$ref": "#/components/responses/Forbidden"
      tags:
      - Catalog AI Models
    post:
      operationId: create-ai-model
      summary: Create AI Model
      description: 'Creates a bare AI Model. No `target_models` are accepted here
        — create the version separately with `POST /ai-models/{aiModelId}/versions`.

        '
      requestBody:
        required: true
        content:
          application/json:
            schema:
              "$ref": "#/components/schemas/AiModelCreate"
      responses:
        '201':
          description: The created AI Model
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/AiModel"
        '400':
          "$ref": "#/components/responses/BadRequest"
        '401':
          "$ref": "#/components/responses/Unauthorized"
        '403':
          "$ref": "#/components/responses/Forbidden"
        '409':
          "$ref": "#/components/responses/Conflict"
      tags:
      - Catalog AI Models
  "/ai-models/{aiModelId}":
    parameters:
    - "$ref": "#/components/parameters/AiModelIdPath"
    get:
      operationId: get-ai-model
      summary: Get AI Model
      description: Returns a single AI Model.
      responses:
        '200':
          description: AI Model details
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/AiModel"
        '401':
          "$ref": "#/components/responses/Unauthorized"
        '403':
          "$ref": "#/components/responses/Forbidden"
        '404':
          "$ref": "#/components/responses/NotFound"
      tags:
      - Catalog AI Models
    patch:
      operationId: update-ai-model
      summary: Update AI Model
      description: 'Partially updates an AI Model.

        '
      requestBody:
        required: true
        content:
          application/json:
            schema:
              "$ref": "#/components/schemas/AiModelUpdate"
      responses:
        '200':
          description: The updated AI Model
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/AiModel"
        '400':
          "$ref": "#/components/responses/BadRequest"
        '401':
          "$ref": "#/components/responses/Unauthorized"
        '403':
          "$ref": "#/components/responses/Forbidden"
        '404':
          "$ref": "#/components/responses/NotFound"
        '409':
          "$ref": "#/components/responses/Conflict"
      tags:
      - Catalog AI Models
    put:
      operationId: upsert-ai-model
      summary: Replace AI Model
      description: 'Replaces an AI Model.

        '
      requestBody:
        required: true
        content:
          application/json:
            schema:
              "$ref": "#/components/schemas/AiModelReplace"
      responses:
        '200':
          description: The replaced AI Model
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/AiModel"
        '400':
          "$ref": "#/components/responses/BadRequest"
        '401':
          "$ref": "#/components/responses/Unauthorized"
        '403':
          "$ref": "#/components/responses/Forbidden"
        '404':
          "$ref": "#/components/responses/NotFound"
        '409':
          "$ref": "#/components/responses/Conflict"
      tags:
      - Catalog AI Models
    delete:
      operationId: delete-ai-model
      summary: Delete AI Model
      description: 'Deletes an AI Model.

        '
      responses:
        '204':
          description: Successfully deleted the AI Model
        '401':
          "$ref": "#/components/responses/Unauthorized"
        '403':
          "$ref": "#/components/responses/Forbidden"
        '404':
          "$ref": "#/components/responses/NotFound"
      tags:
      - Catalog AI Models
  "/ai-models/{aiModelId}/versions":
    parameters:
    - "$ref": "#/components/parameters/AiModelIdPath"
    get:
      operationId: list-ai-model-versions
      summary: List AI Model versions
      description: 'Returns the AI Model''s versions.

        '
      parameters:
      - "$ref": "#/components/parameters/PageSize"
      - "$ref": "#/components/parameters/PageNumber"
      responses:
        '200':
          description: The AI Model's versions
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/AiModelVersionList"
        '400':
          "$ref": "#/components/responses/BadRequest"
        '401':
          "$ref": "#/components/responses/Unauthorized"
        '403':
          "$ref": "#/components/responses/Forbidden"
        '404':
          "$ref": "#/components/responses/NotFound"
      tags:
      - Catalog AI Model Versions
    post:
      operationId: create-ai-model-version
      summary: Create AI Model version
      description: 'Creates the `latest` version with its `target_models`. Currently,
        a model only has a single version. Returns `409` if a version already exists.

        '
      requestBody:
        required: true
        content:
          application/json:
            schema:
              "$ref": "#/components/schemas/AiModelVersionCreate"
      responses:
        '201':
          description: The created version
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/AiModelVersion"
        '400':
          "$ref": "#/components/responses/BadRequest"
        '401':
          "$ref": "#/components/responses/Unauthorized"
        '403':
          "$ref": "#/components/responses/Forbidden"
        '404':
          "$ref": "#/components/responses/NotFound"
        '409':
          "$ref": "#/components/responses/Conflict"
      tags:
      - Catalog AI Model Versions
  "/ai-models/{aiModelId}/versions/latest":
    parameters:
    - "$ref": "#/components/parameters/AiModelIdPath"
    get:
      operationId: get-latest-ai-model-version
      summary: Get latest AI Model version
      description: 'Returns the AI Model''s `latest` version, including its `target_models`.

        '
      responses:
        '200':
          description: The latest version
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/AiModelVersion"
        '401':
          "$ref": "#/components/responses/Unauthorized"
        '403':
          "$ref": "#/components/responses/Forbidden"
        '404':
          "$ref": "#/components/responses/NotFound"
      tags:
      - Catalog AI Model Versions
    patch:
      operationId: update-latest-ai-model-version
      summary: Update latest AI Model version
      description: 'Partially updates the `latest` version. `target_models`, when
        supplied, is a full-array replacement.

        '
      requestBody:
        required: true
        content:
          application/json:
            schema:
              "$ref": "#/components/schemas/AiModelVersionUpdate"
      responses:
        '200':
          description: The updated version
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/AiModelVersion"
        '400':
          "$ref": "#/components/responses/BadRequest"
        '401':
          "$ref": "#/components/responses/Unauthorized"
        '403':
          "$ref": "#/components/responses/Forbidden"
        '404':
          "$ref": "#/components/responses/NotFound"
      tags:
      - Catalog AI Model Versions
    put:
      operationId: upsert-latest-ai-model-version
      summary: Replace latest AI Model version
      description: 'Replaces the `latest` version.

        '
      requestBody:
        required: true
        content:
          application/json:
            schema:
              "$ref": "#/components/schemas/AiModelVersionReplace"
      responses:
        '200':
          description: The replaced version
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/AiModelVersion"
        '400':
          "$ref": "#/components/responses/BadRequest"
        '401':
          "$ref": "#/components/responses/Unauthorized"
        '403':
          "$ref": "#/components/responses/Forbidden"
        '404':
          "$ref": "#/components/responses/NotFound"
      tags:
      - Catalog AI Model Versions
    delete:
      operationId: delete-latest-ai-model-version
      summary: Delete latest AI Model version
      description: 'Deletes the AI Model''s `latest` version. Returns `404` if no
        version exists yet.

        '
      responses:
        '204':
          description: Successfully deleted the version
        '401':
          "$ref": "#/components/responses/Unauthorized"
        '403':
          "$ref": "#/components/responses/Forbidden"
        '404':
          "$ref": "#/components/responses/NotFound"
      tags:
      - Catalog AI Model Versions
  "/ai-models/{aiModelId}/versions/latest/spec":
    parameters:
    - "$ref": "#/components/parameters/AiModelIdPath"
    get:
      operationId: get-ai-model-version-spec
      summary: Get AI Model version spec
      description: 'Returns the `latest` version''s oas specification contents along
        with metadata.

        '
      responses:
        '200':
          description: The version's oas specification
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/AiModelVersionSpec"
        '401':
          "$ref": "#/components/responses/Unauthorized"
        '403':
          "$ref": "#/components/responses/Forbidden"
        '404':
          "$ref": "#/components/responses/NotFound"
      tags:
      - Catalog AI Model Specs
    put:
      operationId: upsert-ai-model-version-spec
      summary: Upsert AI Model version spec
      description: 'Creates or replaces the `latest` version''s oas specification
        (upsert).

        '
      requestBody:
        required: true
        content:
          application/json:
            schema:
              "$ref": "#/components/schemas/AiModelVersionSpecWrite"
      responses:
        '200':
          description: The replaced spec
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/AiModelVersionSpec"
        '201':
          description: The created spec
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/AiModelVersionSpec"
        '400':
          "$ref": "#/components/responses/BadRequest"
        '401':
          "$ref": "#/components/responses/Unauthorized"
        '403':
          "$ref": "#/components/responses/Forbidden"
        '404':
          "$ref": "#/components/responses/NotFound"
      tags:
      - Catalog AI Model Specs
    delete:
      operationId: delete-ai-model-version-spec
      summary: Delete AI Model version spec
      description: 'Deletes the `latest` version''s oas specification.

        '
      responses:
        '204':
          description: Successfully deleted the spec
        '401':
          "$ref": "#/components/responses/Unauthorized"
        '403':
          "$ref": "#/components/responses/Forbidden"
        '404':
          "$ref": "#/components/responses/NotFound"
      tags:
      - Catalog AI Model Specs
  "/ai-models/{aiModelId}/implementations":
    parameters:
    - "$ref": "#/components/parameters/AiModelIdPath"
    get:
      operationId: list-ai-model-implementations
      summary: List AI Model implementations
      description: 'Returns a paginated list of the AI Model''s implementation records.

        '
      parameters:
      - "$ref": "#/components/parameters/PageSize"
      - "$ref": "#/components/parameters/PageNumber"
      responses:
        '200':
          description: The AI Model's implementations
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/AiModelImplementationList"
        '400':
          "$ref": "#/components/responses/BadRequest"
        '401':
          "$ref": "#/components/responses/Unauthorized"
        '403':
          "$ref": "#/components/responses/Forbidden"
        '404':
          "$ref": "#/components/responses/NotFound"
      tags:
      - Catalog AI Model Implementations
    post:
      operationId: create-ai-model-implementation
      summary: Create AI Model implementation
      description: 'Creates an implementation record for the AI Model. Returns `409`
        if the model has an existing implementation.

        '
      requestBody:
        required: true
        content:
          application/json:
            schema:
              "$ref": "#/components/schemas/AiModelImplementationCreate"
      responses:
        '201':
          description: The created implementation
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/AiModelImplementation"
        '400':
          "$ref": "#/components/responses/BadRequest"
        '401':
          "$ref": "#/components/responses/Unauthorized"
        '403':
          "$ref": "#/components/responses/Forbidden"
        '404':
          "$ref": "#/components/responses/NotFound"
        '409':
          "$ref": "#/components/responses/Conflict"
      tags:
      - Catalog AI Model Implementations
  "/ai-models/{aiModelId}/implementations/{implementationId}":
    parameters:
    - "$ref": "#/components/parameters/AiModelIdPath"
    - "$ref": "#/components/parameters/AiModelImplementationIdPath"
    get:
      operationId: get-ai-model-implementation
      summary: Get AI Model implementation
      description: Returns a single AI Model implementation record.
      responses:
        '200':
          description: AI Model implementation details
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/AiModelImplementation"
        '401':
          "$ref": "#/components/responses/Unauthorized"
        '403':
          "$ref": "#/components/responses/Forbidden"
        '404':
          "$ref": "#/components/responses/NotFound"
      tags:
      - Catalog AI Model Implementations
    delete:
      operationId: delete-ai-model-implementation
      summary: Delete AI Model implementation
      description: Removes a single AI Model implementation (link) record by identifier.
      responses:
        '204':
          description: Successfully deleted the AI Model implementation
        '401':
          "$ref": "#/components/responses/Unauthorized"
        '403':
          "$ref": "#/components/responses/Forbidden"
        '404':
          "$ref": "#/components/responses/NotFound"
      tags:
      - Catalog AI Model Implementations
  "/ai-models/{aiModelId}/spec":
    parameters:
    - "$ref": "#/components/parameters/AiModelIdPath"
    get:
      operationId: get-ai-model-spec
      summary: Get AI Model spec
      description: 'Convenience shortcut to the `latest` version''s oas specification.
        Returns `404`  if either the version or the specification is missing, distinguished
        by error code in the response body (`ai_model_version_not_found` / `ai_model_spec_not_found`).

        '
      responses:
        '200':
          description: The latest version's spec
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/AiModelVersionSpec"
        '401':
          "$ref": "#/components/responses/Unauthorized"
        '403':
          "$ref": "#/components/responses/Forbidden"
        '404':
          "$ref": "#/components/responses/NotFound"
      tags:
      - Catalog AI Model Specs
  "/mcp-servers":
    get:
      operationId: list-mcps
      summary: List MCPs
      description: 'Returns a paginated list of MCPs for the current organization.
        Each row includes a `managed_by` object derived from whether the MCP is linked
        to an AI Gateway MCP.

        '
      parameters:
      - "$ref": "#/components/parameters/PageSize"
      - "$ref": "#/components/parameters/PageNumber"
      - name: filter
        in: query
        description: Filter MCPs returned in the response.
        required: false
        schema:
          "$ref": "#/components/schemas/CatalogMCPFilterParameters"
        style: deepObject
      - "$ref": "#/components/parameters/CatalogMCPSort"
      responses:
        '200':
          "$ref": "#/components/responses/ListCatalogMCPResponse"
        '400':
          "$ref": "#/components/responses/BadRequest"
        '401':
          "$ref": "#/components/responses/Unauthorized"
        '403':
          "$ref": "#/components/responses/Forbidden"
      tags:
      - Catalog MCPs
    post:
      operationId: create-mcp
      summary: Create MCP
      description: 'Creates a bare MCP.

        '
      requestBody:
        "$ref": "#/components/requestBodies/CreateCatalogMCPRequest"
      responses:
        '201':
          "$ref": "#/components/responses/CatalogMCPResponse"
        '400':
          "$ref": "#/components/responses/BadRequest"
        '401':
          "$ref": "#/components/responses/Unauthorized"
        '403':
          "$ref": "#/components/responses/Forbidden"
        '409':
          "$ref": "#/components/responses/Conflict"
      tags:
      - Catalog MCPs
  "/mcp-servers/{mcpId}":
    parameters:
    - "$ref": "#/components/parameters/CatalogMCPIdPath"
    get:
      operationId: get-mcp
      summary: Get MCP
      description: Returns a single MCP.
      responses:
        '200':
          "$ref": "#/components/responses/CatalogMCPResponse"
        '401':
          "$ref": "#/components/responses/Unauthorized"
        '403':
          "$ref": "#/components/responses/Forbidden"
        '404':
          "$ref": "#/components/responses/NotFound"
      tags:
      - Catalog MCPs
    patch:
      operationId: update-mcp
      summary: Update MCP
      description: 'Partially updates an MCP.

        '
      requestBody:
        "$ref": "#/components/requestBodies/UpdateCatalogMCPRequest"
      responses:
        '200':
          "$ref": "#/components/responses/CatalogMCPResponse"
        '400':
          "$ref": "#/components/responses/BadRequest"
        '401':
          "$ref": "#/components/responses/Unauthorized"
        '403':
          "$ref": "#/components/responses/Forbidden"
        '404':
          "$ref": "#/components/responses/NotFound"
        '409':
          "$ref": "#/components/responses/Conflict"
      tags:
      - Catalog MCPs
    put:
      operationId: upsert-mcp
      summary: Replace MCP
      description: 'Replaces an MCP.

        '
      requestBody:
        "$ref": "#/components/requestBodies/ReplaceCatalogMCPRequest"
      responses:
        '200':
          "$ref": "#/components/responses/CatalogMCPResponse"
        '400':
          "$ref": "#/components/responses/BadRequest"
        '401':
          "$ref": "#/components/responses/Unauthorized"
        '403':
          "$ref": "#/components/responses/Forbidden"
        '404':
          "$ref": "#/components/responses/NotFound"
        '409':
          "$ref": "#/components/responses/Conflict"
      tags:
      - Catalog MCPs
    delete:
      operationId: delete-mcp
      summary: Delete MCP
      description: 'Deletes an MCP.

        '
      responses:
        '204':
          description: Successfully deleted the MCP
        '401':
          "$ref": "#/components/responses/Unauthorized"
        '403':
          "$ref": "#/components/responses/Forbidden"
        '404':
          "$ref": "#/components/responses/NotFound"
      tags:
      - Catalog MCPs
  "/mcp-servers/{mcpId}/versions":
    parameters:
    - "$ref": "#/components/parameters/CatalogMCPIdPath"
    get:
      operationId: list-mcp-versions
      summary: List MCP versions
      description: 'Returns the MCP''s versions.

        '
      parameters:
      - "$ref": "#/components/parameters/PageSize"
      - "$ref": "#/components/parameters/PageNumber"
      responses:
        '200':
          "$ref": "#/components/responses/ListCatalogMCPVersionResponse"
        '400':
          "$ref": "#/components/responses/BadRequest"
        '401':
          "$ref": "#/components/responses/Unauthorized"
        '403':
          "$ref": "#/components/responses/Forbidden"
        '404':
          "$ref": "#/components/responses/NotFound"
      tags:
      - Catalog MCP Versions
    post:
      operationId: create-mcp-version
      summary: Create MCP version
      description: 'Creates the `latest` version. Currently, a MCP only has a single
        version. Returns `409` if a version already exists.

        '
      requestBody:
        "$ref": "#/components/requestBodies/CreateCatalogMCPVersionRequest"
      responses:
        '201':
          "$ref": "#/components/responses/CatalogMCPVersionResponse"
        '400':
          "$ref": "#/components/responses/BadRequest"
        '401':
          "$ref": "#/components/responses/Unauthorized"
        '403':
          "$ref": "#/components/responses/Forbidden"
        '404':
          "$ref": "#/components/responses/NotFound"
        '409':
          "$ref": "#/components/responses/Conflict"
      tags:
      - Catalog MCP Versions
  "/mcp-servers/{mcpId}/versions/latest":
    parameters:
    - "$ref": "#/components/parameters/CatalogMCPIdPath"
    get:
      operationId: get-latest-mcp-version
      summary: Get latest MCP version
      description: 'Returns the MCP''s `latest` version.

        '
      responses:
        '200':
          "$ref": "#/components/responses/CatalogMCPVersionResponse"
        '401':
          "$ref": "#/components/responses/Unauthorized"
        '403':
          "$ref": "#/components/responses/Forbidden"
        '404':
          "$ref": "#/components/responses/NotFound"
      tags:
      - Catalog MCP Versions
    patch:
      operationId: update-latest-mcp-version
      summary: Update latest MCP version
      description: 'Partially updates the `latest` version.

        '
      requestBody:
        "$ref": "#/components/requestBodies/UpdateCatalogMCPVersionRequest"
      responses:
        '200':
          "$ref": "#/components/responses/CatalogMCPVersionResponse"
        '400':
          "$ref": "#/components/responses/BadRequest"
        '401':
          "$ref": "#/components/responses/Unauthorized"
        '403':
          "$ref": "#/components/responses/Forbidden"
        '404':
          "$ref": "#/components/responses/NotFound"
      tags:
      - Catalog MCP Versions
    put:
      operationId: upsert-latest-mcp-version
      summary: Replace latest MCP version
      description: 'Replaces the `latest` version.

        '
      requestBody:
        "$ref": "#/components/requestBodies/ReplaceCatalogMCPVersionRequest"
      responses:
        '200':
          "$ref": "#/components/responses/CatalogMCPVersionResponse"
        '400':
          "$ref": "#/components/responses/BadRequest"
        '401':
          "$ref": "#/components/responses/Unauthorized"
        '403':
          "$ref": "#/components/responses/Forbidden"
        '404':
          "$ref": "#/components/responses/NotFound"
      tags:
      - Catalog MCP Versions
    delete:
      operationId: delete-latest-mcp-version
      summary: Delete latest MCP version
      description: 'Deletes the MCP''s `latest` version. Returns `404` if no version
        exists yet.

        '
      responses:
        '204':
          description: Successfully deleted the version
        '401':
          "$ref": "#/components/responses/Unauthorized"
        '403':
          "$ref": "#/components/responses/Forbidden"
        '404':
          "$ref": "#/components/responses/NotFound"
      tags:
      - Catalog MCP Versions
  "/mcp-servers/{mcpId}/implementations":
    parameters:
    - "$ref": "#/components/parameters/CatalogMCPIdPath"
    get:
      operationId: list-mcp-implementations
      summary: List MCP implementations
      description: 'Returns a paginated list of the MCP''s implementation records.

        '
      parameters:
      - "$ref": "#/components/parameters/PageSize"
      - "$ref": "#/components/parameters/PageNumber"
      responses:
        '200':
          "$ref": "#/components/responses/ListCatalogMCPImplementationResponse"
        '400':
          "$ref": "#/components/responses/BadRequest"
        '401':
          "$ref": "#/components/responses/Unauthorized"
        '403':
          "$ref": "#/components/responses/Forbidden"
        '404':
          "$ref": "#/components/responses/NotFound"
      tags:
      - Catalog MCP Implementations
    post:
      operationId: create-mcp-implementation
      summary: Create MCP implementation
      description: 'Creates an implementation record for the MCP. Returns `409` if
        the MCP has an existing implementation.

        '
      requestBody:
        "$ref": "#/components/requestBodies/CreateCatalogMCPImplementationRequest"
      responses:
        '201':
          "$ref": "#/components/responses/CatalogMCPImplementationResponse"
        '400':
          "$ref": "#/components/responses/BadRequest"
        '401':
          "$ref": "#/components/responses/Unauthorized"
        '403':
          "$ref": "#/components/responses/Forbidden"
        '404':
          "$ref": "#/components/responses/NotFound"
        '409':
          "$ref": "#/components/responses/Conflict"
      tags:
      - Catalog MCP Implementations
  "/mcp-servers/{mcpId}/implementations/{implementationId}":
    parameters:
    - "$ref": "#/components/parameters/CatalogMCPIdPath"
    - "$ref": "#/components/parameters/CatalogMCPImplementationIdPath"
    get:
      operationId: get-mcp-implementation
      summary: Get MCP implementation
      description: Returns a single MCP implementation record.
      responses:
        '200':
          "$ref": "#/components/responses/CatalogMCPImplementationResponse"
        '401':
          "$ref": "#/components/responses/Unauthorized"
        '403':
          "$ref": "#/components/responses/Forbidden"
        '404':
          "$ref": "#/components/responses/NotFound"
      tags:
      - Catalog MCP Implementations
    delete:
      operationId: delete-mcp-implementation
      summary: Delete MCP implementation
      description: Removes a single MCP implementation (link) record by identifier.
      responses:
        '204':
          description: Successfully deleted the MCP implementation
        '401':
          "$ref": "#/components/responses/Unauthorized"
        '403':
          "$ref": "#/components/responses/Forbidden"
        '404':
          "$ref": "#/components/responses/NotFound"
      tags:
      - Catalog MCP Implementations
components:
  parameters:
    AiModelIdPath:
      name: aiModelId
      in: path
      required: true
      description: The unique identifier of the AI Model.
      schema:
        type: string
        format: uuid
        example: 123e4567-e89b-12d3-a456-426614174000
    AiModelImplementationIdPath:
      name: implementationId
      in: path
      required: true
      description: The unique identifier of the AI Model implementation.
      schema:
        type: string
        format: uuid
        example: d2e1f0a9-8b7c-6d5e-4f3a-2b1c0d9e8f7a
    AiModelSort:
      name: sort
      description: |
        Sort AI Models by specified fields. Supported sort attributes are:
        - `display_name`
        - `name`
        - `created_at`
        - `updated_at`

        Default sort is `display_name` in ascending order.
      required: false
      in: query
      schema:
        "$ref": "#/components/schemas/SortQuery"
    CatalogMCPIdPath:
      name: mcpId
      in: path
      required: true
      description: The unique identifier of the MCP.
      schema:
        type: string
        format: uuid
        example: a0119846-f179-4d9f-a168-d701facce7fb
    CatalogMCPImplementationIdPath:
      name: implementationId
      in: path
      required: true
      description: The unique identifier of the MCP implementation.
      schema:
        type: string
        format: uuid
        example: 7703e2f2-f9c0-47e3-9146-5fa50486b871
    CatalogMCPSort:
      name: sort
      description: |
        Sort MCPs by specified fields. Supported sort attributes are:
        - `display_name`
        - `name`
        - `created_at`
        - `updated_at`

        Default sort is `display_name` in ascending order.
      required: false
      in: query
      schema:
        "$ref": "#/components/schemas/SortQuery"
    PageNumber:
      name: page[number]
      description: Determines which page of the entities to retrieve.
      required: false
      in: query
      allowEmptyValue: true
      schema:
        type: integer
        example: 1
    PageSize:
      name: page[size]
      description: The maximum number of items to include per page. The last page
        of a collection may include fewer items.
      required: false
      in: query
      allowEmptyValue: true
      schema:
        type: integer
        example: 10
  schemas:
    TargetModel:
      description: An upstream LLM target the AI Model proxies.
      type: object
      properties:
        provider:
          description: The upstream model provider.
          type: string
          example: openai
        name:
          description: The upstream model name for the given provider.
          type: string
          example: gpt-4o
      required:
      - provider
      - name
    AiModel:
      description: An AI Model catalog resource.
      type: object
      properties:
        id:
          description: The unique identifier of the AI Model.
          type: string
          format: uuid
          example: 123e4567-e89b-12d3-a456-426614174000
        name:
          description: 'The machine name of the AI Model that uniquely identifies
            it within the catalog.

            '
          type: string
          example: my-ai-model
          maxLength: 120
          minLength: 1
          pattern: "^[0-9a-z.-]+$"
        display_name:
          description: The display name of the AI Model.
          type: string
          example: My AI Model
          maxLength: 120
          minLength: 1
        description:
          description: A description of the AI Model.
          type: string
          example: Customer support triage model
          maxLength: 2048
          nullable: true
        labels:
          "$ref": "#/components/schemas/Labels"
        managed_by:
          "$ref": "#/components/schemas/ManagedBy"
        created_at:
          "$ref": "#/components/schemas/CreatedAt"
        updated_at:
          "$ref": "#/components/schemas/UpdatedAt"
      required:
      - id
      - name
      - display_name
      - description
      - labels
      - managed_by
      - created_at
      - updated_at
    AiModelCreate:
      description: Request body for creating or replacing an AI Model.
      type: object
      properties:
        name:
          description: 'The machine name of the AI Model that uniquely identifies
            it within the catalog.

            '
          type: string
          example: my-ai-model
          maxLength: 120
          minLength: 1
          pattern: "^[0-9a-z.-]+$"
        display_name:
          description: The display name of the AI Model.
          type: string
          example: My AI Model
          maxLength: 120
          minLength: 1
        description:
          description: Optionally provide a description of the AI Model.
          type: string
          example: Customer support triage model
          maxLength: 2048
          nullable: true
        labels:
          "$ref": "#/components/schemas/Labels"
      additionalProperties: false
      required:
      - name
      - display_name
    AiModelReplace:
      description: Request body for creating or replacing an AI Model.
      type: object
      properties:
        name:
          description: 'The machine name of the AI Model that uniquely identifies
            it within the catalog.

            '
          type: string
          example: my-ai-model
          maxLength: 120
          minLength: 1
          pattern: "^[0-9a-z.-]+$"
        display_name:
          description: The display name of the AI Model.
          type: string
          example: My AI Model
          maxLength: 120
          minLength: 1
        description:
          description: Optionally provide a description of the AI Model.
          type: string
          example: Customer support triage model
          maxLength: 2048
          nullable: true
        labels:
          "$ref": "#/components/schemas/Labels"
      additionalProperties: false
      required:
      - name
      - display_name
    AiModelUpdate:
      description: 'Request body for partially updating an AI Model (merge-patch).
        All fields are optional; omitted fields are left unchanged.

        '
      type: object
      properties:
        name:
          description: 'The machine name of the AI Model that uniquely identifies
            it within the catalog.

            '
          type: string
          example: my-ai-model
          maxLength: 120
          minLength: 1
          pattern: "^[0-9a-z.-]+$"
        display_name:
          description: The display name of the AI Model.
          type: string
          example: My AI Model
          maxLength: 120
          minLength: 1
        description:
          description: Optionally provide a description of the AI Model.
          type: string
          example: Customer support triage model
          maxLength: 2048
          nullable: true
        labels:
          "$ref": "#/components/schemas/LabelsUpdate"
      additionalProperties: false
    AiModelList:
      description: A paginated page of AI Models.
      type: object
      properties:
        data:
          type: array
          items:
            "$ref": "#/components/schemas/AiModel"
        meta:
          "$ref": "#/components/schemas/PaginatedMeta"
      required:
      - data
      - meta
    AiModelVersion:
      description: 'A version of an AI Model, holding its `target_models`. Currently
        only exactly one version (`latest`) per model exists.

        '
      type: object
      properties:
        id:
          description: The unique identifier of the version.
          type: string
          format: uuid
          example: 9c4a1b2c-3d4e-5f60-7182-93a4b5c6d7e8
        ai_model_id:
          description: The identifier of the parent AI Model.
          type: string
          format: uuid
          example: 123e4567-e89b-12d3-a456-426614174000
        version:
          description: An optional user-supplied version label. `null` when unset.
          type: string
          example: 1.0.0
          maxLength: 120
          minLength: 1
          nullable: true
          pattern: ".*\\S.*"
        target_models:
          description: The upstream LLM targets for this version.
          type: array
          items:
            "$ref": "#/components/schemas/TargetModel"
        created_at:
          "$ref": "#/components/schemas/CreatedAt"
        updated_at:
          "$ref": "#/components/schemas/UpdatedAt"
      required:
      - id
      - ai_model_id
      - version
      - target_models
      - created_at
      - updated_at
    AiModelVersionCreate:
      description: Request body for creating an AI Model Version.
      type: object
      properties:
        version:
          description: 'An optional user-supplied version label.

            '
          type: string
          example: 1.0.0
          maxLength: 120
          minLength: 1
          nullable: true
          pattern: ".*\\S.*"
        target_models:
          description: The upstream LLM targets (full set).
          type: array
          items:
            "$ref": "#/components/schemas/TargetModel"
      additionalProperties: false
      required:
      - target_models
    AiModelVersionUpdate:
      description: 'Request body for partially updating an AI Model Version.

        '
      type: object
      properties:
        version:
          description: 'An optional user-supplied version label. Omit it to leave
            the version unchanged, or send `null` to clear it.

            '
          type: string
          example: 1.0.0
          maxLength: 120
          minLength: 1
          nullable: true
          pattern: ".*\\S.*"
        target_models:
          description: The upstream LLM targets.
          type: array
          items:
            "$ref": "#/components/schemas/TargetModel"
      additionalProperties: false
    AiModelVersionReplace:
      description: Request body for replacing an AI Model Version.
      allOf:
      - "$ref": "#/components/schemas/AiModelVersionCreate"
    AiModelVersionList:
      description: A paginated page of an AI Model's versions.
      type: object
      properties:
        data:
          type: array
          items:
            "$ref": "#/components/schemas/AiModelVersion"
        meta:
          "$ref": "#/components/schemas/PaginatedMeta"
      required:
      - data
      - meta
    SpecProvider:
      description: 'Client-supplied provenance for the oas specification. Omit it
        (or send `null`) for a user-uploaded spec. `{ "source": "ai_gateway" }` indicates
        the content came from the linked AI Gateway model, and is rejected with `400`
        (`invalid_parameters`) if the model is not linked. `{ "source": "provider"
        }` is reserved for provider/target-model generation.

        '
      type: object
      properties:
        source:
          type: string
          example: ai_gateway
          enum:
          - ai_gateway
          - provider
      required:
      - source
    AiModelVersionSpec:
      description: The oas specification document for an AI Model version.
      type: object
      properties:
        spec_content:
          description: |
            The raw content of the oas specification, in json or yaml format (for example, an
            OpenAPI document).
          type: string
          example: '{"openapi":"3.1.0","info":{"title":"My AI Model","version":"1.0.0"},"paths":{}}'
        spec_type:
          description: 'The type of specification document. Currently always `oas`
            (OpenAPI Specification).

            '
          type: string
          example: oas
          enum:
          - oas
          readOnly: true
          x-terraform-transform-const: true
        spec_provider:
          description: 'Provenance of the specification. `null` (or absent) for a
            user-uploaded specification.

            '
          type: object
          nullable: true
          properties:
            source:
              type: string
              example: ai_gateway
              enum:
              - ai_gateway
              - provider
          required:
          - source
        created_at:
          "$ref": "#/components/schemas/CreatedAt"
        updated_at:
          "$ref": "#/components/schemas/UpdatedAt"
      required:
      - spec_content
      - spec_type
      - created_at
      - updated_at
    AiModelVersionSpecWrite:
      description: 'Request body for creating or replacing a version''s spec (upsert).
        The request body has a maximum size limit of 8MB.

        '
      type: object
      properties:
        spec_content:
          description: |
            The raw content of the oas specification, in json or yaml format (for example, an
            OpenAPI document).
          type: string
          example: '{"openapi":"3.1.0","info":{"title":"My AI Model","version":"1.0.0"},"paths":{}}'
        spec_provider:
          description: 'Optional provenance. Omit (or `null`) for a user-uploaded
            specification.

            '
          allOf:
          - "$ref": "#/components/schemas/SpecProvider"
          nullable: true
      additionalProperties: false
      required:
      - spec_content
    AiModelImplementation:
      description: AI Model Implementation.
      type: object
      properties:
        id:
          description: The unique identifier of the implementation (link) record.
          type: string
          format: uuid
          example: d2e1f0a9-8b7c-6d5e-4f3a-2b1c0d9e8f7a
        ai_model_id:
          description: The identifier of the parent AI Model.
          type: string
          format: uuid
          example: 123e4567-e89b-12d3-a456-426614174000
        gateway_control_plane_id:
          description: The AI Gateway control plane uuid the linked model belongs
            to.
          type: string
          format: uuid
          example: 223e4567-e89b-12d3-a456-426614174999
        gateway_model_id:
          description: The text or uuid identifier of the linked AI Gateway model.
          type: string
          example: gw-model-abc
        created_at:
          "$ref": "#/components/schemas/CreatedAt"
        updated_at:
          "$ref": "#/components/schemas/UpdatedAt"
      required:
      - id
      - ai_model_id
      - gateway_control_plane_id
      - gateway_model_id
      - created_at
      - updated_at
    AiModelImplementationCreate:
      description: Request body for linking an AI Model to an AI Gateway model.
      type: object
      properties:
        gateway_control_plane_id:
          description: The AI Gateway control plane uuid the model belongs to.
          type: string
          format: uuid
          example: 223e4567-e89b-12d3-a456-426614174999
        gateway_model_id:
          description: The text or uuid identifier of the AI Gateway model to link.
          type: string
          example: gw-model-abc
      additionalProperties: false
      required:
      - gateway_control_plane_id
      - gateway_model_id
    AiModelImplementationList:
      description: 'A paginated page of an AI Model''s implementation records.

        '
      type: object
      properties:
        data:
          type: array
          items:
            "$ref": "#/components/schemas/AiModelImplementation"
        meta:
          "$ref": "#/components/schemas/PaginatedMeta"
      required:
      - data
      - meta
    AiModelFilterParameters:
      description: Filter parameters for the AI Model list endpoint.
      type: object
      properties:
        id:
          "$ref": "#/components/schemas/UuidFieldFilter"
        name:
          "$ref": "#/components/schemas/StringFieldFilter"
        display_name:
          "$ref": "#/components/schemas/StringFieldFilter"
        labels:
          "$ref": "#/components/schemas/LabelsFieldFilter"
        created_at:
          "$ref": "#/components/schemas/DateTimeFieldFilter"
        updated_at:
          "$ref": "#/components/schemas/DateTimeFieldFilter"
      title: AiModelFilterParameters
    CreateCatalogMCP:
      description: Request body for creating an MCP.
      type: object
      properties:
        name:
          description: The machine name of the MCP that uniquely identifies it within
            the catalog.
          type: string
          example: my-mcp
          maxLength: 120
          minLength: 1
          pattern: "^[0-9a-z.-]+$"
        display_name:
          description: The display name of the MCP.
          type: string
          example: My MCP
          maxLength: 120
          minLength: 1
        description:
          description: Optionally provide a description of the MCP.
          type: string
          example: Customer support triage model
          maxLength: 2048
          nullable: true
        labels:
          "$ref": "#/components/schemas/Labels"
      additionalProperties: false
      required:
      - name
      - display_name
    UpdateCatalogMCP:
      description: Request body for partially updating an MCP (merge-patch).
      type: object
      properties:
        name:
          description: The machine name of the MCP that uniquely identifies it within
            the catalog.
          type: string
          example: my-mcp
          maxLength: 120
          minLength: 1
          pattern: "^[0-9a-z.-]+$"
        display_name:
          description: The display name of the MCP.
          type: string
          example: My MCP
          maxLength: 120
          minLength: 1
        description:
          description: Optionally provide a description of the MCP.
          type: string
          example: Description of MCP.
          maxLength: 2048
          nullable: true
        labels:
          "$ref": "#/components/schemas/LabelsUpdate"
      additionalProperties: false
    ReplaceCatalogMCP:
      allOf:
      - "$ref": "#/components/schemas/CreateCatalogMCP"
    CatalogMCP:
      description: An MCP catalog resource.
      type: object
      properties:
        id:
          description: The unique identifier of the MCP.
          type: string
          format: uuid
          example: 7703e2f2-f9c0-47e3-9146-5fa50486b871
        name:
          description: The machine name of the MCP that uniquely identifies it within
            the catalog.
          type: string
          example: my-mcp
          maxLength: 120
          minLength: 1
          pattern: "^[0-9a-z.-]+$"
        display_name:
          description: The display name of the MCP.
          type: string
          example: My MCP
          maxLength: 120
          minLength: 1
        description:
          description: A description of the MCP.
          type: string
          example: Description of MCP.
          maxLength: 2048
          nullable: true
        labels:
          "$ref": "#/components/schemas/Labels"
        managed_by:
          "$ref": "#/components/schemas/ManagedBy"
        created_at:
          "$ref": "#/components/schemas/CreatedAt"
        updated_at:
          "$ref": "#/components/schemas/UpdatedAt"
      additionalProperties: false
      required:
      - id
      - name
      - display_name
      - description
      - labels
      - managed_by
      - created_at
      - updated_at
    CatalogMCPToolInputSchema:
      description: Input schema for an MCP tool.
      type: object
      additionalProperties: true
    CatalogMCPToolOutputSchema:
      description: Output schema for an MCP tool.
      type: object
      allOf:
      - "$ref": "#/components/schemas/CatalogMCPToolInputSchema"
      - description: Output schema for an MCP tool.
    CatalogMCPToolAnnotations:
      type: object
      properties:
        title:
          description: Human-readable name of the tool.
          type: string
        destructive_hint:
          description: Indicates if the tool performs destructive actions.
          type: boolean
        idempotent_hint:
          description: Indicates if the tool is idempotent.
          type: boolean
        open_world_hint:
          description: Indicates if the tool interacts with external entities.
          type: boolean
        read_only_hint:
          description: Indicates if the tool is read-only.
          type: boolean
      additionalProperties: false
    CatalogMCPAnnotations:
      type: object
      properties:
        audience:
          description: Describes the intended customer of the annotated object/data.
          type: array
          items:
            type: string
            enum:
            - user
            - assistant
        priority:
          description: |
            Describes how important the data is for operating the MCP.

            A value of 1 means "most important," and indicates the data is effectively required, while 0 means
            "least important," and indicates the data is entirely optional.
          type: number
        last_modified:
          description: The moment the resource was last modified, in ISO-8601 format.
          type: string
          format: date-time
      additionalProperties: false
    CatalogMCPPromptArgument:
      type: object
      properties:
        name:
          description: Machine/programmatic name of the prompt argument.
          type: string
        title:
          description: Human-readable name of the prompt argument.
          type: string
        description:
          description: Detailed description of the prompt argument.
          type: string
        required:
          description: Indicates if the prompt argument is required.
          type: boolean
      additionalProperties: false
      required:
      - name
    CatalogMCPTool:
      description: MCP tool definition.
      type: object
      properties:
        name:
          description: Machine/programmatic name of the tool.
          type: string
          example: my-tool
        title:
          description: Human-readable name of the tool.
          type: string
        description:
          description: Detailed description of the tool's functionality.
          type: string
        input_schema:
          "$ref": "#/components/schemas/CatalogMCPToolInputSchema"
        output_schema:
          "$ref": "#/components/schemas/CatalogMCPToolOutputSchema"
        annotations:
          "$ref": "#/components/schemas/CatalogMCPToolAnnotations"
      additionalProperties: false
      required:
      - name
      - input_schema
    CatalogMCPResource:
      description: MCP Resource definition.
      type: object
      properties:
        name:
          description: Machine/programmatic name of the resource.
          type: string
          example: my-resource
        title:
          description: Human-readable name of the resource.
          type: string
        uri:
          description: The URI of the resource.
          type: string
        description:
          description: Detailed description of what the resource represents.
          type: string
        mime_type:
          description: The MIME type of the resource, if known.
          type: string
        annotations:
          "$ref": "#/components/schemas/CatalogMCPAnnotations"
        size:
          description: The size of the raw resource content, in bytes, if known.
          type: number
      additionalProperties: false
      required:
      - name
      - uri
    CatalogMCPPrompt:
      description: MCP Prompt definition.
      type: object
      properties:
        name:
          description: Machine/programmatic name of the prompt.
          type: string
        title:
          description: Human-readable name of the prompt.
          type: string
        description:
          description: Detailed description of the prompt's purpose and usage.
          type: string
        arguments:
          description: List of arguments to use for templating the prompt.
          type: array
          items:
            "$ref": "#/components/schemas/CatalogMCPPromptArgument"
      additionalProperties: false
      required:
      - name
    CatalogMCPVersionVersion:
      description: User-supplied version label.
      type: string
      example: 1.0.0
      maxLength: 120
      minLength: 1
      pattern: ".*\\S.*"
    CatalogMCPVersion:
      description: An MCP version resource.
      type: object
      properties:
        id:
          description: The unique identifier of the version.
          type: string
          format: uuid
          example: 9c4a1b2c-3d4e-5f60-7182-93a4b5c6d7e8
        version:
          "$ref": "#/components/schemas/CatalogMCPVersionVersion"
        tools:
          type: array
          items:
            "$ref": "#/components/schemas/CatalogMCPTool"
          nullable: true
        resources:
          type: array
          items:
            "$ref": "#/components/schemas/CatalogMCPResource"
          nullable: true
        prompts:
          type: array
          items:
            "$ref": "#/components/schemas/CatalogMCPPrompt"
          nullable: true
        remotes:
          type: array
          items:
            "$ref": "#/components/schemas/MCPRemoteTransport"
          nullable: true
        packages:
          type: array
          items:
            "$ref": "#/components/schemas/MCPPackage"
          nullable: true
        created_at:
          "$ref": "#/components/schemas/CreatedAt"
        updated_at:
          "$ref": "#/components/schemas/UpdatedAt"
      required:
      - id
      - version
      - tools
      - resources
      - prompts
      - remotes
      - packages
      - created_at
      - updated_at
    CreateCatalogMCPVersion:
      description: Schema to create an MCP version.
      type: object
      properties:
        version:
          "$ref": "#/components/schemas/CatalogMCPVersionVersion"
        tools:
          type: array
          items:
            "$ref": "#/components/schemas/CatalogMCPTool"
          nullable: true
        resources:
          type: array
          items:
            "$ref": "#/components/schemas/CatalogMCPResource"
          nullable: true
        prompts:
          type: array
          items:
            "$ref": "#/components/schemas/CatalogMCPPrompt"
          nullable: true
        remotes:
          type: array
          items:
            "$ref": "#/components/schemas/MCPRemoteTransport"
          nullable: true
        packages:
          type: array
          items:
            "$ref": "#/components/schemas/MCPPackage"
          nullable: true
      required:
      - version
      - tools
      - resources
      - prompts
      - remotes
      - packages
    ReplaceCatalogMCPVersion:
      allOf:
      - "$ref": "#/components/schemas/CreateCatalogMCPVersion"
    UpdateCatalogMCPVersion:
      description: Schema to partially update an MCP version (merge-patch).
      type: object
      properties:
        version:
          "$ref": "#/components/schemas/CatalogMCPVersionVersion"
        tools:
          type: array
          items:
            "$ref": "#/components/schemas/CatalogMCPTool"
          nullable: true
        resources:
          type: array
          items:
            "$ref": "#/components/schemas/CatalogMCPResource"
          nullable: true
        prompts:
          type: array
          items:
            "$ref": "#/components/schemas/CatalogMCPPrompt"
          nullable: true
        remotes:
          type: array
          items:
            "$ref": "#/components/schemas/MCPRemoteTransport"
          nullable: true
        packages:
          type: array
          items:
            "$ref": "#/components/schemas/MCPPackage"
          nullable: true
    BaseCatalogMCPImplementation:
      description: Base schema for MCP implementations.
      type: object
      properties:
        id:
          description: The unique identifier of the implementation (link) record.
          type: string
          format: uuid
          example: d2e1f0a9-8b7c-6d5e-4f3a-2b1c0d9e8f7a
        created_at:
          "$ref": "#/components/schemas/CreatedAt"
        updated_at:
          "$ref": "#/components/schemas/UpdatedAt"
      additionalProperties: false
      required:
      - id
      - created_at
      - updated_at
    CatalogMCPGatewayImplementationConfig:
      description: Configuration for an MCP implementation linked to an AI Gateway
        MCP Server.
      type: object
      properties:
        gateway_control_plane_id:
          description: The AI Gateway control plane the linked model belongs to.
          type: string
          format: uuid
          example: 223e4567-e89b-12d3-a456-426614174999
        gateway_mcp_server_id:
          description: The identifier of the linked AI Gateway MCP server.
          type: string
          example: 79087145-0159-4811-9042-6a9365f234bc
      additionalProperties: false
      required:
      - gateway_control_plane_id
      - gateway_mcp_server_id
    CatalogMCPGatewayImplementationBlock:
      description: |
        Schema to describe the type and configuration typing for an MCP implementation linked to an AI Gateway MCP
        Server.
      type: object
      properties:
        type:
          type: string
          enum:
          - ai-gateway
          x-terraform-transform-const: true
        config:
          "$ref": "#/components/schemas/CatalogMCPGatewayImplementationConfig"
      additionalProperties: false
      required:
      - type
      - config
    CatalogMCPImplementation:
      description: An MCP implementation resource.
      type: object
      oneOf:
      - "$ref": "#/components/schemas/CatalogMCPGatewayImplementation"
    CatalogMCPGatewayImplementation:
      description: An MCP implementation resource linked to an AI Gateway MCP Server.
      type: object
      additionalProperties: false
      allOf:
      - "$ref": "#/components/schemas/BaseCatalogMCPImplementation"
      - type: object
        required:
        - implementation
        properties:
          implementation:
            "$ref": "#/components/schemas/CatalogMCPGatewayImplementationBlock"
    CreateCatalogMCPImplementation:
      description: Request body for creating an MCP implementation.
      type: object
      oneOf:
      - "$ref": "#/components/schemas/CreateCatalogMCPGatewayImplementation"
    CreateCatalogMCPGatewayImplementation:
      description: Request body for creating an MCP implementation linked to an AI
        Gateway MCP Server.
      type: object
      properties:
        implementation:
          "$ref": "#/components/schemas/CatalogMCPGatewayImplementationBlock"
      additionalProperties: false
      required:
      - implementation
    CatalogMCPFilterParameters:
      description: Filter parameters for the MCP list endpoint.
      type: object
      properties:
        id:
          "$ref": "#/components/schemas/UuidFieldFilter"
        name:
          "$ref": "#/components/schemas/StringFieldFilter"
        display_name:
          "$ref": "#/components/schemas/StringFieldFilter"
        labels:
          "$ref": "#/components/schemas/LabelsFieldFilter"
        created_at:
          "$ref": "#/components/schemas/DateTimeFieldFilter"
        updated_at:
          "$ref": "#/components/schemas/DateTimeFieldFilter"
      title: CatalogMCPFilterParameters
    UuidFieldFilter:
      description: 'Filter using **one** of the following operators: `eq`, `oeq`,
        `neq`'
      type: object
      properties:
        eq:
          description: The field exactly matches the provided value.
          type: string
          example: "?filter[field_name_here][eq]=foo"
        oeq:
          description: The field matches any of the provided values.
          type: string
          example: "?filter[field_name_here][oeq]=foo,bar"
        neq:
          description: The field does not match the provided value.
          type: string
          example: "?filter[field_name_here][neq]=bar"
      additionalProperties: false
      x-examples:
        example-1:
          oeq: some-value,some-other-value
          neq: not-this-value
        example-2:
          eq: some-value
    StringFieldFilter:
      oneOf:
      - title: Filter by operator
        description: 'Filter using **one** of the following operators: `eq`, `oeq`,
          `neq`, `contains`, `ocontains`'
        x-examples:
          example-1:
            contains: some-value
            ocontains: this-value,or-that-value
            oeq: some-value,some-other-value
            neq: not-this-value
          example-2:
            eq: some-value
        properties:
          eq:
            description: The field exactly matches the provided value.
            type: string
            example: "?filter[field_name_here][eq]=foo"
          contains:
            description: The field contains the provided value.
            type: string
            example: "?filter[field_name_here][contains]=foo"
          ocontains:
            description: The field contains any of the provided values.
            type: string
            example: "?filter[field_name_here][ocontains]=foo,bar"
          oeq:
            description: The field matches any of the provided values.
            type: string
            example: "?filter[field_name_here][oeq]=foo,bar"
          neq:
            description: The field does not match the provided value.
            type: string
            example: "?filter[field_name_here][neq]=bar"
        type: object
        additionalProperties: false
      - title: Filter by exact string match
        type: string
        description: The field exactly matches the provided value.
        example: "?filter[title]=foo"
    LabelsFieldFilter:
      allOf:
      - title: LabelsFieldFilter
        description: |
          Filters on the resource's `labels` field. Filters must use dot-notation to identify
          the label key that will be used to filter the results. For example:
            - `filter[labels.owner]`
            - `filter[labels.owner][neq]=kong`
            - `filter[labels.env]=dev`
            - `filter[labels.env][ocontains]=dev,test`
      - "$ref": "#/components/schemas/StringFieldFilter"
    DateTimeFieldFilter:
      description: Filters on the given datetime (RFC-3339) field value.
      oneOf:
      - type: string
        title: DateTimeFieldImplicitEqualsFilter
        format: date-time
        description: Value strictly equals given RFC-3339 formatted timestamp in UTC
        example: '2022-03-30T07:20:50Z'
      - type: object
        title: DateTimeFieldEqualsFilter
        additionalProperties: false
        properties:
          eq:
            description: Value strictly equals given RFC-3339 formatted timestamp
              in UTC
            type: string
            format: date-time
            example: '2022-03-30T07:20:50Z'
        required:
        - eq
      - type: object
        title: DateTimeFieldLTFilter
        additionalProperties: false
        properties:
          lt:
            description: Value is less than the given RFC-3339 formatted timestamp
              in UTC
            type: string
            format: date-time
            example: '2022-03-30T07:20:50Z'
        required:
        - lt
      - type: object
        title: DateTimeFieldLTEFilter
        additionalProperties: false
        properties:
          lte:
            description: Value is less than or equal to the given RFC-3339 formatted
              timestamp in UTC
            type: string
            format: date-time
            example: '2022-03-30T07:20:50Z'
        required:
        - lte
      - type: object
        title: DateTimeFieldGTFilter
        additionalProperties: false
        properties:
          gt:
            description: Value is greater than the given RFC-3339 formatted timestamp
              in UTC
            type: string
            format: date-time
            example: '2022-03-30T07:20:50Z'
        required:
        - gt
      - type: object
        title: DateTimeFieldGTEFilter
        additionalProperties: false
        properties:
          gte:
            description: Value is greater than or equal to the given RFC-3339 formatted
              timestamp in UTC
            type: string
            format: date-time
            example: '2022-03-30T07:20:50Z'
        required:
        - gte
      title: DateTimeFieldFilter
      x-examples:
        datetime_field_1: '2022-03-30T07:20:50Z'
        datetime_field_2:
          eq: '2022-03-30T07:20:50Z'
        datetime_field_3:
          lt: '2022-03-30T07:20:50Z'
        datetime_field_4:
          lte: '2022-03-30T07:20:50Z'
        datetime_field_5:
          gt: '2022-03-30T07:20:50Z'
        datetime_field_6:
          gte: '2022-03-30T07:20:50Z'
    SortQuery:
      description: |
        The `asc` suffix is optional as the default sort order is ascending.
        The `desc` suffix is used to specify a descending order.
        Multiple sort attributes may be provided via a comma separated list.
        JSONPath notation may be used to specify a sub-attribute (eg: 'foo.bar desc').
      type: string
      example: created_at desc
      title: SortQuery
    Labels:
      description: "Labels store metadata of an entity that can be used for filtering
        an entity list or for searching across entity types. \n\nKeys must be of length
        1-63 characters, and cannot start with \"kong\", \"konnect\", \"mesh\", \"kic\",
        or \"_\".\n"
      type: object
      example:
        env: test
      additionalProperties:
        type: string
        pattern: "^[a-z0-9A-Z]{1}([a-z0-9A-Z-._]*[a-z0-9A-Z]+)?$"
        minLength: 1
        maxLength: 63
      maxProperties: 50
      title: Labels
    ManagedBy:
      description: |
        Stores information about what manages this entity, such as the tool or system responsible for its lifecycle (for example, `terraform`).

        Keys must be 1–63 characters long and start with an alphanumeric character.
      type: object
      example:
        owner: terraform
      additionalProperties:
        type: string
        pattern: "^[a-z0-9A-Z]{1}([a-z0-9A-Z-._]*[a-z0-9A-Z]+)?$"
        minLength: 1
        maxLength: 63
      maxProperties: 5
      title: ManagedBy
    CreatedAt:
      description: An ISO-8601 timestamp representation of entity creation date.
      type: string
      format: date-time
      example: '2022-11-04T20:10:06.927Z'
      readOnly: true
    UpdatedAt:
      description: An ISO-8601 timestamp representation of entity update date.
      type: string
      format: date-time
      example: '2022-11-04T20:10:06.927Z'
      readOnly: true
    PageMeta:
      description: Contains pagination query parameters and the total number of objects
        returned.
      type: object
      properties:
        number:
          type: number
          example: 1
        size:
          type: number
          example: 10
        total:
          type: number
          example: 100
      required:
      - number
      - size
      - total
    PaginatedMeta:
      description: returns the pagination information
      type: object
      properties:
        page:
          "$ref": "#/components/schemas/PageMeta"
      required:
      - page
      title: PaginatedMeta
    InvalidRules:
      description: invalid parameters rules
      type: string
      enum:
      - required
      - unique
      - is_array
      - is_base64
      - is_boolean
      - is_date_time
      - is_integer
      - is_null
      - is_number
      - is_object
      - is_string
      - is_uuid
      - is_fqdn
      - is_arn
      - unknown_property
      - missing_reference
      - is_label
      - key_invalid
      - matches_regex
      - invalid
      - is_supported_network_availability_zone_list
      - is_supported_network_cidr_block
      - is_supported_provider_region
      - type
      nullable: true
      readOnly: true
    InvalidParameterStandard:
      type: object
      properties:
        field:
          type: string
          example: name
          readOnly: true
        rule:
          "$ref": "#/components/schemas/InvalidRules"
        source:
          type: string
          example: body
        reason:
          type: string
          example: is a required field
          readOnly: true
      additionalProperties: false
      required:
      - field
      - reason
    InvalidParameterMinimumLength:
      type: object
      properties:
        field:
          type: string
          example: name
          readOnly: true
        rule:
          description: invalid parameters rules
          type: string
          enum:
          - min_length
          - min_digits
          - min_lowercase
          - min_uppercase
          - min_symbols
          - min_items
          - min
          nullable: false
          readOnly: true
        minimum:
          type: integer
          example: 8
        source:
          type: string
          example: body
        reason:
          type: string
          example: must have at least 8 characters
          readOnly: true
      additionalProperties: false
      required:
      - field
      - reason
      - rule
      - minimum
    InvalidParameterMaximumLength:
      type: object
      properties:
        field:
          type: string
          example: name
          readOnly: true
        rule:
          description: invalid parameters rules
          type: string
          enum:
          - max_length
          - max_items
          - max
          nullable: false
          readOnly: true
        maximum:
          type: integer
          example: 8
        source:
          type: string
          example: body
        reason:
          type: string
          example: must not have more than 8 characters
          readOnly: true
      additionalProperties: false
      required:
      - field
      - reason
      - rule
      - maximum
    InvalidParameterMinimumTime:
      type: object
      properties:
        field:
          type: string
          example: to
          readOnly: true
        rule:
          description: invalid parameters rules
          type: string
          enum:
          - min_time
          nullable: false
          readOnly: true
        minimum:
          type: string
          format: date-time
          example: '2026-10-01T00:00:00Z'
        source:
          type: string
          example: body
        reason:
          type: string
          example: must be no earlier than 2026-10-01T00:00:00Z
          readOnly: true
      additionalProperties: false
      required:
      - field
      - reason
      - rule
      - minimum
    InvalidParameterMaximumTime:
      type: object
      properties:
        field:
          type: string
          example: to
          readOnly: true
        rule:
          description: invalid parameters rules
          type: string
          enum:
          - max_time
          nullable: false
          readOnly: true
        maximum:
          type: string
          format: date-time
          example: '2026-10-31T23:59:59Z'
        source:
          type: string
          example: body
        reason:
          type: string
          example: must be no later than 2026-10-31T23:59:59Z
          readOnly: true
      additionalProperties: false
      required:
      - field
      - reason
      - rule
      - maximum
    InvalidParameterChoiceItem:
      type: object
      properties:
        field:
          type: string
          example: name
          readOnly: true
        rule:
          description: invalid parameters rules
          type: string
          enum:
          - enum
          nullable: false
          readOnly: true
        reason:
          type: string
          example: is a required field
          readOnly: true
        choices:
          type: array
          items:
            type: string
          minItems: 1
          nullable: false
          readOnly: true
          uniqueItems: true
        source:
          type: string
          example: body
      additionalProperties: false
      required:
      - field
      - reason
      - rule
      - choices
    InvalidParameterDependentItem:
      type: object
      properties:
        field:
          type: string
          example: name
          readOnly: true
        rule:
          description: invalid parameters rules
          type: string
          enum:
          - dependent_fields
          nullable: true
          readOnly: true
        reason:
          type: string
          example: is a required field
          readOnly: true
        dependents:
          type: array
          items:
            type: string
          nullable: true
          readOnly: true
          uniqueItems: true
        source:
          type: string
          example: body
      additionalProperties: false
      required:
      - field
      - rule
      - reason
      - dependents
    InvalidParameters:
      description: invalid parameters
      type: array
      items:
        oneOf:
        - "$ref": "#/components/schemas/InvalidParameterStandard"
        - "$ref": "#/components/schemas/InvalidParameterMinimumLength"
        - "$ref": "#/components/schemas/InvalidParameterMaximumLength"
        - "$ref": "#/components/schemas/InvalidParameterMinimumTime"
        - "$ref": "#/components/schemas/InvalidParameterMaximumTime"
        - "$ref": "#/components/schemas/InvalidParameterChoiceItem"
        - "$ref": "#/components/schemas/InvalidParameterDependentItem"
      minItems: 1
      nullable: false
      uniqueItems: true
    BadRequestError:
      description: standard error
      type: object
      properties:
        status:
          description: |
            The HTTP status code of the error. Useful when passing the response
            body to child properties in a frontend UI. Must be returned as an integer.
          type: integer
          enum:
          - 400
          readOnly: true
        title:
          description: |
            A short, human-readable summary of the problem. It should not
            change between occurences of a problem, except for localization.
            Should be provided as "Sentence case" for direct use in the UI.
          type: string
          readOnly: true
        type:
          description: The error type.
          type: string
          readOnly: true
        instance:
          description: |
            Used to return the correlation ID back to the user, in the format
            kong:trace:<correlation_id>. This helps us find the relevant logs
            when a customer reports an issue.
          type: string
          readOnly: true
        detail:
          description: |
            A human readable explanation specific to this occurence of the problem.
            This field may contain request/entity data to help the user understand
            what went wrong. Enclose variable values in square brackets. Should be
            provided as "Sentence case" for direct use in the UI.
          type: string
          readOnly: true
        invalid_parameters:
          "$ref": "#/components/schemas/InvalidParameters"
      required:
      - status
      - title
      - instance
      - detail
      - invalid_parameters
    UnauthorizedError:
      description: standard error
      type: object
      properties:
        status:
          description: |
            The HTTP status code of the error. Useful when passing the response
            body to child properties in a frontend UI. Must be returned as an integer.
          type: integer
          example: 401
          enum:
          - 401
          readOnly: true
        title:
          description: |
            A short, human-readable summary of the problem. It should not
            change between occurences of a problem, except for localization.
            Should be provided as "Sentence case" for direct use in the UI.
          type: string
          example: Unauthorized
          readOnly: true
        type:
          description: The error type.
          type: string
          example: https://httpstatuses.com/401
          readOnly: true
        instance:
          description: |
            Used to return the correlation ID back to the user, in the format
            kong:trace:<correlation_id>. This helps us find the relevant logs
            when a customer reports an issue.
          type: string
          example: kong:trace:1234567890
          readOnly: true
        detail:
          description: |
            A human readable explanation specific to this occurence of the problem.
            This field may contain request/entity data to help the user understand
            what went wrong. Enclose variable values in square brackets. Should be
            provided as "Sentence case" for direct use in the UI.
          type: string
          example: Invalid credentials
          readOnly: true
      required:
      - status
      - title
      - instance
      - detail
    ForbiddenError:
      description: standard error
      type: object
      properties:
        status:
          description: |
            The HTTP status code of the error. Useful when passing the response
            body to child properties in a frontend UI. Must be returned as an integer.
          type: integer
          example: 403
          enum:
          - 403
          readOnly: true
        title:
          description: |
            A short, human-readable summary of the problem. It should not
            change between occurences of a problem, except for localization.
            Should be provided as "Sentence case" for direct use in the UI.
          type: string
          example: Forbidden
          readOnly: true
        type:
          description: The error type.
          type: string
          example: https://httpstatuses.com/403
          readOnly: true
        instance:
          description: |
            Used to return the correlation ID back to the user, in the format
            kong:trace:<correlation_id>. This helps us find the relevant logs
            when a customer reports an issue.
          type: string
          example: kong:trace:1234567890
          readOnly: true
        detail:
          description: |
            A human readable explanation specific to this occurence of the problem.
            This field may contain request/entity data to help the user understand
            what went wrong. Enclose variable values in square brackets. Should be
            provided as "Sentence case" for direct use in the UI.
          type: string
          example: Forbidden
          readOnly: true
      required:
      - status
      - title
      - instance
      - detail
    ConflictError:
      description: standard error
      type: object
      properties:
        status:
          description: |
            The HTTP status code of the error. Useful when passing the response
            body to child properties in a frontend UI. Must be returned as an integer.
          type: integer
          example: 409
          enum:
          - 409
          readOnly: true
        title:
          description: |
            A short, human-readable summary of the problem. It should not
            change between occurences of a problem, except for localization.
            Should be provided as "Sentence case" for direct use in the UI.
          type: string
          example: Conflict
          readOnly: true
        type:
          description: The error type.
          type: string
          example: https://httpstatuses.com/409
          readOnly: true
        instance:
          description: |
            Used to return the correlation ID back to the user, in the format
            kong:trace:<correlation_id>. This helps us find the relevant logs
            when a customer reports an issue.
          type: string
          example: kong:trace:1234567890
          readOnly: true
        detail:
          description: |
            A human readable explanation specific to this occurence of the problem.
            This field may contain request/entity data to help the user understand
            what went wrong. Enclose variable values in square brackets. Should be
            provided as "Sentence case" for direct use in the UI.
          type: string
          example: Conflict
          readOnly: true
      required:
      - status
      - title
      - instance
      - detail
    NotFoundError:
      description: standard error
      type: object
      properties:
        status:
          description: |
            The HTTP status code of the error. Useful when passing the response
            body to child properties in a frontend UI. Must be returned as an integer.
          type: integer
          example: 404
          enum:
          - 404
          readOnly: true
        title:
          description: |
            A short, human-readable summary of the problem. It should not
            change between occurences of a problem, except for localization.
            Should be provided as "Sentence case" for direct use in the UI.
          type: string
          example: Not Found
          readOnly: true
        type:
          description: The error type.
          type: string
          example: https://httpstatuses.com/404
          readOnly: true
        instance:
          description: |
            Used to return the correlation ID back to the user, in the format
            kong:trace:<correlation_id>. This helps us find the relevant logs
            when a customer reports an issue.
          type: string
          example: kong:trace:1234567890
          readOnly: true
        detail:
          description: |
            A human readable explanation specific to this occurence of the problem.
            This field may contain request/entity data to help the user understand
            what went wrong. Enclose variable values in square brackets. Should be
            provided as "Sentence case" for direct use in the UI.
          type: string
          example: Not found
          readOnly: true
      required:
      - status
      - title
      - instance
      - detail
    LabelsUpdate:
      description: "Labels store metadata of an entity that can be used for filtering
        an entity list or for searching across entity types. \n\nLabels are intended
        to store **INTERNAL** metadata.\n\nKeys must be of length 1-63 characters,
        and cannot start with \"kong\", \"konnect\", \"mesh\", \"kic\", or \"_\".\n"
      type: object
      example:
        env: test
      additionalProperties:
        type: string
        pattern: "^[a-z0-9A-Z]{1}([a-z0-9A-Z-._]*[a-z0-9A-Z]+)?$"
        minLength: 1
        maxLength: 63
        nullable: true
      maxProperties: 50
      nullable: true
      writeOnly: true
    MCPInput:
      type: object
      properties:
        description:
          description: A description of the input.
          type: string
        is_required:
          type: boolean
          default: false
        format:
          description: Specifies the input format.
          type: string
          default: string
          enum:
          - string
          - number
          - boolean
          - filepath
        value:
          description: The value for the input.
          type: string
        is_secret:
          description: Indicates whether the input is a secret value.
          type: boolean
          default: false
        default:
          description: The default value for the input.
          type: string
        placeholder:
          description: A placeholder for the input to be displayed during configuration.
          type: string
        choices:
          description: A list of possible values for the input.
          type: array
          items:
            type: string
          example: []
      title: MCPInput
    MCPInputWithVariables:
      allOf:
      - "$ref": "#/components/schemas/MCPInput"
      - type: object
        properties:
          variables:
            description: A map of variable names to their values.
            type: object
            additionalProperties:
              "$ref": "#/components/schemas/MCPInput"
      title: MCPInputWithVariables
    MCPKeyValueInput:
      allOf:
      - "$ref": "#/components/schemas/MCPInputWithVariables"
      - type: object
        required:
        - name
        properties:
          name:
            description: Name of the header or environment variable.
            type: string
            example: SOME_VARIABLE
      title: MCPKeyValueInput
    MCPStreamableHttpTransport:
      type: object
      properties:
        type:
          description: Transport type
          type: string
          example: streamable-http
          enum:
          - streamable-http
          x-terraform-transform-const: true
        url:
          description: URL template for the streamable-http transport.
          type: string
          example: https://api.example.com/mcp
          pattern: "^https?://[^\\s]+$"
        headers:
          description: HTTP headers to include
          type: array
          items:
            "$ref": "#/components/schemas/MCPKeyValueInput"
      example:
        type: streamable-http
        url: https://api.example.com/mcp
      required:
      - type
      - url
      title: MCPStreamableHttpTransport
    MCPSseTransport:
      type: object
      properties:
        type:
          description: Transport type
          type: string
          example: sse
          enum:
          - sse
          x-terraform-transform-const: true
        url:
          description: Server-Sent Events endpoint URL template.
          type: string
          example: https://mcp-fs.example.com/sse
          pattern: "^https?://[^\\s]+$"
        headers:
          description: HTTP headers to include
          type: array
          items:
            "$ref": "#/components/schemas/MCPKeyValueInput"
      example:
        type: sse
        url: https://mcp-fs.example.com/sse
      required:
      - type
      - url
      title: MCPSseTransport
    MCPRemoteTransport:
      description: Transport protocol configuration for remote context
      allOf:
      - anyOf:
        - "$ref": "#/components/schemas/MCPStreamableHttpTransport"
        - "$ref": "#/components/schemas/MCPSseTransport"
      - type: object
        properties:
          variables:
            description: Configuration variables that can be referenced in URL template
              {curly_braces}.
            type: object
            additionalProperties:
              "$ref": "#/components/schemas/MCPInput"
      title: MCPRemoteTransport
    MCPStdioTransport:
      type: object
      properties:
        type:
          description: Transport type
          type: string
          example: stdio
          enum:
          - stdio
          x-terraform-transform-const: true
      example:
        type: stdio
      required:
      - type
      title: MCPStdioTransport
    MCPTransport:
      description: Transport protocol configuration for local/package context
      anyOf:
      - "$ref": "#/components/schemas/MCPStdioTransport"
      - "$ref": "#/components/schemas/MCPStreamableHttpTransport"
      - "$ref": "#/components/schemas/MCPSseTransport"
      title: MCPTransport
    MCPPositionalArgument:
      description: A positional input is a value inserted verbatim into the command
        line.
      example:
        type: positional
        value_hint: file_path
      allOf:
      - "$ref": "#/components/schemas/MCPInputWithVariables"
      - type: object
        required:
        - type
        properties:
          type:
            type: string
            example: positional
            enum:
            - positional
            x-terraform-transform-const: true
          value_hint:
            description: An identifier for the positional argument.
            type: string
            example: file_path
          is_repeated:
            description: Whether the argument can be repeated multiple times.
            type: boolean
            default: false
      - anyOf:
        - type: object
          required:
          - value_hint
        - type: object
          required:
          - value
      title: MCPPositionalArgument
    MCPNamedArgument:
      description: A command-line `--flag={value}`.
      example:
        type: named
        name: "--port"
      allOf:
      - "$ref": "#/components/schemas/MCPInputWithVariables"
      - type: object
        required:
        - type
        - name
        properties:
          type:
            type: string
            example: named
            enum:
            - named
            x-terraform-transform-const: true
          name:
            description: The flag name, including any leading dashes.
            type: string
            example: "--port"
          is_repeated:
            description: Whether the argument can be repeated multiple times.
            type: boolean
            default: false
      title: MCPNamedArgument
    MCPArgument:
      anyOf:
      - "$ref": "#/components/schemas/MCPPositionalArgument"
      - "$ref": "#/components/schemas/MCPNamedArgument"
      title: MCPArgument
    MCPPackage:
      type: object
      properties:
        registry:
          description: Package registry details
          type: object
          properties:
            type:
              description: Registry type indicating how to download packages (e.g.,
                'npm', 'pypi', 'oci', 'nuget', 'mcpb')
              type: string
              example: npm
            base_url:
              description: Base URL of the package registry
              type: string
              format: uri
              example: https://registry.npmjs.org
          required:
          - type
        identifier:
          description: Package identifier — either a package name or URL
          type: string
          example: "@modelcontextprotocol/server-brave-search"
        version:
          description: Package version. Must be a specific version.
          type: string
          example: 1.0.2
          minLength: 1
          not:
            enum:
            - latest
        file_sha256:
          description: SHA-256 hash of the package file for integrity verification.
          type: string
          example: fe333e598595000ae021bd27117db32ec69af6987f507ba7a63c90638ff633ce
          pattern: "^[a-f0-9]{64}$"
        transport:
          allOf:
          - "$ref": "#/components/schemas/MCPTransport"
          - description: Transport protocol configuration for the package
        runtime:
          description: Runtime configuration for executing the package
          type: object
          properties:
            hint:
              description: A hint to help clients determine the appropriate runtime
                for the package.
              type: string
              example: npx
            arguments:
              description: A list of arguments to be passed to the package's runtime
                command.
              type: array
              items:
                "$ref": "#/components/schemas/MCPArgument"
        package_arguments:
          description: A list of arguments to be passed to the package's binary.
          type: array
          items:
            "$ref": "#/components/schemas/MCPArgument"
        environment_variables:
          description: Environment variables to be set when running the package.
          type: array
          items:
            "$ref": "#/components/schemas/MCPKeyValueInput"
      required:
      - registry
      - identifier
      - transport
      title: MCPPackage
  examples:
    UnauthorizedExample:
      value:
        status: 401
        title: Unauthorized
        instance: kong:trace:8347343766220159418
        detail: Unauthorized
    ForbiddenExample:
      value:
        status: 403
        title: Forbidden
        instance: kong:trace:2723154947768991354
        detail: You do not have permission to perform this action
    NotFoundExample:
      value:
        status: 404
        title: Not Found
        instance: kong:trace:6816496025408232265
        detail: Not Found
  requestBodies:
    CreateCatalogMCPRequest:
      required: true
      content:
        application/json:
          schema:
            "$ref": "#/components/schemas/CreateCatalogMCP"
    UpdateCatalogMCPRequest:
      required: true
      content:
        application/json:
          schema:
            "$ref": "#/components/schemas/UpdateCatalogMCP"
    ReplaceCatalogMCPRequest:
      required: true
      content:
        application/json:
          schema:
            "$ref": "#/components/schemas/ReplaceCatalogMCP"
    CreateCatalogMCPVersionRequest:
      required: true
      content:
        application/json:
          schema:
            "$ref": "#/components/schemas/CreateCatalogMCPVersion"
    UpdateCatalogMCPVersionRequest:
      required: true
      content:
        application/json:
          schema:
            "$ref": "#/components/schemas/UpdateCatalogMCPVersion"
    ReplaceCatalogMCPVersionRequest:
      required: true
      content:
        application/json:
          schema:
            "$ref": "#/components/schemas/ReplaceCatalogMCPVersion"
    CreateCatalogMCPImplementationRequest:
      required: true
      content:
        application/json:
          schema:
            "$ref": "#/components/schemas/CreateCatalogMCPImplementation"
  responses:
    CatalogMCPResponse:
      description: Response schema for MCPs.
      content:
        application/json:
          schema:
            "$ref": "#/components/schemas/CatalogMCP"
    ListCatalogMCPResponse:
      description: Response schema for a paginated list of MCPs.
      content:
        application/json:
          schema:
            type: object
            properties:
              meta:
                "$ref": "#/components/schemas/PaginatedMeta"
              data:
                type: array
                items:
                  "$ref": "#/components/schemas/CatalogMCP"
            additionalProperties: false
            required:
            - data
            - meta
            title: ListCatalogMCPResponse
    CatalogMCPVersionResponse:
      description: Response schema for MCP versions.
      content:
        application/json:
          schema:
            "$ref": "#/components/schemas/CatalogMCPVersion"
    ListCatalogMCPVersionResponse:
      description: Response schema for a paginated list of MCP versions.
      content:
        application/json:
          schema:
            type: object
            properties:
              meta:
                "$ref": "#/components/schemas/PaginatedMeta"
              data:
                type: array
                items:
                  "$ref": "#/components/schemas/CatalogMCPVersion"
            additionalProperties: false
            required:
            - data
            - meta
            title: ListCatalogMCPVersionResponse
    CatalogMCPImplementationResponse:
      description: Response schema for MCP implementations.
      content:
        application/json:
          schema:
            "$ref": "#/components/schemas/CatalogMCPImplementation"
    ListCatalogMCPImplementationResponse:
      description: Response schema for a paginated list of MCP implementations.
      content:
        application/json:
          schema:
            type: object
            properties:
              meta:
                "$ref": "#/components/schemas/PaginatedMeta"
              data:
                type: array
                items:
                  "$ref": "#/components/schemas/CatalogMCPImplementation"
            additionalProperties: false
            required:
            - data
            - meta
            title: ListCatalogMCPImplementationResponse
    BadRequest:
      description: Bad Request
      content:
        application/problem+json:
          schema:
            "$ref": "#/components/schemas/BadRequestError"
    Unauthorized:
      description: Unauthorized
      content:
        application/problem+json:
          schema:
            "$ref": "#/components/schemas/UnauthorizedError"
          examples:
            UnauthorizedExample:
              "$ref": "#/components/examples/UnauthorizedExample"
    Forbidden:
      description: Forbidden
      content:
        application/problem+json:
          schema:
            "$ref": "#/components/schemas/ForbiddenError"
          examples:
            UnauthorizedExample:
              "$ref": "#/components/examples/ForbiddenExample"
    Conflict:
      description: Conflict
      content:
        application/problem+json:
          schema:
            "$ref": "#/components/schemas/ConflictError"
    NotFound:
      description: Not Found
      content:
        application/problem+json:
          schema:
            "$ref": "#/components/schemas/NotFoundError"
          examples:
            NotFoundExample:
              "$ref": "#/components/examples/NotFoundExample"
  securitySchemes:
    konnectAccessToken:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: 'The Konnect access token is meant to be used by the Konnect dashboard
        and the decK CLI authenticate with.

        '
    personalAccessToken:
      type: http
      scheme: bearer
      bearerFormat: Token
      description: |
        The personal access token is meant to be used as an alternative to basic-auth when accessing Konnect via APIs.
        You can generate a Personal Access Token (PAT) from the [personal access token page](https://cloud.konghq.com/global/account/tokens/) in the Konnect dashboard.
        The PAT token must be passed in the header of a request, for example:
        `curl -X GET 'https://global.api.konghq.com/v2/users/' --header 'Authorization: Bearer kpat_xgfT...'`
    systemAccountAccessToken:
      type: http
      scheme: bearer
      bearerFormat: Token
      description: |
        The system account access token is meant for automations and integrations that are not directly associated with a human identity.
        You can generate a system account Access Token by creating a system account and then obtaining a system account access token for that account.
        The access token must be passed in the header of a request, for example:
        `curl -X GET 'https://global.api.konghq.com/v2/users/' --header 'Authorization: Bearer spat_i2Ej...'`
tags:
- name: Catalog AI Models
  description: Manage AI Models - a catalogable proxy for AI Gateway models
- name: Catalog AI Model Versions
  description: Manage an AI Model's version.
- name: Catalog AI Model Specs
  description: Manage an AI Model version's oas specification.
- name: Catalog AI Model Implementations
  description: Link an AI Model to an AI Gateway model.
- name: Catalog MCPs
  description: Manage MCPs - a catalogable proxy for AI Gateway MCPs
- name: Catalog MCP Versions
  description: Manage an MCP's version.
- name: Catalog MCP Implementations
  description: Link an MCP to an AI Gateway MCP.
security:
- konnectAccessToken: []
- personalAccessToken: []
- systemAccountAccessToken: []

```

