> ## Documentation Index
> Fetch the complete documentation index at: https://docs.runaether.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Search the MCP registry

> Searches the MCP registry for the servers whose name holds q, its first page of 20 in its order, leaving out a server when a directory integration or one of the organization's MCP servers has the URL of one of its remotes. Aether does not install them: install holds the add-server form's fields as the registry gives them, a remote server's URL and headers or a local server's package at its exact version, or why Aether cannot add it. The registry is searched for every request, through the address policy every MCP server connection takes, for at most fifteen seconds and a mebibyte; Aether keeps nothing of its answer. A registry that did not answer is status unavailable, with why, and lists no servers; it is never reported as listing none.



## OpenAPI

````yaml api-reference/openapi.v1.json GET /integration-search/registry
openapi: 3.1.0
info:
  title: Aether Public API
  version: 0.1.0
  description: >-
    The versioned, public Aether REST API. Authenticate with an `aether_`
    platform API key or a session token.
servers:
  - url: https://api.runaether.dev/v1
security:
  - bearerAuth: []
paths:
  /integration-search/registry:
    get:
      tags:
        - plugins
      summary: Search the MCP registry
      description: >-
        Searches the MCP registry for the servers whose name holds q, its first
        page of 20 in its order, leaving out a server when a directory
        integration or one of the organization's MCP servers has the URL of one
        of its remotes. Aether does not install them: install holds the
        add-server form's fields as the registry gives them, a remote server's
        URL and headers or a local server's package at its exact version, or why
        Aether cannot add it. The registry is searched for every request,
        through the address policy every MCP server connection takes, for at
        most fifteen seconds and a mebibyte; Aether keeps nothing of its answer.
        A registry that did not answer is status unavailable, with why, and
        lists no servers; it is never reported as listing none.
      operationId: searchIntegrationRegistry
      parameters:
        - description: >-
            What to find: each of its words matched, ignoring case, against each
            integration's name and aliases, then its description and category; a
            marketplace plugin's against its name, then its category.
          explode: false
          in: query
          name: q
          required: true
          schema:
            description: >-
              What to find: each of its words matched, ignoring case, against
              each integration's name and aliases, then its description and
              category; a marketplace plugin's against its name, then its
              category.
            maxLength: 100
            minLength: 1
            pattern: \S
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IntegrationRegistrySearchResponse'
          description: OK
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Bad Request
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Unauthorized
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrgAuthorizationErrorResponse'
          description: Forbidden
        '422':
          content:
            application/json:
              schema:
                anyOf:
                  - $ref: '#/components/schemas/ErrorResponse'
                  - $ref: '#/components/schemas/PluginErrorResponse'
          description: Unprocessable Entity
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Internal Server Error
components:
  schemas:
    IntegrationRegistrySearchResponse:
      discriminator:
        mapping:
          available:
            $ref: '#/components/schemas/IntegrationRegistryAnswered'
          unavailable:
            $ref: '#/components/schemas/IntegrationSearchRegistryUnavailable'
        propertyName: state
      oneOf:
        - $ref: '#/components/schemas/IntegrationRegistryAnswered'
        - $ref: '#/components/schemas/IntegrationSearchRegistryUnavailable'
    ErrorResponse:
      additionalProperties: false
      properties:
        code:
          type: string
        error:
          minLength: 1
          type: string
        errors:
          items:
            $ref: '#/components/schemas/ErrorDetail'
          type: array
      required:
        - error
      type: object
    OrgAuthorizationErrorResponse:
      additionalProperties: false
      properties:
        code:
          enum:
            - org_membership_required
            - org_role_insufficient
            - org_suspended
            - account_deleting
          type: string
        error:
          minLength: 1
          type: string
      required:
        - error
        - code
      type: object
    PluginErrorResponse:
      additionalProperties: false
      properties:
        code:
          enum:
            - plugin_request_invalid
            - plugin_source_address_refused
            - plugin_source_not_public
            - plugin_source_unreachable
            - plugin_source_not_found
            - plugin_source_unsupported
            - plugin_source_too_large
            - plugin_source_invalid
            - plugin_source_empty
            - plugin_skill_invalid
            - plugin_undeliverable
            - plugin_server_probe_failed
            - plugin_server_key_taken
            - plugin_name_taken
            - plugin_moved
            - mcp_credential_policy_required
            - mcp_credential_policy_not_applicable
            - mcp_credential_policy_org_unavailable
            - integration_not_in_directory
            - integration_shape_changed
            - integration_auth_unexpected
          type: string
        conflicts:
          items:
            $ref: '#/components/schemas/PluginKeyHolder'
          type: array
        error:
          minLength: 1
          type: string
      required:
        - error
        - code
        - conflicts
      type: object
    IntegrationRegistryAnswered:
      additionalProperties: false
      properties:
        results:
          description: >-
            The servers the registry found, in its order; a server is left out
            when a directory integration or one of the organization's MCP
            servers has the URL of one of its remotes.
          items:
            $ref: '#/components/schemas/IntegrationSearchServerResult'
          type: array
        state:
          enum:
            - available
          type: string
      required:
        - state
        - results
      type: object
    IntegrationSearchRegistryUnavailable:
      additionalProperties: false
      properties:
        detail:
          description: What went wrong, for logs; the failure says it in plain words.
          type: string
        failure:
          description: >-
            unreachable: no answer came within the search's fifteen seconds;
            failed: it answered with an error status; invalid: it answered with
            what is not its search response, or with more than a mebibyte.
          enum:
            - unreachable
            - failed
            - invalid
          type: string
        state:
          enum:
            - unavailable
          type: string
      required:
        - state
        - failure
        - detail
      type: object
    ErrorDetail:
      additionalProperties: false
      properties:
        location:
          description: >-
            Where the error occurred, e.g. 'body.items[3].tags' or
            'path.thing-id'
          type: string
        message:
          description: Error message text
          type: string
        value:
          description: The value at the given location
      type: object
    PluginKeyHolder:
      additionalProperties: false
      properties:
        key:
          type: string
        plugin:
          type:
            - string
            - 'null'
        source:
          enum:
            - manual
            - aether
            - plugin
            - directory
          type: string
      required:
        - key
        - source
        - plugin
      type: object
    IntegrationSearchServerResult:
      additionalProperties: false
      properties:
        install:
          $ref: '#/components/schemas/IntegrationSearchServerInstall'
        kind:
          enum:
            - server
          type: string
        server:
          $ref: '#/components/schemas/IntegrationSearchRegistryEntry'
      required:
        - kind
        - server
        - install
      type: object
    IntegrationSearchServerInstall:
      discriminator:
        mapping:
          package:
            $ref: '#/components/schemas/IntegrationSearchPackageInstall'
          remote:
            $ref: '#/components/schemas/IntegrationSearchRemoteInstall'
          unsupported:
            $ref: '#/components/schemas/IntegrationSearchUnsupportedInstall'
        propertyName: kind
      oneOf:
        - $ref: '#/components/schemas/IntegrationSearchRemoteInstall'
        - $ref: '#/components/schemas/IntegrationSearchPackageInstall'
        - $ref: '#/components/schemas/IntegrationSearchUnsupportedInstall'
    IntegrationSearchRegistryEntry:
      additionalProperties: false
      properties:
        description:
          type: string
        name:
          description: >-
            Its name in the MCP registry, reverse-DNS:
            io.github.getsentry/sentry-mcp.
          type: string
        title:
          description: Its display title; empty when the registry gives none.
          type: string
        version:
          description: The version of its registry entry, which is not its package's.
          type: string
      required:
        - name
        - title
        - description
        - version
      type: object
    IntegrationSearchPackageInstall:
      additionalProperties: false
      properties:
        args:
          description: The arguments whose values the registry gives.
          items:
            type: string
          type: array
        env:
          additionalProperties:
            $ref: '#/components/schemas/McpStdioEnvValue'
          description: >-
            The variables whose values the registry gives, and each required
            secret variable.
          type: object
        kind:
          enum:
            - package
          type: string
        package:
          type: string
        runtime:
          description: npx for an npm package, uvx for a PyPI package.
          enum:
            - npx
            - uvx
          type: string
        version:
          description: The exact release the registry names.
          type: string
      required:
        - kind
        - runtime
        - package
        - version
        - args
        - env
      type: object
    IntegrationSearchRemoteInstall:
      additionalProperties: false
      properties:
        api_key:
          description: >-
            True when the registry says the server takes a credential in
            Authorization: the form offers an API key instead of the OAuth the
            server may advertise.
          type: boolean
        headers:
          additionalProperties:
            type: string
          description: >-
            The non-secret headers whose values the registry gives, sent
            upstream on every request.
          type: object
        kind:
          enum:
            - remote
          type: string
        url:
          type: string
      required:
        - kind
        - url
        - headers
        - api_key
      type: object
    IntegrationSearchUnsupportedInstall:
      additionalProperties: false
      properties:
        kind:
          enum:
            - unsupported
          type: string
        refusals:
          description: >-
            Why, for each of its remotes and packages in the registry's order,
            or once for a server that lists neither.
          items:
            $ref: '#/components/schemas/IntegrationSearchServerRefusal'
          minItems: 1
          type: array
      required:
        - kind
        - refusals
      type: object
    McpStdioEnvValue:
      discriminator:
        mapping:
          plain:
            $ref: '#/components/schemas/McpStdioPlainEnv'
          secret:
            $ref: '#/components/schemas/McpStdioSecretEnv'
        propertyName: kind
      oneOf:
        - $ref: '#/components/schemas/McpStdioPlainEnv'
        - $ref: '#/components/schemas/McpStdioSecretEnv'
    IntegrationSearchServerRefusal:
      additionalProperties: false
      properties:
        detail:
          description: What it is, naming the registry entry's field.
          type: string
        reason:
          description: >-
            transport: a remote that is not streamable HTTP, or a package that
            does not run as a stdio server; package_type: a package that is
            neither npm nor PyPI; version_not_exact: a package whose version is
            not one exact release; invalid: any other field the add forms refuse
            or that Aether would have to fill.
          enum:
            - transport
            - package_type
            - version_not_exact
            - invalid
          type: string
      required:
        - reason
        - detail
      type: object
    McpStdioPlainEnv:
      additionalProperties: false
      properties:
        kind:
          enum:
            - plain
          type: string
        value:
          type: string
      required:
        - kind
        - value
      type: object
    McpStdioSecretEnv:
      additionalProperties: false
      properties:
        kind:
          enum:
            - secret
          type: string
      required:
        - kind
      type: object
  securitySchemes:
    bearerAuth:
      bearerFormat: JWT
      scheme: bearer
      type: http

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.