MCP Server

YouTube Transcript Downloader

com.youtubetranscriptdownload/transcripts
Media & Content Public & reachable MCP 2025-11-25

What this MCP does

Retrieves and cleans timestamped transcripts from YouTube videos, channels, and playlists.

get_channel_transcripts
Get Channel Transcripts
Get transcripts for a YouTube channel's most recent videos (newest first) as timestamped markdown, one section per video. Use for research across a creator's recent output; for one known video use get_transcript. Read-only; requires an API key. Charges 1 credit per video that returns a transcript, including repeat calls; videos without captions are skipped free. A 10-video call typically costs up to 10 credits, so start with a small limit. Rate limit: 5 requests per 10 seconds.
Read only Open world
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['url'], 'properties': {'url': {'type': 'string', 'description': 'YouTube channel URL or handle (e.g. https://www.youtube.com/@lexfridman or @lexfridman)'}, 'limit': {'type': 'integer', 'default': 10, 'maximum': 50, 'minimum': 1, 'description': 'Number of most-recent videos to fetch, 1-50 (default 10). Upper bound on the credit charge for this call.'}}}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['channel', 'totalVideos', 'succeeded', 'failed', 'transcripts', 'creditsUsed', 'creditsRemaining'], 'properties': {'failed': {'type': 'number', 'description': 'Videos skipped without charge (no captions)'}, 'channel': {'type': 'string', 'description': 'Channel name'}, 'succeeded': {'type': 'number', 'description': 'Videos that returned a transcript (each charged 1 credit)'}, 'creditsUsed': {'type': 'number', 'description': 'Credits charged for this call'}, 'totalVideos': {'type': 'number', 'description': 'Videos attempted in this call'}, 'transcripts': {'type': 'string', 'description': 'All transcripts as timestamped markdown, one section per video, divider-separated'}, 'creditsRemaining': {'type': 'number', 'description': 'Account balance after this call'}}, 'additionalProperties': False}
get_playlist_transcripts
Get Playlist Transcripts
Get transcripts for the videos in a YouTube playlist (in playlist order) as timestamped markdown, one section per video. Use for working through a course, series, or curated list; for one known video use get_transcript. Read-only; requires an API key. Charges 1 credit per video that returns a transcript, including repeat calls; videos without captions are skipped free. A 10-video call typically costs up to 10 credits, so start with a small limit. Rate limit: 5 requests per 10 seconds.
Read only Open world
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['url'], 'properties': {'url': {'type': 'string', 'description': 'YouTube playlist URL (e.g. https://www.youtube.com/playlist?list=PLxxxxxx)'}, 'limit': {'type': 'integer', 'default': 10, 'maximum': 50, 'minimum': 1, 'description': 'Number of videos to fetch from the start of the playlist, 1-50 (default 10). Upper bound on the credit charge for this call.'}}}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['playlist', 'totalVideos', 'succeeded', 'failed', 'transcripts', 'creditsUsed', 'creditsRemaining'], 'properties': {'failed': {'type': 'number', 'description': 'Videos skipped without charge (no captions)'}, 'playlist': {'type': 'string', 'description': 'Playlist title'}, 'succeeded': {'type': 'number', 'description': 'Videos that returned a transcript (each charged 1 credit)'}, 'creditsUsed': {'type': 'number', 'description': 'Credits charged for this call'}, 'totalVideos': {'type': 'number', 'description': 'Videos attempted in this call'}, 'transcripts': {'type': 'string', 'description': 'All transcripts as timestamped markdown, one section per video, divider-separated'}, 'creditsRemaining': {'type': 'number', 'description': 'Account balance after this call'}}, 'additionalProperties': False}
get_transcript
Get YouTube Transcript
Get the full transcript of a single YouTube video as timestamped markdown. Read-only: fetches existing captions, modifies nothing. Requires an API key; each successful call charges 1 credit, including repeat calls for the same video, so reuse a transcript already in context instead of re-fetching. Videos without captions return an error and cost nothing. Rate limit: 5 requests per 10 seconds.
Read only Open world
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['video'], 'properties': {'video': {'type': 'string', 'description': 'YouTube video ID (e.g. dQw4w9WgXcQ) or full video URL (youtube.com/watch?v=... or youtu.be/... forms)'}}}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['videoId', 'title', 'transcript', 'creditsUsed', 'creditsRemaining'], 'properties': {'title': {'type': 'string', 'description': 'Video title'}, 'videoId': {'type': 'string', 'description': 'YouTube video ID'}, 'transcript': {'type': 'string', 'description': 'Full transcript as timestamped markdown'}, 'creditsUsed': {'type': 'number', 'description': 'Credits charged for this call'}, 'creditsRemaining': {'type': 'number', 'description': 'Account balance after this call'}}, 'additionalProperties': False}
polish_transcript
Polish YouTube Transcript
Get a cleaned-up transcript of a YouTube video's auto-generated captions: punctuation and capitalisation restored, filler and false starts removed, paragraphs added, misheard names fixed, faithful to what was said. Use when raw captions are too messy to read or quote; for a plain transcript use get_transcript. Read-only; requires an API key. Each call charges credits by transcript length (about 3 per 1,000 words, minimum 5), including repeat calls, so keep the result in context. Human-uploaded captions (already clean) and transcripts over ~7,000 words return an error without charging. Rate limit: 5 requests per 10 seconds.
Read only Open world
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['video'], 'properties': {'video': {'type': 'string', 'description': 'YouTube video ID (e.g. dQw4w9WgXcQ) or full video URL (youtube.com/watch?v=... or youtu.be/... forms)'}}}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['videoId', 'title', 'transcript', 'creditsUsed', 'creditsRemaining'], 'properties': {'title': {'type': 'string', 'description': 'Video title'}, 'videoId': {'type': 'string', 'description': 'YouTube video ID'}, 'transcript': {'type': 'string', 'description': 'Cleaned transcript as timestamped markdown'}, 'creditsUsed': {'type': 'number', 'description': 'Credits charged for this call (scales by length)'}, 'creditsRemaining': {'type': 'number', 'description': 'Account balance after this call'}}, 'additionalProperties': False}
Added
get_playlist_transcripts
Sept. 17, 2026, 12:38 p.m.
Added
get_channel_transcripts
Sept. 17, 2026, 12:38 p.m.
Added
polish_transcript
Sept. 17, 2026, 12:38 p.m.
Added
get_transcript
Sept. 17, 2026, 12:38 p.m.