mcp-youtube-transcript
Provides tools for retrieving YouTube video transcripts in available languages, including auto-generated captions, from a YouTube URL or video ID.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-youtube-transcriptget the transcript for this video: https://youtu.be/jNQXAC9IVRw"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-youtube-transcript
An MCP server that extracts YouTube transcripts in any available language, including auto-generated ones.
It exposes a single tool, get_transcript, which takes a YouTube URL or video ID and returns the transcript as plain text.
Why this exists
This is a repaired fork of @kimtaeyoon83/mcp-server-youtube-transcript (MIT). That package no longer returns transcripts, for two independent reasons:
1. Successful calls rendered as [object Object].
The tool handler returned its payload wrapped in a toolResult key:
return { toolResult: { content: [...], isError: false } };That was the shape used by MCP SDK 0.6 before the spec settled. A current client looks for content at the top level of the result, finds nothing, and stringifies the object it got instead. The failure only appeared on successful fetches — errors still propagated correctly, which made it look like a language problem rather than a response-shape problem.
2. Transcripts came back empty.
The upstream dependency youtube-captions-scraper reads the caption baseUrl out of the watch-page HTML. YouTube now serves those URLs as HTTP 200 with a zero-length body, so the scraper parsed an empty document and produced an empty transcript with no error.
This fork resolves caption tracks through the InnerTube player API instead. Of the clients tested, only IOS both returns a working baseUrl and serves the legacy <transcript> XML format:
InnerTube client | Result |
| works, legacy |
| works, but word-level |
|
|
|
|
Two smaller improvements came along with that:
Dependency-free caption handling.
youtube-captions-scraper,he, andstriptagsare all gone. The only remaining dependency is the MCP SDK itself.Actionable language errors. Asking for a language the video does not have now tells you what it does have:
Could not find en captions for TjKwL_L8gic. Available: ar (Arabic (auto-generated))Previously this was a bare "Could not find en captions", which gave no hint that the video was captioned in another language.
Related MCP server: YouTube Transcript MCP Server
Requirements
Node.js 18 or newer (the server uses the global fetch).
Install
git clone https://github.com/dahbimoad/mcp-youtube-transcript.git
cd mcp-youtube-transcript
npm installUse with Claude Code
claude mcp add youtube-transcript -s user -- node /absolute/path/to/mcp-youtube-transcript/src/index.jsUse with Claude Desktop
Add to claude_desktop_config.json:
{
"mcpServers": {
"youtube-transcript": {
"command": "node",
"args": ["/absolute/path/to/mcp-youtube-transcript/src/index.js"]
}
}
}Tool
get_transcript
Parameter | Type | Description |
| string | YouTube URL or bare 11-character video ID |
| string | Language code, e.g. |
Accepted URL forms: https://www.youtube.com/watch?v=ID, https://youtu.be/ID (tracking parameters such as ?si= are ignored), or the bare ID.
Language matching falls back in this order: exact languageCode, then a manual track (vssId of .xx), then an auto-generated track (a.xx), then a regional variant (ar will match an ar-MA track). Note that this does not run in reverse — requesting ar-MA when the video only carries ar reports the mismatch rather than guessing.
Notes and limitations
Caption discovery relies on YouTube's internal InnerTube API, which is undocumented and can change without warning. If transcripts start coming back empty again, that is the first place to look.
Only videos that already carry captions work. This server does not transcribe audio.
Auto-generated captions are unpunctuated and can misrender proper nouns and dialect. They are a usable transcript, not a clean one.
Credits
Original work by Freddie (kimtaeyoon83). Licensed MIT; see LICENSE, which carries both the original and the modification copyright.
This server cannot be deployed
Maintenance
Related MCP Connectors
Fetch the full transcript of any YouTube video as clean text. No API key, no signup.
Extract YouTube transcripts, search what was said, and read on-screen frames with cited timestamps.
Retrieve YouTube transcripts with timestamps, native captions and asynchronous generation when captions are unavailable. Requires a Capslane API key.
Free YouTube transcripts, no API key: videos, channel lists, latest uploads, bulk download links.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables extraction of transcript text from YouTube videos by providing the video URL, supporting standard, shortened, and embed URL formats.19 npm2-
- FlicenseNot gradedqualityDmaintenanceEnables fetching YouTube video transcripts with Google OAuth 2.0 authentication. Supports both manual and auto-generated transcripts with optional timestamps from video URLs or IDs.-
- AlicenseAqualityDmaintenanceRetrieves transcripts from YouTube videos with support for multiple languages, timestamp control, and language detection. Enables video content analysis, summarization, and quote extraction without manually downloading or watching videos.272 npm15MIT
- AlicenseAqualityDmaintenanceEnables fetching, searching, and summarizing YouTube video transcripts with multi-language support.4MIT