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

# Create Connector

> Register an MCP server. What happens next depends on `auth_config.type`.

For **`oauth2`**, Tavus performs discovery against the server and registers itself as a client (Dynamic Client Registration), then returns an `authorize_url` alongside the connector. Send the customer there; the server redirects back to Tavus, which stores the tokens and moves the connector to `oauth_status: linked`. Nothing needs to be registered on your side. If discovery or registration fails the connector is not created, so you can retry cleanly.

For every other type the connector is usable immediately.

Attach the connector to a PAL with [`layers.mcp.connectors`](/sections/conversational-video-interface/pal/mcp-connectors); the in-call agent connects to the server and discovers its tools itself, so there is nothing to import.




## OpenAPI

````yaml post /v2/connectors
openapi: 3.0.3
info:
  title: Tavus Developer API Collection
  version: 1.0.0
  contact: {}
servers:
  - url: https://tavusapi.com
security:
  - apiKey: []
tags:
  - name: Videos
  - name: Faces
  - name: Voices
  - name: Conversations
  - name: Deployments
  - name: PALs
  - name: Tools
  - name: PAL Tools
  - name: Connectors
  - name: Pronunciation Dictionaries
  - name: Replacements
  - name: Transcriptions
  - name: Documents
  - name: Memory Stores
paths:
  /v2/connectors:
    post:
      tags:
        - Connectors
      summary: Create Connector
      description: >
        Register an MCP server. What happens next depends on `auth_config.type`.


        For **`oauth2`**, Tavus performs discovery against the server and
        registers itself as a client (Dynamic Client Registration), then returns
        an `authorize_url` alongside the connector. Send the customer there; the
        server redirects back to Tavus, which stores the tokens and moves the
        connector to `oauth_status: linked`. Nothing needs to be registered on
        your side. If discovery or registration fails the connector is not
        created, so you can retry cleanly.


        For every other type the connector is usable immediately.


        Attach the connector to a PAL with
        [`layers.mcp.connectors`](/sections/conversational-video-interface/pal/mcp-connectors);
        the in-call agent connects to the server and discovers its tools itself,
        so there is nothing to import.
      operationId: createConnector
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
                - name
                - server_url
              properties:
                name:
                  type: string
                  description: Human-readable name, e.g. `Linear`.
                  example: Linear
                server_url:
                  type: string
                  description: The MCP server endpoint.
                  example: https://mcp.linear.app/mcp
                auth_config:
                  type: object
                  description: >
                    How Tavus authenticates to the server. Defaults to `{
                    "type": "none" }`.


                    - `{ "type": "none" }` - public server.

                    - `{ "type": "bearer", "token": "..." }` - static bearer
                    token.

                    - `{ "type": "oauth2" }` - Tavus runs the OAuth flow; the
                    response carries `authorize_url`.


                    Secrets are encrypted at rest and never returned.
                  example:
                    type: oauth2
            examples:
              OAuth server:
                value:
                  name: Linear
                  server_url: https://mcp.linear.app/mcp
                  auth_config:
                    type: oauth2
              Static token:
                value:
                  name: Internal tools
                  server_url: https://mcp.example.com/mcp
                  auth_config:
                    type: bearer
                    token: sk-...
              Public server:
                value:
                  name: DeepWiki
                  server_url: https://mcp.deepwiki.com/mcp
      responses:
        '200':
          description: >-
            Connector created. For `oauth2`, also carries `authorize_url` and
            `oauth_state`.
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/connector'
                  - type: object
                    properties:
                      authorize_url:
                        type: string
                        description: >-
                          Send the customer here to authorize. Present only for
                          `oauth2` connectors.
                        example: >-
                          https://mcp.linear.app/authorize?response_type=code&client_id=...
                      oauth_state:
                        type: string
                        description: >-
                          Opaque state for the in-flight authorization.
                          Single-use.
                        example: wA0meZRQKOwa4wHxcN27xt3eYfII0hLs
        '400':
          description: Invalid request body
        '502':
          description: OAuth discovery or client registration against the MCP server failed
components:
  schemas:
    connector:
      type: object
      description: >-
        An MCP server you have registered. Secret material is never returned:
        `auth_config` comes back with its `type` and non-secret fields only, and
        OAuth tokens are omitted entirely.
      example:
        connector_id: c8-58ea0f6420b2
        owner_id: 4309
        team_id: null
        name: Linear
        source: mcp
        server_url: https://mcp.linear.app/mcp
        auth_config:
          type: oauth2
        selected_tool_names: null
        oauth_status: linked
        oauth_scopes:
          - read
          - write
        access_token_expires_at: '2026-08-18T09:14:00'
        last_indexed_at: '2026-08-17T18:20:11'
        last_index_error: null
        created_at: '2026-08-17T18:02:56.838918'
        updated_at: '2026-08-17T18:20:11.563911'
      properties:
        connector_id:
          type: string
          description: >-
            The unique identifier of the connector. Use this everywhere a
            connector is referenced, including `layers.mcp.connectors` on a PAL.
          example: c8-58ea0f6420b2
        owner_id:
          type: integer
          description: The account that owns the connector.
          example: 4309
        team_id:
          type: integer
          nullable: true
          description: Team the connector belongs to, when applicable.
          example: null
        name:
          type: string
          description: >-
            Human-readable name. Also the basis of the label the background
            agent sees for this service.
          example: Linear
        source:
          type: string
          description: Connector kind. `mcp` today.
          example: mcp
        server_url:
          type: string
          description: The MCP server endpoint.
          example: https://mcp.linear.app/mcp
        auth_config:
          type: object
          description: >-
            How Tavus authenticates to the server, with secrets removed. See the
            create request for the accepted shapes.
          example:
            type: oauth2
        selected_tool_names:
          type: array
          nullable: true
          deprecated: true
          description: >-
            Always `null` on connectors created today, and not settable: the
            create and update endpoints reject the field. A leftover from the
            removed tool importer - tool scoping is a per-PAL decision, so use
            `layers.mcp.connector_tools`.
          items:
            type: string
          example: null
        oauth_status:
          type: string
          description: >-
            `none` for non-OAuth connectors. `pending` once an authorize URL has
            been issued but the flow is not finished. `linked` when Tavus holds
            a working token. `needs_reauth` when the refresh token stopped
            working - send the customer through [Reconnect
            OAuth](/api-reference/connectors/reconnect-connector-oauth).
          enum:
            - none
            - pending
            - linked
            - needs_reauth
          example: linked
        oauth_scopes:
          type: array
          nullable: true
          description: Scopes granted by the authorization server.
          items:
            type: string
          example:
            - read
            - write
        access_token_expires_at:
          type: string
          nullable: true
          description: >-
            When the current access token expires. Tavus refreshes it
            automatically while the connector stays `linked`.
          example: '2026-08-18T09:14:00'
        last_indexed_at:
          type: string
          nullable: true
          description: >-
            When tools were last imported from the server. `null` if never
            indexed.
          example: '2026-08-17T18:20:11'
        last_index_error:
          type: string
          nullable: true
          description: Why the last import failed, if it did.
          example: null
        created_at:
          type: string
          example: '2026-08-17T18:02:56.838918'
        updated_at:
          type: string
          example: '2026-08-17T18:20:11.563911'
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: x-api-key

````