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-mcpThe 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.
https://api.transcriptapi.io/mcp/ta_your_key
https://api.transcriptapi.io/mcp/ta_your_key
https://api.transcriptapi.io/mcp/ta_your_key
claude mcp add --transport http transcriptapi \ https://api.transcriptapi.io/mcp \ --header "Authorization: Bearer ta_your_key"
{
"mcpServers": {
"transcriptapi": {
"url": "https://api.transcriptapi.io/mcp",
"headers": { "Authorization": "Bearer ta_your_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.
Sign in with Google or an email address. Your key starts with ta_ and comes with 20 free credits, no card.
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.
Restart the client and ask: “Summarize this video” with a YouTube URL. The assistant picks the tool, you read the answer.
{
"mcpServers": {
"transcriptapi": {
"command": "npx",
"args": ["-y", "transcriptapi-mcp"],
"env": { "TRANSCRIPTAPI_KEY": "ta_your_key" }
}
}
}claude mcp add transcriptapi \ -e TRANSCRIPTAPI_KEY=ta_your_key \ -- npx -y transcriptapi-mcp
{
"mcpServers": {
"transcriptapi": {
"command": "npx",
"args": ["-y", "transcriptapi-mcp"],
"env": { "TRANSCRIPTAPI_KEY": "ta_your_key" }
}
}
}▸ Install in Cursorthen replace ta_your_key with yours
{
"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
{
"mcpServers": {
"transcriptapi": {
"command": "npx",
"args": ["-y", "transcriptapi-mcp"],
"env": { "TRANSCRIPTAPI_KEY": "ta_your_key" }
}
}
}TRANSCRIPTAPI_KEY=ta_your_key npx -y transcriptapi-mcp
Open Claude, ChatGPT or Grok with the setup context already loaded and ask it to configure the server for your client.
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.
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.
| Tool | What it does | Credits |
|---|---|---|
get_youtube_transcript | The 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_youtube | Search YouTube by keyword. Returns ids, titles, channel, duration and views, ready to hand to the transcript tool. | 1 |
get_channel_videos | The latest uploads of a channel, newest first. Takes a channel id, an @handle or the channel URL. | 1 |
search_channel_videos | Keyword search inside one channel — "find the video where they talk about X". | 1 |
get_playlist_videos | Every video in a playlist, in order, from a playlist URL or id. | 1 |
summarize_youtube_video | A 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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.