MCP server · npm · MIT

YouTube Transcript MCP Server

Let claude.ai, ChatGPT, Claude Code, Cursor, VS Code or any AI agent read any YouTube video. A hosted endpoint you paste as a URL, or one command to run it locally — same five tools: transcript, search, channel, channel search and playlist.

$npx -y transcriptapi-mcp
5 tools + 1 promptNode 18+Hosted + localNo key in the browserRefunds on failed videos

Hosted — paste a URL, nothing to install

The same server runs at api.transcriptapi.io/mcp over Streamable HTTP. Put your key in the URL for clients that cannot send headers (claude.ai, ChatGPT), or send it as a Bearer header from clients that can. No OAuth dance, no local Node.

hosted endpoint
https://api.transcriptapi.io/mcp/ta_your_key

claude.ai

Settings → Connectors → Add custom connector → paste the URL, no OAuth
connector url
https://api.transcriptapi.io/mcp/ta_your_key

ChatGPT

Settings → Connectors → Advanced → Developer mode → Create · Authentication: none
mcp server url
https://api.transcriptapi.io/mcp/ta_your_key

Claude Code (hosted)

One command — the key goes in a header, the URL stays clean
terminal
claude mcp add --transport http transcriptapi \
  https://api.transcriptapi.io/mcp \
  --header "Authorization: Bearer ta_your_key"

Cursor / VS Code / Windsurf (hosted)

Same config files as below, with url + headers instead of command
mcp.json
{
  "mcpServers": {
    "transcriptapi": {
      "url": "https://api.transcriptapi.io/mcp",
      "headers": { "Authorization": "Bearer ta_your_key" }
    }
  }
}
The URL is the key

/mcp/ta_… is your API key. Treat the URL like a password: paste it into your own connector settings, do not share it, and rotate it from the dashboard if it leaks. Our access logs record the path as /mcp, never the key.

Local — run it with npx

01

Get a key

Sign in with Google or an email address. Your key starts with ta_ and comes with 20 free credits, no card.

02

Add the server

Paste the config for your client below. npx fetches the package on first start, so there is nothing to install by hand. Prefer the hosted URL above if you would rather not run Node.

03

Paste a link

Restart the client and ask: “Summarize this video” with a YouTube URL. The assistant picks the tool, you read the answer.

Claude Desktop

Settings → Developer → Edit Config → claude_desktop_config.json
claude_desktop_config.json
{
  "mcpServers": {
    "transcriptapi": {
      "command": "npx",
      "args": ["-y", "transcriptapi-mcp"],
      "env": { "TRANSCRIPTAPI_KEY": "ta_your_key" }
    }
  }
}

Claude Code

One command in the terminal, then restart the session
terminal
claude mcp add transcriptapi \
  -e TRANSCRIPTAPI_KEY=ta_your_key \
  -- npx -y transcriptapi-mcp

Cursor

.cursor/mcp.json in the project, or ~/.cursor/mcp.json for every project
.cursor/mcp.json
{
  "mcpServers": {
    "transcriptapi": {
      "command": "npx",
      "args": ["-y", "transcriptapi-mcp"],
      "env": { "TRANSCRIPTAPI_KEY": "ta_your_key" }
    }
  }
}

Install in Cursorthen replace ta_your_key with yours

VS Code (Copilot agent mode)

.vscode/mcp.json — note the key is servers, not mcpServers
.vscode/mcp.json
{
  "servers": {
    "transcriptapi": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "transcriptapi-mcp"],
      "env": { "TRANSCRIPTAPI_KEY": "ta_your_key" }
    }
  }
}

Install in VS Codethen replace ta_your_key with yours

Windsurf

~/.codeium/windsurf/mcp_config.json
mcp_config.json
{
  "mcpServers": {
    "transcriptapi": {
      "command": "npx",
      "args": ["-y", "transcriptapi-mcp"],
      "env": { "TRANSCRIPTAPI_KEY": "ta_your_key" }
    }
  }
}

Any other MCP client

Zed, Cline, Continue, Goose, LibreChat, your own agent — it is a standard stdio server
shell
TRANSCRIPTAPI_KEY=ta_your_key npx -y transcriptapi-mcp

Let your assistant set it up

Open Claude, ChatGPT or Grok with the setup context already loaded and ask it to configure the server for your client.

Prefer a pinned version?

Replace transcriptapi-mcp with transcriptapi-mcp@0.1.0 in the args, or install it globally with npm i -g transcriptapi-mcp and use "command": "transcriptapi-mcp" with no args.

The tools your assistant gets

Every tool accepts what a person would paste — a full URL with tracking parameters, a Shorts link, an @handle — and extracts the id itself, so the model never has to. All five are read-only and safe to auto-approve.

ToolWhat it doesCredits
get_youtube_transcriptThe transcript of a video as timestamped text (default), plain text, SRT, VTT or raw JSON segments. Accepts a watch URL, youtu.be link, Shorts link or bare id. Optional AI translation into any language.1 · cached repeat 0
search_youtubeSearch YouTube by keyword. Returns ids, titles, channel, duration and views, ready to hand to the transcript tool.1
get_channel_videosThe latest uploads of a channel, newest first. Takes a channel id, an @handle or the channel URL.1
search_channel_videosKeyword search inside one channel — "find the video where they talk about X".1
get_playlist_videosEvery video in a playlist, in order, from a playlist URL or id.1
summarize_youtube_videoA prompt, not a tool: fetches the transcript and asks for a TL;DR, timestamped key points and every concrete number or name mentioned. Optional focus argument.1 via the tool

