Stacklok registry API

The registry API from Stacklok — 10 operation(s) for registry.

Operations 13

GET /registry/{registryName}/v0.1/servers List servers in specific registry
GET /registry/{registryName}/v0.1/servers/{serverName}/versions List all versions of an MCP server in specific registry
GET /registry/{registryName}/v0.1/servers/{serverName}/versions/{version} Get specific MCP server version in specific registry
GET /api/v1beta/registry List registries
POST /api/v1beta/registry Add a registry
DELETE /api/v1beta/registry/{name} Remove a registry
GET /api/v1beta/registry/{name} Get a registry
PUT /api/v1beta/registry/{name} Update registry configuration
POST /api/v1beta/registry/{name}/refresh Refresh registry cache
GET /api/v1beta/registry/{name}/servers List servers in a registry
GET /api/v1beta/registry/{name}/servers/{serverName} Get a server from a registry
POST /api/v1beta/registry/auth/login Registry login
POST /api/v1beta/registry/auth/logout Registry logout

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/stacklok-registry-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

stacklok-registry-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  contact:
    url: https://github.com/stacklok/toolhive
  description: 'API for accessing MCP server registry data and deployed server information

    This API provides endpoints to query the MCP (Model Context Protocol) server registry,

    get information about available servers, and check the status of deployed servers.


    Authentication is required by default. Use Bearer token authentication with a valid

    OAuth/OIDC access token. The /.well-known/oauth-protected-resource endpoint provides

    OAuth discovery metadata (RFC 9728).'
  license:
    name: Apache 2.0
    url: http://www.apache.org/licenses/LICENSE-2.0.html
  title: ToolHive clients Registry API
  version: '0.1'
