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

# Connect to Audalis MCP

> Add Audalis to Claude, ChatGPT, Claude Code, Cursor, or any client that supports remote MCP servers.

Audalis MCP is a hosted remote server. There's no package to install, no local process to run, and no API key to create.

## Server URL

```text theme={null}
https://api.audalis.io/mcp
```

Use the full URL, including `/mcp`. The server uses the **Streamable HTTP** transport and accepts `POST` requests only.

<Info>
  **Before you start:** you need to be an **owner** or **admin** of the Audalis workspace you want to connect. If you belong to more than one workspace, switch to the right one in Audalis first. The connection goes to the workspace you're signed in to.
</Info>

## Add it to your assistant

<Tabs>
  <Tab title="Claude">
    <Steps>
      <Step title="Open connector settings">
        In Claude, go to **Settings** > **Connectors** and click **Add custom connector**.
      </Step>

      <Step title="Add the server">
        Name it `Audalis` and paste `https://api.audalis.io/mcp` as the URL. Click **Add**.
      </Step>

      <Step title="Connect and allow access">
        Click **Connect**. Sign in to Audalis, confirm the workspace and app name, and click **Allow**.
      </Step>
    </Steps>

    Custom connectors depend on your Claude plan, and on your organization's admin settings if you use a Team or Enterprise plan.
  </Tab>

  <Tab title="ChatGPT">
    <Steps>
      <Step title="Open connector settings">
        In ChatGPT, open **Settings** and find the option to add a custom connector. On some plans you need to turn on developer mode first.
      </Step>

      <Step title="Add the server">
        Paste `https://api.audalis.io/mcp` as the server URL and choose **OAuth** for authentication.
      </Step>

      <Step title="Connect and allow access">
        Sign in to Audalis, confirm the workspace and app name, and click **Allow**.
      </Step>
    </Steps>

    Custom connectors depend on your ChatGPT plan, and on your workspace admin's settings.
  </Tab>

  <Tab title="Claude Code">
    Add the server:

    ```bash theme={null}
    claude mcp add --transport http audalis https://api.audalis.io/mcp
    ```

    Then run `/mcp` inside Claude Code, select **audalis**, and choose **Authenticate**. Your browser opens Audalis to sign in.
  </Tab>

  <Tab title="Cursor and others">
    Most clients accept a config like this:

    ```json theme={null}
    {
      "mcpServers": {
        "audalis": {
          "url": "https://api.audalis.io/mcp"
        }
      }
    }
    ```

    Property names vary. Some clients use `serverUrl` instead of `url`, some want `"type": "http"`, and some give you a form where you paste only the URL. Follow your client's instructions for adding a **remote Streamable HTTP** server.

    After you save, the client should open your browser to sign in. If it doesn't, look for an **Authenticate**, **Connect**, or **Sign in** action in its MCP settings.
  </Tab>
</Tabs>

## What you'll see when you sign in

The Audalis consent screen shows:

* **The app's name.** Apps name themselves when they register, so Audalis hasn't verified this name.
* **The workspace** the app will read.
* **What it can do:** read calls, bookings, contacts, and tasks. It can't send messages, place calls, or change anything.
* **Where you'll be sent back to.** Only click **Allow** if you started the connection from that app.

## Disconnect

In Audalis, go to **Settings** > **Connected apps** and click **Disconnect** next to the app. The app loses access on its very next request.

**Connected apps** lists only the apps *you* connected. Another admin's connections appear on their account, so they disconnect their own.

You can also remove Audalis in your assistant's connector settings. That stops the assistant from using it, but the connection can stay listed in Audalis. Disconnect it there too, to be sure access is revoked.

## Troubleshooting

