> ## 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 integrations by name

> Finds integrations across Aether's integration directory, the organization's plugin marketplaces (the official Claude Code and Codex ones) and the MCP registry, one result per integration: an integration of the directory, installed by its key; a plugin a marketplace lists, installed by the marketplace's URL and its name; or a server the MCP registry lists, which Aether does not install: 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. A directory entry hides every marketplace plugin of its name, the one it prefers included; a registry server is left out when a directory integration or one of the organization's MCP servers has the URL of one of its remotes. An integration's source says what it contains and its default_credential_policy whose connection it takes; a marketplace's listing does not say what a plugin bundles, which Aether reads from its files when it installs it. installed names the card of what the organization installed: an integration's plugin or, installed as its server alone, that server; the organization's plugin of a marketplace plugin's name. It is absent for what is not installed. sources reports every source with its status: a marketplace Aether could not read, or the MCP registry when it did not answer, is unavailable, with why, and contributes no results; it is never reported as listing none. A marketplace's listing is read again once it is ten minutes old, and a marketplace that could not be read is tried again a minute later. The MCP registry is searched for every query, through the address policy every MCP server connection takes, for at most five seconds and a mebibyte; Aether keeps nothing of its answer.



## OpenAPI

````yaml api-reference/openapi.v1.json GET /integration-search
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:
    get:
      tags:
        - plugins
      summary: Search integrations by name
      description: >-
        Finds integrations across Aether's integration directory, the
        organization's plugin marketplaces (the official Claude Code and Codex
        ones) and the MCP registry, one result per integration: an integration
        of the directory, installed by its key; a plugin a marketplace lists,
        installed by the marketplace's URL and its name; or a server the MCP
        registry lists, which Aether does not install: 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. A directory entry hides every marketplace plugin
        of its name, the one it prefers included; a registry server is left out
        when a directory integration or one of the organization's MCP servers
        has the URL of one of its remotes. An integration's source says what it
        contains and its default_credential_policy whose connection it takes; a
        marketplace's listing does not say what a plugin bundles, which Aether
        reads from its files when it installs it. installed names the card of
        what the organization installed: an integration's plugin or, installed
        as its server alone, that server; the organization's plugin of a
        marketplace plugin's name. It is absent for what is not installed.
        sources reports every source with its status: a marketplace Aether could
        not read, or the MCP registry when it did not answer, is unavailable,
        with why, and contributes no results; it is never reported as listing
        none. A marketplace's listing is read again once it is ten minutes old,
        and a marketplace that could not be read is tried again a minute later.
        The MCP registry is searched for every query, through the address policy
        every MCP server connection takes, for at most five seconds and a
        mebibyte; Aether keeps nothing of its answer.
      operationId: searchIntegrations
      parameters:
        - description: >-
            What to find: matched, ignoring case, against each integration's and
            plugin's name, then its description, category and, for an
            integration of the directory, its aliases.
          explode: false
          in: query
          name: q
          required: true
          schema:
            description: >-
              What to find: matched, ignoring case, against each integration's
              and plugin's name, then its description, category and, for an
              integration of the directory, its aliases.
            maxLength: 100
            minLength: 1
            pattern: \S
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IntegrationSearchResponse'
          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:
    IntegrationSearchResponse:
      additionalProperties: false
      properties:
        results:
          description: >-
            One per integration: a directory entry hides every marketplace
            plugin of its name, the one it prefers included, and of the plugins
            marketplaces list under one name the first that matches is the
            result. Results whose name holds the query come first, then those
            whose description, category or aliases do; within each, the
            directory's, then each marketplace's in turn. The MCP registry's
            servers come last, 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/IntegrationSearchResult'
          type: array
        sources:
          description: >-
            The integration directory, then each of the organization's
            marketplaces, then the MCP registry, each with its status.
          items:
            $ref: '#/components/schemas/IntegrationSearchSource'
          type: array
      required:
        - sources
        - results
      type: object
    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
    IntegrationSearchResult:
      discriminator:
        mapping:
          integration:
            $ref: '#/components/schemas/IntegrationSearchIntegrationResult'
          plugin:
            $ref: '#/components/schemas/IntegrationSearchPluginResult'
          server:
            $ref: '#/components/schemas/IntegrationSearchServerResult'
        propertyName: kind
      oneOf:
        - $ref: '#/components/schemas/IntegrationSearchIntegrationResult'
        - $ref: '#/components/schemas/IntegrationSearchPluginResult'
        - $ref: '#/components/schemas/IntegrationSearchServerResult'
    IntegrationSearchSource:
      discriminator:
        mapping:
          directory:
            $ref: '#/components/schemas/IntegrationSearchDirectorySource'
          marketplace:
            $ref: '#/components/schemas/IntegrationSearchMarketplaceSource'
          registry:
            $ref: '#/components/schemas/IntegrationSearchRegistrySource'
        propertyName: kind
      oneOf:
        - $ref: '#/components/schemas/IntegrationSearchDirectorySource'
        - $ref: '#/components/schemas/IntegrationSearchMarketplaceSource'
        - $ref: '#/components/schemas/IntegrationSearchRegistrySource'
    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
    IntegrationSearchIntegrationResult:
      additionalProperties: false
      properties:
        installed:
          $ref: '#/components/schemas/IntegrationSearchInstalled'
        integration:
          $ref: '#/components/schemas/DirectoryIntegration'
        kind:
          enum:
            - integration
          type: string
      required:
        - kind
        - integration
      type: object
    IntegrationSearchPluginResult:
      additionalProperties: false
      properties:
        installed:
          $ref: '#/components/schemas/IntegrationSearchInstalled'
        kind:
          enum:
            - plugin
          type: string
        marketplace:
          $ref: '#/components/schemas/PluginMarketplace'
        not_loaded_by:
          description: >-
            The agents whose tasks would run without it, where its listing
            already tells; Aether reads the rest of each agent's rules from its
            files at install.
          items:
            $ref: '#/components/schemas/IntegrationSearchRefusal'
          type: array
        plugin:
          $ref: '#/components/schemas/MarketplacePlugin'
      required:
        - kind
        - marketplace
        - plugin
        - not_loaded_by
      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
    IntegrationSearchDirectorySource:
      additionalProperties: false
      properties:
        kind:
          enum:
            - directory
          type: string
        status:
          $ref: '#/components/schemas/IntegrationSearchDirectoryStatus'
      required:
        - kind
        - status
      type: object
    IntegrationSearchMarketplaceSource:
      additionalProperties: false
      properties:
        kind:
          enum:
            - marketplace
          type: string
        marketplace:
          $ref: '#/components/schemas/PluginMarketplace'
        status:
          $ref: '#/components/schemas/IntegrationSearchMarketplaceStatus'
      required:
        - kind
        - marketplace
        - status
      type: object
    IntegrationSearchRegistrySource:
      additionalProperties: false
      properties:
        kind:
          enum:
            - registry
          type: string
        status:
          $ref: '#/components/schemas/IntegrationSearchRegistryStatus'
      required:
        - kind
        - status
      type: object
    IntegrationSearchInstalled:
      additionalProperties: false
      properties:
        id:
          description: The plugin's id, or the MCP server's.
          format: uuid
          type: string
        kind:
          enum:
            - plugin
            - mcp_server
          type: string
      required:
        - kind
        - id
      type: object
    DirectoryIntegration:
      additionalProperties: false
      properties:
        aliases:
          description: Other words the integration is searched by, lowercase.
          items:
            type: string
          type: array
        category:
          enum:
            - issue_tracking
            - documents
            - design
            - chat
            - database
            - hosting
            - observability
            - analytics
            - payments
            - knowledge
          type: string
        default_credential_policy:
          enum:
            - creator
            - org
          type:
            - string
            - 'null'
        description:
          type: string
        display_name:
          type: string
        homepage:
          type: string
        installs_as:
          description: >-
            server: the integration is its MCP server alone, added to the
            catalog. plugin: a plugin bundling its MCP servers and its skills.
          enum:
            - server
            - plugin
          type: string
        key:
          description: >-
            The integration's name in the directory, and the key of its MCP
            server; installed as a plugin, the plugin's name.
          type: string
        source:
          discriminator:
            mapping:
              definition:
                $ref: '#/components/schemas/DirectoryDefinitionSource'
              marketplace:
                $ref: '#/components/schemas/DirectoryMarketplaceSource'
            propertyName: kind
          oneOf:
            - $ref: '#/components/schemas/DirectoryMarketplaceSource'
            - $ref: '#/components/schemas/DirectoryDefinitionSource'
      required:
        - key
        - display_name
        - description
        - homepage
        - category
        - aliases
        - default_credential_policy
        - installs_as
        - source
      type: object
    PluginMarketplace:
      additionalProperties: false
      properties:
        display_name:
          type: string
        name:
          type: string
        url:
          type: string
      required:
        - name
        - display_name
        - url
      type: object
    IntegrationSearchRefusal:
      additionalProperties: false
      properties:
        agent:
          enum:
            - claude_code
            - codex
          type: string
        reason:
          description: 'codex_plugin_name: its name ends in ''.'', which Codex does not load.'
          enum:
            - codex_plugin_name
          type: string
      required:
        - agent
        - reason
      type: object
    MarketplacePlugin:
      additionalProperties: false
      properties:
        category:
          type: string
        description:
          type: string
        name:
          type: string
        unsupported_reason:
          type:
            - string
            - 'null'
      required:
        - name
        - description
        - category
        - unsupported_reason
      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
    IntegrationSearchDirectoryStatus:
      additionalProperties: false
      properties:
        state:
          enum:
            - available
          type: string
      required:
        - state
      type: object
    IntegrationSearchMarketplaceStatus:
      discriminator:
        mapping:
          available:
            $ref: '#/components/schemas/IntegrationSearchMarketplaceRead'
          unavailable:
            $ref: '#/components/schemas/IntegrationSearchMarketplaceUnavailable'
        propertyName: state
      oneOf:
        - $ref: '#/components/schemas/IntegrationSearchMarketplaceRead'
        - $ref: '#/components/schemas/IntegrationSearchMarketplaceUnavailable'
    IntegrationSearchRegistryStatus:
      discriminator:
        mapping:
          available:
            $ref: '#/components/schemas/IntegrationSearchRegistryRead'
          unavailable:
            $ref: '#/components/schemas/IntegrationSearchRegistryUnavailable'
        propertyName: state
      oneOf:
        - $ref: '#/components/schemas/IntegrationSearchRegistryRead'
        - $ref: '#/components/schemas/IntegrationSearchRegistryUnavailable'
    DirectoryDefinitionSource:
      additionalProperties: false
      properties:
        kind:
          enum:
            - definition
          type: string
        servers:
          items:
            $ref: '#/components/schemas/DirectoryDefinitionServer'
          minItems: 1
          type: array
        skills:
          $ref: '#/components/schemas/DirectorySkillsSource'
      required:
        - kind
        - servers
      type: object
    DirectoryMarketplaceSource:
      additionalProperties: false
      properties:
        kind:
          enum:
            - marketplace
          type: string
        marketplace_url:
          type: string
        plugin:
          description: >-
            The name the marketplace lists the plugin under: the integration's
            key.
          type: string
      required:
        - kind
        - marketplace_url
        - plugin
      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
    IntegrationSearchMarketplaceRead:
      additionalProperties: false
      properties:
        commit:
          description: >-
            The commit of the marketplace's default branch the listing was read
            at.
          type: string
        read_at:
          description: >-
            When Aether read the listing; searches use it until it is ten
            minutes old, then read the marketplace again.
          format: date-time
          type: string
        state:
          enum:
            - available
          type: string
      required:
        - state
        - commit
        - read_at
      type: object
    IntegrationSearchMarketplaceUnavailable:
      additionalProperties: false
      properties:
        checked_at:
          description: >-
            When Aether last tried to read it; searches report it unavailable
            for a minute after, then try again.
          format: date-time
          type: string
        detail:
          description: What went wrong, safe to show an admin.
          type: string
        failure:
          description: >-
            Why it could not be read, as installing from it would be refused
            (plugin_source_<failure>).
          enum:
            - address_refused
            - not_public
            - unreachable
            - not_found
            - unsupported
            - too_large
            - invalid
          type: string
        state:
          enum:
            - unavailable
          type: string
      required:
        - state
        - failure
        - detail
        - checked_at
      type: object
    IntegrationSearchRegistryRead:
      additionalProperties: false
      properties:
        state:
          enum:
            - available
          type: string
      required:
        - state
      type: object
    IntegrationSearchRegistryUnavailable:
      additionalProperties: false
      properties:
        detail:
          description: What went wrong, safe to show an admin.
          type: string
        failure:
          description: >-
            unreachable: no answer came within the search's five 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
    DirectoryDefinitionServer:
      additionalProperties: false
      properties:
        key:
          type: string
        url:
          type: string
      required:
        - key
        - url
      type: object
    DirectorySkillsSource:
      additionalProperties: false
      properties:
        path:
          description: The directory holding the skills; empty for the repository's root.
          type: string
        ref:
          description: The branch or tag followed; null for the default branch.
          type:
            - string
            - 'null'
        repository_url:
          type: string
      required:
        - repository_url
        - path
        - ref
      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.