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

# MCP Server

> Connect TranscriptMagic to Claude, ChatGPT, Cursor, and other AI clients via the Model Context Protocol — no API key, OAuth sign-in.

## Overview

The TranscriptMagic MCP server gives any MCP-compatible AI client a one-click set of tools to fetch video transcripts from YouTube, TikTok, Instagram, Facebook, LinkedIn, Rumble, and X (Twitter), transcribe Spotify and Apple Podcasts episodes — plus check credit balance and recall transcript history.

It is a **remote MCP server over Streamable HTTP** with **OAuth 2.1** authentication. There is no API key to copy — users sign in once with Google when they connect, and the AI client manages its own short-lived token.

<Card title="Server URL" icon="link">
  ```
  https://mcp.transcriptmagic.com/mcp
  ```
</Card>

If you are building a service or batch pipeline (no AI client in the loop), the [REST API](/api-reference/overview) is a better fit. Same backend, same credits.

## When to use MCP vs. the REST API

| Use MCP when                                                      | Use the REST API when                                 |
| ----------------------------------------------------------------- | ----------------------------------------------------- |
| You're inside a chat with Claude, ChatGPT, Cursor, or Claude Code | You're writing a service, agent runtime, or batch job |
| You want zero glue code                                           | You want a predictable JSON contract                  |
| Your users need transcripts ad-hoc, in plain English              | You need per-line YouTube timestamps                  |
| You don't want to manage API keys                                 | You're integrating into a non-AI product              |

## Tools

The server exposes eleven tools.

### Transcribe tools (1 credit each)

<AccordionGroup>
  <Accordion title="transcribe_youtube" icon="youtube">
    Fetch the transcript of a public YouTube video given its URL.

    **Input**

    * `url` (string, required) — full YouTube URL. Accepts `youtube.com/watch?v=…`, `youtu.be/…`, `youtube.com/shorts/…`, and `m.youtube.com` mobile links.

    **Cost** 1 credit per successful call.

    **Notes** Returns plain text. Per-line timestamps are available in the [REST API](/api-reference/youtube) response, not in the MCP text output.
  </Accordion>

  <Accordion title="transcribe_tiktok" icon="tiktok">
    Fetch the transcript of a public TikTok video.

    **Input**

    * `url` (string, required) — full `tiktok.com/@user/video/…` URL or `vm.tiktok.com/…` short link.

    **Cost** 1 credit per successful call.
  </Accordion>

  <Accordion title="transcribe_instagram" icon="instagram">
    Fetch the transcript of a public Instagram video.

    **Input**

    * `url` (string, required) — `instagram.com/reel/…`, `instagram.com/p/…`, or `instagram.com/tv/…`.

    **Cost** 1 credit per successful call.
  </Accordion>

  <Accordion title="transcribe_facebook" icon="facebook">
    Fetch the transcript of a public Facebook video.

    **Input**

    * `url` (string, required) — `facebook.com/watch?v=…`, `fb.watch/…`, `facebook.com/reel/…`, or Live replay URL.

    **Cost** 1 credit per successful call.
  </Accordion>

  <Accordion title="transcribe_linkedin" icon="linkedin">
    Fetch the transcript of a public LinkedIn post with video.

    **Input**

    * `url` (string, required) — `linkedin.com/posts/…` or `linkedin.com/feed/update/…`.

    **Cost** 1 credit per successful call.

    **Notes** Works on public posts only; login-walled or member-private posts can't be fetched.
  </Accordion>

  <Accordion title="transcribe_rumble" icon="video">
    Fetch the transcript of a Rumble video with captions.

    **Input**

    * `url` (string, required) — full `rumble.com/…` video URL.

    **Cost** 1 credit per successful call.

    **Notes** Requires the video to have captions available.
  </Accordion>

  <Accordion title="transcribe_twitter" icon="x-twitter">
    Fetch the transcript of a video posted on X (Twitter).

    **Input**

    * `url` (string, required) — `x.com/…/status/…` or `twitter.com/…/status/…`.

    **Cost** 1 credit per successful call.

    **Notes** Works on video tweets under 2 minutes.
  </Accordion>
</AccordionGroup>

### Podcast tools (Plus & Pro · 10 credits per audio-hour)

<AccordionGroup>
  <Accordion title="transcribe_podcast" icon="podcast">
    Transcribe a Spotify or Apple Podcasts episode. Podcast audio is transcribed with AI speech-to-text (episodes rarely ship captions), so this runs asynchronously: short episodes return the transcript inline, while longer ones return a `job_id` to check with `get_podcast_status`.

    **Input**

    * `url` (string, required) — a Spotify episode (`open.spotify.com/episode/…`) or Apple Podcasts episode (`podcasts.apple.com/…?i=…`) link.

    **Cost** 10 credits per audio-hour, on the Plus and Pro plans. Reserved when the job starts and refunded automatically if it fails.

    **Notes** On the Free plan or a legacy one-time credit pack the tool returns an upgrade prompt.
  </Accordion>

  <Accordion title="get_podcast_status" icon="rotate">
    Check a podcast job started by `transcribe_podcast` and return the transcript once it's ready.

    **Input**

    * `job_id` (string, required) — the id returned by `transcribe_podcast` for a longer episode.

    **Cost** Free to poll; the transcription itself is billed by `transcribe_podcast`.
  </Accordion>