Translation on the transcript tool adds one credit per 40 caption segments, minimum two. Anything YouTube refuses — captions off, private, deleted, age-restricted — comes back as a plain-English error with retryable: false, and the credit is returned. Full pricing is on the pricing table; the REST endpoints behind each tool are in the API reference.

Things to ask once it is connected

  • Summarize https://youtu.be/dQw4w9WgXcQ in five bullets, with the timestamp where each point is made.get_youtube_transcript → summary with [m:ss] citations
  • What does this talk say about pricing? Quote it exactly.get_youtube_transcript → verbatim quotes, not paraphrase
  • Find the three most-watched Veritasium videos about entropy and tell me which one to watch first.search_channel_videos → three transcripts → a recommendation
  • List the last ten uploads of @lexfridman and pull the transcript of the newest one.get_channel_videos → get_youtube_transcript
  • Turn this video into a German SRT file.get_youtube_transcript with translate_to: de, format: srt
  • Go through this playlist and build me a study guide with one paragraph per video.get_playlist_videos → one transcript per video → guide

The transcript tool returns the text in 30-second blocks, each with one timestamp, so when the assistant cites [12:40] you can open the video at that second and check the claim against what was said.

Why an MCP server instead of letting the model fetch YouTube

Two reasons, and both are YouTube's. The official Data API does not return transcripts at all — it lists caption tracks but only lets the video's owner download them. And the unofficial route, reading the caption track the player uses, is blocked from every datacenter IP range an assistant or a CI runner is likely to have. A model that fetches YouTube itself works on your laptop and fails in production.

This server does none of that. It calls TranscriptAPI, which fetches through residential exits, caches every transcript so a second read is free, and turns YouTube's failures into structured errors the model can act on rather than retry. The server itself is a few hundred lines of TypeScript: parse the link, call the API, shape the response for a language model.

Where the key goes

In your MCP config, in the server process on your machine, and in the Authorization header to api.transcriptapi.io. The server makes no other network calls, writes nothing to disk, and never runs in a browser. Rotate the key from the dashboard whenever you like.

Frequently asked questions

What is a YouTube transcript MCP server?

MCP (Model Context Protocol) is the open standard AI assistants such as Claude, ChatGPT, Cursor and VS Code Copilot use to call external tools. This server exposes YouTube as a set of tools — get a transcript, search, list a channel or a playlist — so the assistant can read a video the moment you paste a link, instead of you copying captions by hand. It runs hosted at api.transcriptapi.io/mcp or locally via npx.

Is it free?

The server is MIT-licensed and free. It talks to TranscriptAPI, which gives every account 20 free credits with no card; one transcript, search or listing costs one credit, and re-reading a cached video costs nothing. Beyond that, 2,500 credits are $10 pay-as-you-go — no subscription.

Does it work with ChatGPT and claude.ai?

Yes. Both take a remote MCP server: in claude.ai add a custom connector under Settings → Connectors, in ChatGPT enable Developer mode under Settings → Connectors and create one with authentication set to none. Paste https://api.transcriptapi.io/mcp/ta_your_key as the URL. Locally-run clients — Claude Desktop, Claude Code, Cursor, VS Code, Windsurf, Zed, Cline, Continue — use either the hosted URL with a Bearer header or the npx package.

Which videos can it read?

Any public video with a caption track, whether the creator uploaded it or YouTube generated it automatically, in whatever languages YouTube has. Videos with captions disabled, private, deleted or age-restricted videos have no track to read — the tool reports that in plain words, marks the failure as not retryable so the assistant does not loop, and the credit is refunded automatically.

Why not have the assistant fetch YouTube directly?

Because YouTube blocks the IP ranges that assistants and CI machines run from, and the YouTube Data API does not return transcripts at all. TranscriptAPI fetches through residential exits, caches every transcript, and turns YouTube's failures into structured errors — the server is a thin, keyless-in-the-browser wrapper around that.

Can it summarize or translate a video?

Summarizing is what your assistant does once it has the transcript; the bundled summarize_youtube_video prompt asks for a TL;DR plus timestamped key points. Translation is an option on the transcript tool (translate_to) and is done by TranscriptAPI before the text reaches the model — it costs one extra credit per 40 caption segments.

Is my API key safe?

Locally, the key lives in your MCP config, in the server process on your machine, and in the Authorization header to api.transcriptapi.io — nowhere else; the server makes no other network calls and stores nothing on disk. Hosted, the key is either a Bearer header or part of the connector URL you paste into claude.ai or ChatGPT; our access logs record the path as /mcp without it. Rotate the key any time from the dashboard.

How long is a transcript for the model?

A one-hour talk is roughly 9,000 words. The default format groups YouTube's three-second caption fragments into 30-second blocks with one timestamp each, which is about a third of the tokens of the raw segments and still precise enough to cite. Choose format: text for the smallest output, or json when you need every segment's start and duration.