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

# Use AssemblyAI in AI apps with the MCP server

> Connect Claude, Cursor or any MCP client to your AssemblyAI account so it can transcribe, summarize and analyze audio for you.

The AssemblyAI MCP server lets Claude, Cursor and other AI apps call the AssemblyAI API on your account. Connect it once, then ask: "transcribe this call and list the action items."

It is not the [docs MCP server](https://assemblyai.com/docs/coding-agent-prompts.md#docs-mcp-server). That one only searches our docs, so a coding agent writes correct code. This one does the work.

| | AssemblyAI MCP server | Docs MCP server |
| - | - | - |
| Endpoint | `https://mcp.assemblyai.com/mcp` | `https://assemblyai.com/docs/mcp` |
| What it does | Transcribes, summarizes and analyzes audio | Searches and reads the docs |
| Sign-in | Your AssemblyAI account or API key | None |
| Cost | Usage is billed to your account, at your normal API rates | Free |

## Connect

The endpoint is `https://mcp.assemblyai.com/mcp` (Streamable HTTP). You can sign in with your AssemblyAI account, or send an API key.

> [tab] Claude Code
>
> Sign in with your AssemblyAI account:
>
> ```bash theme={null}
> claude mcp add --transport http assemblyai https://mcp.assemblyai.com/mcp
> ```
>
> Then run `/mcp` in Claude Code, select `assemblyai` and select **Authenticate**. Your browser opens the AssemblyAI sign-in and consent page.
>
> Or use an API key:
>
> ```bash theme={null}
> claude mcp add --transport http assemblyai https://mcp.assemblyai.com/mcp \
>   --header "Authorization: Bearer $ASSEMBLYAI_API_KEY"
> ```

> [tab] Claude.ai
>
> 1. Go to **Customize** > **Connectors**, select **+ Add**, then **Add custom connector**.
> 2. Enter the name `AssemblyAI` and the URL `https://mcp.assemblyai.com/mcp`, then select **Add**.
> 3. Sign in to AssemblyAI and allow access.
>
> On Team and Enterprise plans, an owner adds the connector in **Organization settings** > **Connectors** first. Members then select **Connect**. See [custom connectors](https://support.claude.com/en/articles/11175166-get-started-with-custom-connectors-using-remote-mcp).

> [tab] Cursor
>
> Add the server to `.cursor/mcp.json` (one project) or `~/.cursor/mcp.json` (all projects):
>
> ```json theme={null}
> {
>   "mcpServers": {
>     "assemblyai": {
>       "url": "https://mcp.assemblyai.com/mcp"
>     }
>   }
> }
> ```
>
> Cursor asks you to sign in to AssemblyAI the first time it connects. To use an API key, add `"headers": { "Authorization": "Bearer <your-api-key>" }`.

> [tab] Other clients
>
> Any MCP client that supports [Streamable HTTP](https://modelcontextprotocol.io/specification/2025-03-26/basic/transports#streamable-http) can connect.
>
> * **Clients that support MCP authorization:** add the URL with no headers. The client opens the AssemblyAI sign-in page.
> * **All other clients:** send your API key as a Bearer token:
>
> ```json theme={null}
> {
>   "mcpServers": {
>     "assemblyai": {
>       "url": "https://mcp.assemblyai.com/mcp",
>       "headers": { "Authorization": "Bearer <your-api-key>" }
>     }
>   }
> }
> ```

> [!NOTE]
>
> Include the `Bearer ` prefix. The REST API takes the raw key, but the MCP server returns `401` without the prefix.

Get an API key from the [dashboard](https://www.assemblyai.com/dashboard/api-keys). To stop an app that signed in, revoke its connection in the dashboard. It stops working within a few minutes.

## Try it

After you connect, ask the app:

```text theme={null}
Transcribe https://assembly.ai/wildfires.mp3 with speaker labels, then summarize it in five bullets.
```

The app submits the file, waits for the transcript, then returns the summary.

## Tools

| Tool | What it does |
| - | - |
| `submit_transcript` | Starts a transcription of a public audio or video URL and returns a `transcript_id`. Accepts the same options as [Submit a transcript](https://assemblyai.com/docs/pre-recorded-audio/api-reference/transcripts/submit.md), for example `speaker_labels`, `language_detection`, `redact_pii` and `speech_understanding`. |
| `get_transcript` | Returns the status of a transcript, and the full results when the status is `completed`. |
| `summarize_transcript` | Summarizes a completed transcript with [LLM Gateway](https://assemblyai.com/docs/llm-gateway/quickstart.md). Styles: `bullets` (default), `paragraph`, `headline`, `action_items`, or `custom` with your own prompt. |
| `understand_transcript` | Runs [Speech Understanding](https://assemblyai.com/docs/speech-understanding/getting-started.md) on a completed transcript (translation, speaker identification, custom formatting, summarization, action items) without sending the audio again. |
| `delete_transcript` | Permanently deletes a transcript and its data. Apps should only call it when you ask. |

> [!TIP]
>
> If you know what you need before you transcribe, ask for it in the same request ("transcribe and translate to Spanish"). The app then sends the Speech Understanding options with `submit_transcript`, and you get one result.

## Limits

* **Audio must be at a public URL.** The server can't read files on your computer. Upload the file somewhere the API can download it, or use the [upload endpoint](https://assemblyai.com/docs/pre-recorded-audio/api-reference/files/upload.md) and give the app the `upload_url`.
* **Transcription is asynchronous.** The app polls `get_transcript` until the transcript is ready. Long files take longer.
* **Your account limits apply.** The server uses your account, so your [rate limits](https://assemblyai.com/docs/pre-recorded-audio/rate-limits.md) apply to every call.