</AccordionGroup>

### Utility tools (free)

<AccordionGroup>
  <Accordion title="get_credit_balance" icon="coins">
    Returns the signed-in user's remaining transcript credits and current plan.

    **Input** none.

    **Cost** Free; does not consume credits.
  </Accordion>

  <Accordion title="list_recent_transcripts" icon="clock-rotate-left">
    Lists the user's recently saved transcripts (most recent first). Useful when the AI wants to recall something the user already fetched.

    **Input**

    * `limit` (integer, 1–50, optional, default 10) — max number of transcripts to return.
    * `platform` (`youtube` | `tiktok` | `instagram` | `facebook` | `linkedin` | `rumble` | `twitter`, optional) — filter to a single platform.

    **Cost** Free; does not consume credits. Each item includes the video URL, platform, title, and a short text preview.
  </Accordion>
</AccordionGroup>

## Setup by client

<Tabs>
  <Tab title="Claude Desktop">
    1. Open Claude Desktop → **Settings** → **Connectors**.
    2. Click **Add custom connector**.
    3. Paste the server URL: `https://mcp.transcriptmagic.com/mcp`.
    4. A browser tab opens — sign in with Google and click **Approve**.
    5. The tools become available in every chat. Try: *"Summarize this YouTube video: \<url>"*.
  </Tab>

  <Tab title="Claude.ai">
    1. Open [claude.ai/settings/connectors](https://claude.ai/settings/connectors).
    2. Click **Add custom connector**.
    3. Paste the server URL: `https://mcp.transcriptmagic.com/mcp`.
    4. Sign in with Google in the popup, then click **Approve**.
  </Tab>

  <Tab title="ChatGPT">
    1. Open ChatGPT → **Settings** → **Connectors** → **Add**.
    2. Paste the server URL and follow the OAuth prompt.
    3. Available in any chat with deep research enabled.
  </Tab>

  <Tab title="Cursor">
    Open **Settings** → **MCP** → **Add new MCP server** and paste:

    ```json theme={null}
    {
      "mcpServers": {
        "TranscriptMagic": {
          "url": "https://mcp.transcriptmagic.com/mcp"
        }
      }
    }
    ```
  </Tab>

  <Tab title="Claude Code">
    In your terminal:

    ```bash theme={null}
    claude mcp add --transport http TranscriptMagic https://mcp.transcriptmagic.com/mcp
    ```

    Claude Code will open a browser tab for OAuth the first time you use a tool.
  </Tab>
</Tabs>

You can also manage connections from the [dashboard MCP page](https://transcriptmagic.com/dashboard/mcp) — view connected clients and revoke them.

## Authentication

The server implements OAuth 2.1 (RFC 8414 + dynamic client registration). The flow looks like this:

1. The MCP client requests the server's authorization metadata.
2. It registers itself dynamically and redirects the user to TranscriptMagic's consent screen.
3. The user signs in with Google and approves access.
4. The server issues an access token scoped to the client; the user's TranscriptMagic account, credits, and history are linked.

Tokens are short-lived; clients refresh them automatically. There is nothing for end users to copy or paste.

## Errors

The MCP server returns errors as `isError: true` content blocks the AI can read directly. Common cases:

* **Out of credits** — *"Out of credits. Top up or upgrade at transcriptmagic.com/dashboard/account."*
* **Invalid URL** — the URL didn't match the platform's expected format.
* **No transcript available** — public video, but no spoken audio or captions.
* **Private / login-walled** — the video can't be fetched without sign-in.

The AI will typically retry or ask the user for a different URL on its own.

## Pricing

Free credits are included on signup. After that, **1 credit per successful `transcribe_*` call**. Podcast transcription (`transcribe_podcast`) is a **Plus/Pro** feature billed at **10 credits per audio-hour**. Utility tools (`get_credit_balance`, `list_recent_transcripts`, `get_podcast_status`) are free.

See the [pricing page](https://transcriptmagic.com/credits) for plan details.

## Related

<CardGroup cols={2}>
  <Card title="REST API" icon="code" href="/api-reference/overview">
    Fully documented REST endpoints for non-MCP integrations.
  </Card>

  <Card title="Authentication" icon="key" href="/authentication">
    Bearer-token auth for the REST API (separate from MCP OAuth).
  </Card>

  <Card title="Errors" icon="triangle-exclamation" href="/concepts/errors">
    Status codes and retry strategy for the REST API.
  </Card>

  <Card title="Rate limits" icon="gauge" href="/concepts/rate-limits">
    120 req/min on the REST API. MCP is rate-limited only by your credit balance.
  </Card>
</CardGroup>