<AccordionGroup>
  <Accordion title="Connected apps are not enabled for this workspace">
    Connected apps are turned on per workspace. Email [support@audalis.co](mailto:support@audalis.co) and we'll enable them.
  </Accordion>

  <Accordion title="Only workspace owners and admins can use connected apps">
    Your role in this workspace is too low to connect apps, or it was lowered after you connected. Ask an owner or admin to connect, or to change your role.
  </Accordion>

  <Accordion title="The workspace subscription is awaiting payment">
    Finish setting up billing in **Settings** > **Plan & Billing**, then try again.
  </Accordion>

  <Accordion title="The wrong workspace is connected">
    Disconnect the app in **Settings** > **Connected apps**. In Audalis, switch to the workspace you want, then connect again from your assistant.
  </Accordion>

  <Accordion title="The client never opens a sign-in window">
    Check that your client supports OAuth for remote MCP servers, then look for an **Authenticate** or **Connect** action in its MCP settings. Clients that only support local (stdio) servers can't connect to a hosted server.
  </Accordion>

  <Accordion title="It worked before, but now it asks me to sign in again">
    Connections that go unused for 30 days expire. Connections also stop if you disconnect the app, or if your role drops below admin. Connect again from your assistant.
  </Accordion>

  <Accordion title="Rate limit exceeded">
    Each connection can make 60 requests a minute, and each workspace 240 a minute across all its connected apps. Wait a minute and try again.
  </Accordion>

  <Accordion title="The client gets a 405 error">
    The server accepts only `POST /mcp`. It's stateless and has no SSE stream, so `GET` and `DELETE` return `405`. Configure your client for Streamable HTTP, not the older SSE transport.
  </Accordion>
</AccordionGroup>

## For developers building an MCP client

Audalis uses **OAuth 2.1 authorization code with PKCE (S256 only)** and supports **dynamic client registration** (RFC 7591), so you don't need to ask us for a client ID.

<Steps>
  <Step title="Discover">
    Send an unauthenticated request to `https://api.audalis.io/mcp`. The `401` response includes a `WWW-Authenticate` header that points to the protected resource metadata (RFC 9728). That document names the authorization server.
  </Step>

  <Step title="Register">
    `POST` to the `registration_endpoint` from the authorization server metadata. Public clients can register with `token_endpoint_auth_method: "none"`. Save the returned `client_id` and reuse it.
  </Step>

  <Step title="Authorize">
    Open the `authorization_endpoint` with `response_type=code`, your registered `redirect_uri`, `state`, an S256 `code_challenge`, the scopes `audalis.read offline_access`, and `resource=https://api.audalis.io/mcp`.
  </Step>

  <Step title="Exchange and refresh">
    Exchange the code at the `token_endpoint` with the original `code_verifier`. Access tokens last **1 hour**. Refresh tokens last **30 days** and **rotate on every use**: save the new one every time. Reusing an old refresh token revokes the whole grant, and the user has to authorize again.
  </Step>

  <Step title="Call the server">
    Send `Authorization: Bearer <access_token>` on every `POST /mcp`. Responses are JSON, not SSE.
  </Step>
</Steps>

### Endpoints

| Purpose | URL |
| - | - |
| MCP server | `https://api.audalis.io/mcp` |
| Protected resource metadata | `https://api.audalis.io/.well-known/oauth-protected-resource/mcp` |
| Authorization server metadata | `https://app.audalis.co/api/auth/.well-known/oauth-authorization-server` |
| Dynamic client registration | `https://app.audalis.co/api/auth/oauth2/register` |
| Authorization | `https://app.audalis.co/api/auth/oauth2/authorize` |
| Token (code exchange and refresh) | `https://app.audalis.co/api/auth/oauth2/token` |
| Revocation | `https://app.audalis.co/api/auth/oauth2/revoke` |

Read these from the discovery metadata rather than hard-coding them. The metadata is the source of truth if anything changes.

| Setting | Value |
| - | - |
| Scopes | `audalis.read`, `offline_access` |
| Grant types | `authorization_code`, `refresh_token` |
| PKCE | `S256` only |
| Token type | Opaque bearer tokens, checked on every request |

### Errors

Auth failures return `401` or `403` with a `WWW-Authenticate` header and a JSON-RPC error body:

| Status | `error` | Meaning |
| - | - | - |
| `401` | `invalid_token` | Missing, expired, or revoked token. Refresh it, or ask the user to authorize again. |
| `403` | `access_denied` | The user isn't an owner or admin, connected apps aren't enabled for the workspace, or its subscription is awaiting payment. |
| `429` | — | Rate limited. Wait for the `Retry-After` header (60 seconds). |


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