> ## 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.

# Add an MCP server to the organization's catalog

> A remote (http) server's URL is probed and the auth it finds stored. A local (stdio) server is validated, never run, and its auth derived from its declared secret variables. The server is enabled on every current project of the organization, and every project created later, with its default credential policy: the task creator's connection for a server that needs a credential, none otherwise.



## OpenAPI

````yaml api-reference/openapi.v1.json POST /mcp-servers
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:
  /mcp-servers:
    post:
      tags:
        - mcp-servers
      summary: Add an MCP server to the organization's catalog
      description: >-
        A remote (http) server's URL is probed and the auth it finds stored. A
        local (stdio) server is validated, never run, and its auth derived from
        its declared secret variables. The server is enabled on every current
        project of the organization, and every project created later, with its
        default credential policy: the task creator's connection for a server
        that needs a credential, none otherwise.
      operationId: createMcpServer
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/McpServerRequest'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/McpServerResponse'
          description: Created
        '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
        '409':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/McpServerErrorResponse'
          description: Conflict
        '422':
          content:
            application/json:
              schema:
                anyOf:
                  - $ref: '#/components/schemas/ErrorResponse'
                  - $ref: '#/components/schemas/McpServerErrorResponse'
          description: Unprocessable Entity
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Internal Server Error
components:
  schemas:
    McpServerRequest:
      discriminator:
        mapping:
          http: '#/components/schemas/McpHTTPServerRequest'
          stdio: '#/components/schemas/McpStdioServerRequest'
        propertyName: kind
      oneOf:
        - $ref: '#/components/schemas/McpHTTPServerRequest'
        - $ref: '#/components/schemas/McpStdioServerRequest'
    McpServerResponse:
      additionalProperties: false
      properties:
        mcp_server:
          $ref: '#/components/schemas/McpServer'
      required:
        - mcp_server
      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
    McpServerErrorResponse:
      additionalProperties: false
      properties:
        code:
          enum:
            - mcp_server_key_invalid
            - mcp_server_key_reserved
            - mcp_server_key_taken
            - mcp_server_display_name_invalid
            - mcp_server_url_invalid
            - mcp_server_runtime_invalid
            - mcp_server_package_invalid
            - mcp_server_version_unpinned
            - mcp_server_args_invalid
            - mcp_server_env_invalid
            - mcp_server_kind_change_refused
            - mcp_server_address_refused
            - mcp_server_unreachable
            - mcp_server_not_mcp
            - mcp_server_auth_unsupported
            - mcp_server_auth_discovery_failed
            - mcp_server_response_too_large
            - mcp_credential_policy_required
            - mcp_credential_policy_not_applicable
            - mcp_credential_policy_org_unavailable
            - mcp_server_api_key_not_applicable
            - mcp_connection_static_secret_not_accepted
            - mcp_connection_secret_invalid
            - mcp_connection_server_changed
            - mcp_server_aether_managed
            - mcp_connection_github_not_connected
            - mcp_connection_org_not_offered
            - mcp_server_headers_invalid
            - mcp_connection_oauth_not_accepted
            - mcp_oauth_not_advertised
            - mcp_oauth_pkce_unsupported
            - mcp_oauth_app_required
            - mcp_oauth_registration_failed
            - mcp_server_plugin_bundled
            - mcp_repo_config_invalid
            - mcp_oauth_app_issuer_invalid
            - mcp_oauth_app_invalid
            - mcp_oauth_app_auth_method_unsupported
            - mcp_server_directory_managed
            - mcp_server_not_from_directory
            - mcp_server_directory_moved
            - integration_not_in_directory
            - integration_shape_changed
            - mcp_server_switched_off
          type: string
        error:
          minLength: 1
          type: string
      required:
        - error
        - code
      type: object
    McpHTTPServerRequest:
      additionalProperties: false
      properties:
        api_key:
          description: >-
            True: authenticate with an API key sent as a bearer token (auth
            static_secret) instead of the OAuth the server advertises; refused
            for a server that asks for no credential. False or omitted: the auth
            the probe finds. The URL is probed again when it changed or when an
            API-key server stops being one; a server's connections go when its
            URL or auth changes.
          type: boolean
        display_name:
          maxLength: 100
          minLength: 1
          type: string
        headers:
          additionalProperties:
            type: string
          description: >-
            Non-secret headers sent upstream on every request, as a local
            .mcp.json entry's headers: GitHub's X-MCP-Toolsets, for one. Never
            Authorization, Accept, Content-Type, Last-Event-ID or an Mcp-*
            header. Omitted: none. One of Aether's own servers keeps the headers
            Aether defines for it (X-MCP-Readonly on github_readonly).
          type: object
        key:
          pattern: ^[a-z][a-z0-9_-]{0,31}$
          type: string
        kind:
          enum:
            - http
          type: string
        required:
          description: >-
            True: a task is not created until the connection its project's
            credential policy names can be used, and a turn that cannot reach
            the server fails, naming it. False, the Integrations tab's default:
            a task whose connection cannot be used starts without the server,
            and its agent is not given it.
          type: boolean
        url:
          maxLength: 2048
          minLength: 1
          pattern: ^https://
          type: string
      required:
        - kind
        - url
        - key
        - display_name
        - required
      type: object
    McpStdioServerRequest:
      additionalProperties: false
      properties:
        args:
          description: Arguments after the package, at most 64 of at most 1024 bytes each.
          items:
            type: string
          type: array
        display_name:
          maxLength: 100
          minLength: 1
          type: string
        env:
          additionalProperties:
            $ref: '#/components/schemas/McpStdioEnvValue'
          description: >-
            Declared variables: a plain value, or a secret whose value each
            connection holds. Names are shell identifiers, never PATH, HOME,
            npm_config_cache or UV_CACHE_DIR. A changed runtime, package,
            version, args or env deletes the server's connections.
          type: object
        key:
          pattern: ^[a-z][a-z0-9_-]{0,31}$
          type: string
        kind:
          enum:
            - stdio
          type: string
        package:
          description: >-
            The package name in the runtime's ecosystem syntax; refused with
            mcp_server_package_invalid otherwise.
          type: string
        required:
          description: >-
            True: a task is not created until the connection its project's
            credential policy names can be used, and a turn that cannot reach
            the server fails, naming it. False, the Integrations tab's default:
            a task whose connection cannot be used starts without the server,
            and its agent is not given it.
          type: boolean
        runtime:
          description: >-
            npx (an npm package), uvx (a PyPI package's entry point) or python
            (python with a PyPI package, for python -m). Anything else is
            refused with mcp_server_runtime_invalid.
          type: string
        version:
          description: >-
            One exact release: full semver for npx, a PEP 440 version for uvx
            and python. Missing, latest, a range, a wildcard or a tag is refused
            with mcp_server_version_unpinned.
          type: string
      required:
        - kind
        - key
        - display_name
        - required
        - runtime
        - package
        - args
        - env
      type: object
    McpServer:
      discriminator:
        mapping:
          http: '#/components/schemas/McpHTTPServer'
          stdio: '#/components/schemas/McpStdioServer'
        propertyName: kind
      oneOf:
        - $ref: '#/components/schemas/McpHTTPServer'
        - $ref: '#/components/schemas/McpStdioServer'
    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
    McpStdioEnvValue:
      discriminator:
        mapping:
          plain: '#/components/schemas/McpStdioPlainEnv'
          secret: '#/components/schemas/McpStdioSecretEnv'
        propertyName: kind
      oneOf:
        - $ref: '#/components/schemas/McpStdioPlainEnv'
        - $ref: '#/components/schemas/McpStdioSecretEnv'
    McpHTTPServer:
      additionalProperties: false
      properties:
        auth:
          enum:
            - none
            - static_secret
            - oauth
          type: string
        connection_kind:
          enum:
            - static_secret
            - oauth
            - github_user_credential
            - sentry_installation
          type:
            - string
            - 'null'
        created_at:
          format: date-time
          type: string
        default_credential_policy:
          enum:
            - creator
            - org
          type:
            - string
            - 'null'
        display_name:
          type: string
        enabled_by_default:
          type: boolean
        headers:
          additionalProperties:
            type: string
          type: object
        homepage:
          description: >-
            The integration's homepage, as Aether's integration directory names
            it; null unless source is directory.
          type:
            - string
            - 'null'
        id:
          format: uuid
          type: string
        key:
          type: string
        kind:
          enum:
            - http
          type: string
        plugin_id:
          format: uuid
          type:
            - string
            - 'null'
        required:
          type: boolean
        secret_names:
          items:
            type: string
          type: array
        source:
          enum:
            - manual
            - aether
            - plugin
            - directory
          type: string
        updated_at:
          format: date-time
          type: string
        url:
          type: string
      required:
        - kind
        - id
        - key
        - display_name
        - url
        - headers
        - auth
        - source
        - connection_kind
        - required
        - enabled_by_default
        - default_credential_policy
        - secret_names
        - plugin_id
        - homepage
        - created_at
        - updated_at
      type: object
    McpStdioServer:
      additionalProperties: false
      properties:
        args:
          items:
            type: string
          type: array
        auth:
          enum:
            - none
            - static_secret
          type: string
        connection_kind:
          enum:
            - static_secret
          type:
            - string
            - 'null'
        created_at:
          format: date-time
          type: string
        default_credential_policy:
          enum:
            - creator
            - org
          type:
            - string
            - 'null'
        display_name:
          type: string
        enabled_by_default:
          type: boolean
        env:
          additionalProperties:
            $ref: '#/components/schemas/McpStdioEnvValue'
          type: object
        id:
          format: uuid
          type: string
        key:
          type: string
        kind:
          enum:
            - stdio
          type: string
        package:
          type: string
        required:
          type: boolean
        runtime:
          enum:
            - npx
            - uvx
            - python
          type: string
        secret_names:
          items:
            type: string
          type: array
        source:
          enum:
            - manual
          type: string
        updated_at:
          format: date-time
          type: string
        version:
          type: string
      required:
        - kind
        - id
        - key
        - display_name
        - runtime
        - package
        - version
        - args
        - env
        - auth
        - source
        - connection_kind
        - required
        - enabled_by_default
        - default_credential_policy
        - secret_names
        - created_at
        - updated_at
      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.