tags:
- name: registry
paths:
  /registry/{registryName}/v0.1/servers:
    get:
      description: Get a list of available servers from a specific registry
      parameters:
      - description: Registry name
        in: path
        name: registryName
        required: true
        schema:
          type: string
      - description: Pagination cursor for retrieving next set of results
        in: query
        name: cursor
        schema:
          type: string
      - description: Maximum number of items to return
        in: query
        name: limit
        schema:
          type: integer
      - description: Search servers by name (substring match)
        in: query
        name: search
        schema:
          type: string
      - description: Filter by version ('latest' for latest version, or an exact version like '1.2.3')
        in: query
        name: version
        schema:
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/v0.ServerListResponse'
          description: OK
        '400':
          content:
            application/json:
              schema:
                additionalProperties:
                  type: string
                type: object
          description: Bad request
        '401':
          content:
            application/json:
              schema:
                additionalProperties:
                  type: string
                type: object
          description: Unauthorized
        '404':
          content:
            application/json:
              schema:
                additionalProperties:
                  type: string
                type: object
          description: Registry not found
      security:
      - BearerAuth: []
      summary: List servers in specific registry
      tags:
      - registry
  /registry/{registryName}/v0.1/servers/{serverName}/versions:
    get:
      description: Returns all available versions for a specific MCP server from a specific registry
      parameters:
      - description: Registry name
        in: path
        name: registryName
        required: true
        schema:
          type: string
      - description: URL-encoded server name (e.g., \
        in: path
        name: serverName
        required: true
        schema:
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/v0.ServerListResponse'
          description: A list of all versions for the server
        '400':
          content:
            application/json:
              schema:
                additionalProperties:
                  type: string
                type: object
          description: Bad request
        '401':
          content:
            application/json:
              schema:
                additionalProperties:
                  type: string
                type: object
          description: Unauthorized
        '404':
          content:
            application/json:
              schema:
                additionalProperties:
                  type: string
                type: object
          description: Server not found
      security:
      - BearerAuth: []
      summary: List all versions of an MCP server in specific registry
      tags:
      - registry
  /registry/{registryName}/v0.1/servers/{serverName}/versions/{version}:
    get:
      description: 'Returns detailed information about a specific version of an MCP server from a specific registry.

        Use the special version `latest` to get the latest version.'
      parameters:
      - description: Registry name
        in: path
        name: registryName
        required: true
        schema:
          type: string
      - description: URL-encoded server name (e.g., \
        in: path
        name: serverName
        required: true
        schema:
          type: string
      - description: URL-encoded version to retrieve (e.g., \
        in: path
        name: version
        required: true
        schema:
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/v0.ServerResponse'
          description: Detailed server information
        '400':
          content:
            application/json:
              schema:
                additionalProperties:
                  type: string
                type: object
          description: Bad request
        '401':
          content:
            application/json:
              schema:
                additionalProperties:
                  type: string
                type: object
          description: Unauthorized
        '404':
          content:
            application/json:
              schema:
                additionalProperties:
                  type: string
                type: object
          description: Server or version not found
      security:
      - BearerAuth: []
      summary: Get specific MCP server version in specific registry
      tags:
      - registry
  /api/v1beta/registry:
    get:
      description: Get a list of the current registries
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/pkg_api_v1.registryListResponse'
          description: OK
      summary: List registries
      tags:
      - registry
    post:
      description: Add a new registry
      requestBody:
        content:
          application/json:
            schema:
              type: object
      responses:
        '501':
          content:
            application/json:
              schema:
                type: string
          description: Not Implemented
      summary: Add a registry
      tags:
      - registry
  /api/v1beta/registry/{name}:
    delete:
      description: Remove a specific registry
      parameters:
      - description: Registry name
        in: path
        name: name
        required: true
        schema:
          type: string
      responses:
        '204':
          content:
            application/json:
              schema:
                type: string
          description: No Content
        '403':
          content:
            application/json:
              schema:
                type: string
          description: Forbidden - blocked by policy
        '404':
          content:
            application/json:
              schema:
                type: string
          description: Not Found
      summary: Remove a registry
      tags:
      - registry
    get:
      description: Get details of a specific registry
      parameters:
      - description: Registry name
        in: path
        name: name
        required: true
        schema:
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/pkg_api_v1.getRegistryResponse'
          description: OK
        '404':
          content:
            application/json:
              schema:
                type: string
          description: Not Found
      summary: Get a registry
      tags:
      - registry
    put:
      description: Update registry URL or local path for the default registry
      parameters:
      - description: Registry name (must be 'default')
        in: path
        name: name
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              oneOf:
              - type: object
              - $ref: '#/components/schemas/pkg_api_v1.UpdateRegistryRequest'
                description: Registry configuration
                summary: body
        description: Registry configuration
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/pkg_api_v1.UpdateRegistryResponse'
          description: OK
        '400':
          content:
            application/json:
              schema:
                type: string
          description: Bad Request
        '403':
          content:
            application/json:
              schema:
                type: string
          description: Forbidden - blocked by policy
        '404':
          content:
            application/json:
              schema:
                type: string
          description: Not Found
        '502':
          content:
            application/json:
              schema:
                type: string
          description: Bad Gateway - Registry validation failed
        '504':
          content:
            application/json:
              schema:
                type: string
          description: Gateway Timeout - Registry unreachable
      summary: Update registry configuration
      tags:
      - registry
  /api/v1beta/registry/{name}/refresh:
    post:
      description: Force a refresh of the server-side registry cache for the default registry
      parameters:
      - description: Registry name (must be 'default')
        in: path
        name: name
        required: true
        schema:
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                additionalProperties:
                  type: string
                type: object
          description: Registry refreshed
        '404':
          content:
            application/json:
              schema:
                type: string
          description: Not Found
        '500':
          content:
            application/json:
              schema:
                type: string
          description: Internal Server Error
        '503':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/pkg_api_v1.registryErrorResponse'
          description: Registry authentication required or upstream registry unavailable
      summary: Refresh registry cache
      tags:
      - registry
  /api/v1beta/registry/{name}/servers:
    get:
      description: Get a list of servers in a specific registry
      parameters:
      - description: Registry name
        in: path
        name: name
        required: true
        schema:
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/pkg_api_v1.listServersResponse'
          description: OK
        '404':
          content:
            application/json:
              schema:
                type: string
          description: Not Found
      summary: List servers in a registry
      tags:
      - registry
  /api/v1beta/registry/{name}/servers/{serverName}:
    get:
      description: Get details of a specific server in a registry
      parameters:
      - description: Registry name
        in: path
        name: name
        required: true
        schema:
          type: string
      - description: ImageMetadata name
        in: path
        name: serverName
        required: true
        schema:
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/pkg_api_v1.getServerResponse'
          description: OK
        '404':
          content:
            application/json:
              schema:
                type: string
          description: Not Found
      summary: Get a server from a registry
      tags:
      - registry
  /api/v1beta/registry/auth/login:
    post:
      description: Trigger an interactive OAuth flow to authenticate with the configured registry. Only available in serve mode.
      responses:
        '200':
          content:
            application/json:
              schema:
                additionalProperties:
                  type: string
                type: object
          description: Authenticated successfully
        '400':
          content:
            application/json:
              schema:
                type: string
          description: Bad Request - Registry OAuth not configured
        '500':
          content:
            application/json:
              schema:
                type: string
          description: Internal Server Error
      summary: Registry login
      tags:
      - registry
  /api/v1beta/registry/auth/logout:
    post:
      description: Clear cached OAuth tokens for the configured registry. Only available in serve mode.
      responses:
        '200':
          content:
            application/json:
              schema:
                additionalProperties:
                  type: string
                type: object
          description: Logged out successfully
        '400':
          content:
            application/json:
              schema:
                type: string
          description: Bad Request - Registry OAuth not configured
        '500':
          content:
            application/json:
              schema:
                type: string
          description: Internal Server Error
      summary: Registry logout
      tags:
      - registry
components:
  schemas:
    registry.RemoteServerMetadata:
      description: Remote server details (if it's a remote server)
      properties:
        custom_metadata:
          additionalProperties: {}
          description: CustomMetadata allows for additional user-defined metadata
          type: object
        description:
          description: Description is a human-readable description of the server's purpose and functionality
          type: string
        env_vars:
          description: 'EnvVars defines environment variables that can be passed to configure the client

            These might be needed for client-side configuration when connecting to the remote server'
          items:
            $ref: '#/components/schemas/registry.EnvVar'
          type: array
          uniqueItems: false
        headers:
          description: 'Headers defines HTTP headers that can be passed to the remote server for authentication

            These are used with the thv proxy command''s authentication features'
          items:
            $ref: '#/components/schemas/registry.Header'
          type: array
          uniqueItems: false
        metadata:
          $ref: '#/components/schemas/registry.Metadata'
        name:
          description: 'Name is the identifier for the MCP server, used when referencing the server in commands

            If not provided, it will be auto-generated from the registry key'
          type: string
        oauth_config:
          $ref: '#/components/schemas/registry.OAuthConfig'
        overview:
          description: 'Overview is a longer Markdown-formatted description for web display.

            Unlike the Description field (limited to 500 chars), this supports

            full Markdown and is intended for rich rendering on catalog pages.'
          type: string
        proxy_port:
          description: 'ProxyPort is the port for the HTTP proxy to listen on (host port)

            If not specified, a random available port will be assigned'
          type: integer
        repository_url:
          description: RepositoryURL is the URL to the source code repository for the server
          type: string
        stateless:
          description: Stateless indicates the server only supports POST (no SSE/GET)
          type: boolean
        status:
          description: Status indicates whether the server is currently active or deprecated
          type: string
        tags:
          description: Tags are categorization labels for the server to aid in discovery and filtering
          items:
            type: string
          type: array
          uniqueItems: false
        tier:
          description: Tier represents the tier classification level of the server, e.g., "Official" or "Community"
          type: string
        title:
          description: 'Title is an optional human-readable display name for the server.

            If not provided, the Name field is used for display purposes.'
          type: string
        tools:
          description: Tools is a list of tool names provided by this MCP server
          items:
            type: string
          type: array
          uniqueItems: false
        transport:
          description: 'Transport defines the communication protocol for the server

            For containers: stdio, sse, or streamable-http

            For remote servers: sse or streamable-http (stdio not supported)'
          type: string
        url:
          description: URL is the endpoint URL for the remote MCP server (e.g., https://api.example.com/mcp)
          type: string
      type: object
    registry.Group:
      properties:
        description:
          description: Description is a human-readable description of the group's purpose and functionality
          type: string
        name:
          description: Name is the identifier for the group, used when referencing the group in commands
          type: string
        remote_servers:
          additionalProperties:
            $ref: '#/components/schemas/registry.RemoteServerMetadata'
          description: RemoteServers is a map of server names to their corresponding remote server definitions within this group
          type: object
        servers:
          additionalProperties:
            $ref: '#/components/schemas/registry.ImageMetadata'
          description: Servers is a map of server names to their corresponding server definitions within this group
          type: object
      type: object
    permissions.Profile:
      description: Permission profile to apply
      properties:
        name:
          description: Name is the name of the profile
          type: string
        network:
          $ref: '#/components/schemas/permissions.NetworkPermissions'
        privileged:
          description: 'Privileged indicates whether the container should run in privileged mode

            When true, the container has access to all host devices and capabilities

            Use with extreme caution as this removes most security isolation'
          type: boolean
        read:
          description: 'Read is a list of mount declarations that the container can read from

            These can be in the following formats:

            - A single path: The same path will be mounted from host to container

            - host-path:container-path: Different paths for host and container

            - resource-uri:container-path: Mount a resource identified by URI to a container path'
          items:
            type: string
          type: array
          uniqueItems: false
        write:
          description: 'Write is a list of mount declarations that the container can write to

            These follow the same format as Read mounts but with write permissions'
          items:
            type: string
          type: array
          uniqueItems: false
      type: object
    model.Transport:
      description: Transport is required and specifies the transport protocol configuration
      properties:
        headers:
          items:
            $ref: '#/components/schemas/model.KeyValueInput'
          type: array
          uniqueItems: false
        type:
          example: stdio
          type: string
        url:
          example: https://api.example.com/mcp
          type: string
        variables:
          additionalProperties:
            $ref: '#/components/schemas/model.Input'
          type: object
      type: object
    model.Package:
      properties:
        environmentVariables:
          description: EnvironmentVariables are set when running the package
          items:
            $ref: '#/components/schemas/model.KeyValueInput'
          type: array
          uniqueItems: false
        fileSha256:
          description: FileSHA256 is the SHA-256 hash for integrity verification (required for mcpb, optional for others)
          example: fe333e598595000ae021bd27117db32ec69af6987f507ba7a63c90638ff633ce
          pattern: ^[a-f0-9]{64}$
          type: string
        identifier:
          description: "Identifier is the package identifier:\n  - For NPM/PyPI/NuGet: package name or ID\n  - For OCI: full image reference (e.g., \"ghcr.io/owner/repo:v1.0.0\")\n  - For MCPB: direct download URL"
          example: '@modelcontextprotocol/server-brave-search'
          minLength: 1
          type: string
        packageArguments:
          description: PackageArguments are passed to the package's binary
          items:
            $ref: '#/components/schemas/model.Argument'
          type: array
          uniqueItems: false
        registryBaseUrl:
          description: RegistryBaseURL is the base URL of the package registry (used by npm, pypi, nuget, cargo; not used by oci, mcpb)
          example: https://registry.npmjs.org
          format: uri
          type: string
        registryType:
          description: RegistryType indicates how to download packages (e.g., "npm", "pypi", "cargo", "oci", "nuget", "mcpb")
          example: npm
          minLength: 1
          type: string
        runtimeArguments:
          description: RuntimeArguments are passed to the package's runtime command (e.g., docker, npx)
          items:
            $ref: '#/components/schemas/model.Argument'
          type: array
          uniqueItems: false
        runtimeHint:
          description: RunTimeHint suggests the appropriate runtime for the package
          example: npx
          type: string
        transport:
          $ref: '#/components/schemas/model.Transport'
        version:
          description: Version is the package version (required for npm, pypi, nuget; optional for mcpb; not used by oci where version is in the identifier)
          example: 1.0.2
          maxLength: 255
          minLength: 1
          type: string
      type: object
    pkg_api_v1.RegistryType:
      description: Type of registry (file, url, or default)
      enum:
      - file
      - url
      - api
      - default
      type: string
      x-enum-varnames:
      - RegistryTypeFile
      - RegistryTypeURL
      - RegistryTypeAPI
      - RegistryTypeDefault
    registry.EnvVar:
      properties:
        default:
          description: 'Default is the value to use if the environment variable is not explicitly provided

            Only used for non-required variables'
          type: string
        description:
          description: Description is a human-readable explanation of the variable's purpose
          type: string
        name:
          description: Name is the environment variable name (e.g., API_KEY)
          type: string
        required:
          description: 'Required indicates whether this environment variable must be provided

            If true and not provided via command line or secrets, the user will be prompted for a value'
          type: boolean
        secret:
          description: 'Secret indicates whether this environment variable contains sensitive information

            If true, the value will be stored as a secret rather than as a plain environment variable'
          type: boolean
      type: object
    registry.Metadata:
      description: Metadata contains additional information about the server such as popularity metrics
      properties:
        kubernetes:
          $ref: '#/components/schemas/registry.KubernetesMetadata'
        last_updated:
          description: LastUpdated is the timestamp when the server was last updated, in RFC3339 format
          type: string
        stars:
          description: Stars represents the popularity rating or number of stars for the server
          type: integer
      type: object
    registry.Header:
      properties:
        choices:
          description: Choices provides a list of valid values for the header (optional)
          items:
            type: string
          type: array
          uniqueItems: false
        default:
          description: 'Default is the value to use if the header is not explicitly provided

            Only used for non-required headers'
          type: string
        description:
          description: Description is a human-readable explanation of the header's purpose
          type: string
        name:
          description: Name is the header name (e.g., X-API-Key, Authorization)
          type: string
        required:
          description: 'Required indicates whether this header must be provided

            If true and not provided via command line or secrets, the user will be prompted for a value'
          type: boolean
        secret:
          description: 'Secret indicates whether this header contains sensitive information

            If true, the value will be stored as a secret rather than as plain text'
          type: boolean
      type: object
    model.ArgumentType:
      enum:
      - positional
      - named
      example: positional
      type: string
      x-enum-varnames:
      - ArgumentTypePositional
      - ArgumentTypeNamed
    v0.ServerListResponse:
      properties:
        metadata:
          $ref: '#/components/schemas/v0.Metadata'
        servers:
          items:
            $ref: '#/components/schemas/v0.ServerResponse'
          type: array
          uniqueItems: false
      type: object
    registry.KubernetesMetadata:
      description: 'Kubernetes contains Kubernetes-specific metadata when the MCP server is deployed in a cluster.

        This field is optional and only populated when:

        - The server is served from ToolHive Registry Server

        - The server was auto-discovered from a Kubernetes deployment

        - The Kubernetes resource has the required registry annotations'
      properties:
        image:
          description: Image is the container image used by the Kubernetes workload (applicable to MCPServer)
          type: string
        kind:
          description: Kind is the Kubernetes resource kind (e.g., MCPServer, VirtualMCPServer, MCPRemoteProxy)
          type: string
        name:
          description: Name is the Kubernetes resource name
          type: string
        namespace:
          description: Namespace is the Kubernetes namespace where the resource is deployed
          type: string
        transport:
          description: Transport is the transport type configured for the Kubernetes workload (applicable to MCPServer)
          type: string
        uid:
          description: UID is the Kubernetes resource UID
          type: string
      type: object
    registry.ImageMetadata:
      description: Container server details (if it's a container server)
      properties:
        args:
          description: 'Args are the default command-line arguments to pass to the MCP server container.

            These arguments will be used only if no command-line arguments are provided by the user.

            If the user provides arguments, they will override these defaults.'
          items:
            type: string
          type: array
          uniqueItems: false
        custom_metadata:
          additionalProperties: {}
          description: CustomMetadata allows for additional user-defined metadata
          type: object
        description:
          description: Description is a human-readable description of the server's purpose and functionality
          type: string
        docker_tags:
          description: DockerTags lists the available Docker tags for this server image
          items:
            type: string
          type: array
          uniqueItems: false
        env_vars:
          description: EnvVars defines environment variables that can be passed to the server
          items:
            $ref: '#/components/schemas/registry.EnvVar'
          type: array
          uniqueItems: false
        image:
          description: Image is the Docker image reference for the MCP server
          type: string
        metadata:
          $ref: '#/components/schemas/registry.Metadata'
        name:
          description: 'Name is the identifier for the MCP server, used when referencing the server in commands

            If not provided, it will be auto-generated from the registry key'
          type: string
        overview:
          description: 'Overview is a longer Markdown-formatted description for web display.

            Unlike the Description field (limited to 500 chars), this supports

            full Markdown and is intended for rich rendering on catalog pages.'
          type: string
        permissions:
          $ref: '#/components/schemas/permissions.Profile'
        provenance:
          $ref: '#/components/schemas/registry.Provenance'
        proxy_port:
          description: 'ProxyPort is the port for the HTTP proxy to listen on (host port)

            If not specified, a random available port will be assigned'
          type: integer
        repository_url:
          description: RepositoryURL is the URL to the source code repository for the server
          type: string
        stateless:
          description: Stateless indicates the server only supports POST (no SSE/GET)
          type: boolean
        status:
          description: Status indicates whether the server is currently active or deprecated
          type: string
        tags:
          description: Tags are categorization labels for the server to aid in discovery and filtering
          items:
            type: string
          type: array
          uniqueItems: false
        target_port:
          description: TargetPort is the port for the container to expose (only applicable to SSE and Streamable HTTP transports)
          type: integer
        tier:
          description: Tier represents the tier classification level of the server, e.g., "Official" or "Community"
          type: string
        title:
          description: 'Title is an optional human-readable display name for the server.

            If not provided, the Name field is used for display purposes.'
          type: string
        tools:
          description: Tools is a list of tool names provided by this MCP server
          items:
            type: string
          type: array
          uniqueItems: false
        transport:
          description: 'Transport defines the communication protocol for the server

            For containers: stdio, sse, or streamable-http

            For remote servers: sse or streamable-http (stdio not supported)'
          type: string
      type: object
    model.Repository:
      properties:
        id:
          example: b94b5f7e-c7c6-d760-2c78-a5e9b8a5b8c9
          type: string
        source:
          example: github
          type: string
        subfolder:
          example: src/everything
          type: string
        url:
          example: https://github.com/modelcontextprotocol/servers
          format: uri
          type: string
      type: object
    permissions.InboundNetworkPermissions:
      description: Inbound defines inbound network permissions
      properties:
        allow_host:
          description: AllowHost is a list of allowed hosts for inbound connections
          items:
            type: string
          type: array
          uniqueItems: false
      type: object
    github_com_stacklok_toolhive-core_registry_types.Registry:
      description: Full registry data
      properties:
        groups:
          description: Groups is a slice of group definitions containing related MCP servers
          items:
            $ref: '#/components/schemas/registry.Group'
          type: array
          uniqueItems: false
        last_updated:
          description: LastUpdate

# --- truncated at 32 KB (48 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/stacklok/refs/heads/main/openapi/stacklok-registry-api-openapi.yml