Fetch YouTube transcripts + metadata by video, search, channel, or playlist as clean JSON.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste into ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows)
Official, typed Python client for the TranscriptFetch API: fetch transcripts as clean, structured data, plus YouTube channel, playlist and search listings. Sync + async, fully type-hinted.
Transcripts come from YouTube, TikTok, Instagram, podcasts, or a direct media file URL (mp3/mp4/wav and friends). A podcast link (a Spotify or Apple Podcasts episode URL, or an RSS feed URL) is resolved to that episode's audio automatically. Channel, playlist and search are YouTube-only, since no other supported platform has those concepts.
Get an API key (100 free credits) at https://transcriptfetch.com/app. One credit per successful fetch; failed/blocked/no-transcript requests are free.
video and batch take a YouTube, TikTok or Instagram URL, a podcast link (Spotify or Apple Podcasts episode, or an RSS feed), a direct media file URL, or a bare YouTube ID. channel/playlist take a URL, an @handle/PL⦠ID, or a raw ID. IDs and URLs are normalized automatically.
When a source has no captions, the API transcribes its audio and answers with a job instead of a transcript. That comes back as a Transcript with status == "processing" and a job_id; poll it for free until it completes. Podcast audio never has captions, so a podcast always takes this path:
A transcript resolved from a podcast link also carries a podcast block, so the show and episode survive the round trip (otherwise the result would be titled after the mp3 filename):
List endpoints are cursor-paginated. Iterate every result without managing cursors:
Or page manually via page.next_cursor and the cursor= argument.
All errors subclass TranscriptFetchError. API errors carry .status, .code, .message, and .request_id:
429 (honoring Retry-After) and 5xx, with exponential backoff + jitter (max_retries=2 by default).Idempotency-Key so a retried request is never double-charged. Override per call with idempotency_key=....TranscriptFetch(api_key=..., base_url=..., timeout=30, max_retries=2). Both clients are context managers and accept a custom http_client= (httpx).Tests are fully mocked (no network). MIT licensed.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/transcriptfetch)<a href="https://allmcps.com/mcp/transcriptfetch"><img src="https://allmcps.com/api/badge/transcriptfetch?style=directory" alt="TranscriptFetch on AllMCPs" /></a>