/ Directory / Playground / mcp-youtube-transcript
● Community jkawamoto ⚡ Instant

mcp-youtube-transcript

by jkawamoto · jkawamoto/mcp-youtube-transcript

Pull transcripts (with timestamps), metadata, and language lists from any YouTube video — so Claude can summarize, quote, or timestamp an hour of video in seconds.

mcp-youtube-transcript exposes 4 tools to get raw transcripts, timed transcripts, video metadata, and available languages. Long transcripts auto-paginate at 50k chars. Supports Webshare / custom HTTP proxies when YouTube rate-limits or blocks your IP.

Why use it

Key features

Live Demo

What it looks like in practice

youtube-transcript.replay ▶ ready
0/0

Install

Pick your client

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "youtube-transcript": {
      "command": "uvx",
      "args": [
        "mcp-youtube-transcript"
      ],
      "_inferred": true
    }
  }
}

Open Claude Desktop → Settings → Developer → Edit Config. Restart after saving.

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "youtube-transcript": {
      "command": "uvx",
      "args": [
        "mcp-youtube-transcript"
      ],
      "_inferred": true
    }
  }
}

Cursor uses the same mcpServers schema as Claude Desktop. Project config wins over global.

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "youtube-transcript": {
      "command": "uvx",
      "args": [
        "mcp-youtube-transcript"
      ],
      "_inferred": true
    }
  }
}

Click the MCP Servers icon in the Cline sidebar, then "Edit Configuration".

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "youtube-transcript": {
      "command": "uvx",
      "args": [
        "mcp-youtube-transcript"
      ],
      "_inferred": true
    }
  }
}

Same shape as Claude Desktop. Restart Windsurf to pick up changes.

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "youtube-transcript",
      "command": "uvx",
      "args": [
        "mcp-youtube-transcript"
      ]
    }
  ]
}

Continue uses an array of server objects rather than a map.

~/.config/zed/settings.json
{
  "context_servers": {
    "youtube-transcript": {
      "command": {
        "path": "uvx",
        "args": [
          "mcp-youtube-transcript"
        ]
      }
    }
  }
}

Add to context_servers. Zed hot-reloads on save.

claude mcp add youtube-transcript -- uvx mcp-youtube-transcript

One-liner. Verify with claude mcp list. Remove with claude mcp remove.

Use Cases

Real-world ways to use mcp-youtube-transcript

Turn a 60-minute YouTube talk into a 10-bullet summary with timestamps

👤 Researchers, content marketers, students ⏱ ~10 min beginner

When to use: You can't watch the full video but need the key points (and to cite them with timestamps).

Flow
  1. Fetch timed transcript
    Get timed transcript for https://www.youtube.com/watch?v=VIDEO_ID.✓ Copied
    → Transcript with [MM:SS] markers
  2. Summarize with citations
    Give me 10 bullets summarizing the main argument. Each bullet should end with a [MM:SS] pointer to where it's made in the video.✓ Copied
    → Bulleted summary with clickable-style timestamps

Outcome: Digestible summary you can share with a team Slack in 2 minutes.

Pitfalls
  • Auto-generated captions have errors on technical terms — For accuracy-critical quotes, verify against the actual video at the timestamp
Combine with: notion

Index a YouTube podcast's back catalog for semantic search

👤 Podcast fans, researchers following a specific show ⏱ ~45 min intermediate

When to use: You want to ask 'which episode did they talk about X?' across 100+ episodes.

Flow
  1. List episode URLs
    Here's the playlist URL. Get the 50 most recent video IDs.✓ Copied
    → Video ID list
  2. Fetch + index
    For each video, get_transcript and get_video_info (title, date). Ingest into local-rag as one doc per episode.✓ Copied
    → Indexed corpus
  3. Query
    In which episodes did the hosts discuss 'ring attention'? Give episode number and timestamp.✓ Copied
    → Hits with episode metadata

Outcome: A searchable podcast library you own and control.

Pitfalls
  • Some videos have no captions — get_available_languages first; skip if empty
Combine with: local-rag

Translate a talk from one language to another

👤 Non-English speakers, content localizers ⏱ ~10 min beginner

When to use: You want to read a Spanish talk in English without running ML translation yourself.

Flow
  1. Grab original language transcript
    get_available_languages for this URL. Use Spanish if available.✓ Copied
    → Spanish transcript
  2. Translate
    Translate this transcript to English, preserving paragraph breaks.✓ Copied
    → English text

Outcome: Read-worthy translated transcript.

Pitfalls
  • Tonal / idiomatic content translates awkwardly — For commercial localization, have a human pass

Combinations

Pair with other MCPs for X10 leverage

youtube-transcript + local-rag

Ingest a channel's transcripts into a searchable local index

For each video in this playlist, get transcript + metadata, then ingest_data into local-rag with source URL.✓ Copied
youtube-transcript + notion

Publish video summaries to a Notion knowledge DB

Summarize this talk and create a Notion page in 'Talks' with title, channel, date, and summary.✓ Copied

Tools

What this MCP exposes

ToolInputsWhen to callCost
get_transcript url_or_id: str, language?: str You want text only, no timestamps free
get_timed_transcript url_or_id, language? You need timestamps for citations or chapter generation free
get_video_info url_or_id Metadata for context / indexing free
get_available_languages url_or_id Check caption availability before attempting fetch free

Cost & Limits

What this costs to run

API quota
YouTube doesn't officially expose transcripts — expect IP rate limits
Tokens per call
Transcripts 1k-50k tokens depending on length; paginated at 50k by default
Monetary
Free; proxies (Webshare) cost a few $/mo if you need them
Tip
Transcripts are often huge. Truncate via --response-limit or just ask for a specific time range.

Security

Permissions, secrets, blast radius

Credential storage: Proxy credentials if you use Webshare — env var
Data egress: Outbound to youtube.com (possibly via proxy)

Troubleshooting

Common errors and fixes

HTTP 429 Too Many Requests

Your IP is rate-limited by YouTube. Configure Webshare proxy via env vars or wait 30-60 minutes.

Verify: Try the same URL from another IP
No transcript available

Video has no captions. Call get_available_languages first; if empty, skip.

Age-restricted / region-locked video

Not supported by this MCP. No workaround — use official YouTube Data API with auth.

Python install issues (uvx)

Install uv first: curl -LsSf https://astral.sh/uv/install.sh | sh. Requires Python 3.10+.

Verify: uv --version

Alternatives

mcp-youtube-transcript vs others

AlternativeWhen to use it insteadTradeoff
YouTube Data API + official MCP wrapperYou need official, authenticated accessRequires Google API key; quota limits; doesn't directly give transcript text
yt-dlp MCPYou also want video/audio download, not just transcriptsHeavier; downloads media files

More

Resources

📖 Read the official README on GitHub

🐙 Browse open issues

🔍 Browse all 400+ MCP servers and Skills