YouTube Transcript MCP Server
An MCP server that fetches, searches, and analyzes YouTube transcripts via yt-dlp, with metadata, caching, and multi-language support.
get_transcript — fetch a full transcript by video ID or URL, with optional language code, formatting preservation, and start/end time filtering
search_transcript — find text within a transcript, with case-sensitivity toggle and configurable context window
get_available_languages — list available transcript languages (100+ languages, auto-generated and manual)
get_transcript_summary — analytics and insights: speaking pace, filler words, top words, engagement metrics, reading time estimates, and sample text
Prompt templates —
summarize_videoandsearch_topic_in_videoTransports — run over STDIO or HTTP (Docker/GHCR), with 10-minute caching and retry/backoff to reduce rate limiting
Provides tools for fetching YouTube video transcripts, searching transcript content, checking available languages, and extracting transcript summaries with timestamp filtering capabilities
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., "@YouTube Transcript MCP Server get the transcript for 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.
YouTube Transcript MCP Server
A production-ready Model Context Protocol (MCP) server that provides YouTube transcript fetching capabilities using yt-dlp CLI for reliable subtitle extraction. Uses browser impersonation and a JS runtime to reduce YouTube rate limiting.
Status: Production Ready
CLI-Based: Uses yt-dlp subprocess with browser impersonation to reduce HTTP 429 rate limiting
FastMCP 2.14.5: Tool annotations, context logging, progress reporting, prompt templates
GHCR CI/CD: Multi-arch Docker images (amd64/arm64) built on every push
Universal Compatibility: Time parameters work across all MCP clients
Advanced Analytics: Enhanced transcript summary with content analysis
Multi-Language: 100+ languages with auto-generated and manual transcripts
Related MCP server: ytmcp
Features
Fetch transcripts from YouTube videos with metadata and timestamps
Time filtering - extract specific segments by start/end times
Search functionality - find text within transcripts with context
Advanced analytics - speaking pace, filler words, engagement metrics, top words
Language detection - list available transcript languages
Prompt templates - pre-built prompts for video summarization and topic search
Transcript caching - 10-minute TTL cache avoids redundant YouTube requests
Retry with backoff - automatic retries on timeouts and transient errors
Universal format support - handles both video IDs and full YouTube URLs
Dual transport - STDIO and HTTP transport modes
Docker support - containerized deployment via GHCR with health checks
Installation
Docker (Recommended)
# Pull from GHCR and run
docker run -d -p 8080:8080 ghcr.io/suckerfish/yttranscript_mcp:latest
# Or use docker compose
docker compose up -d
# Health check
curl http://localhost:8080/healthLocal Development
# Install dependencies
uv pip install -e .
# Run server (STDIO mode)
python src/server.py
# Run server (HTTP mode)
uvicorn src.server:app --host 0.0.0.0 --port 8080Usage
Available Tools
All tools are read-only (readOnlyHint=True) and tagged read.
get_transcript - Fetch video transcripts with optional time filtering
search_transcript - Search for specific text within transcripts
get_transcript_summary - Advanced analytics and content insights
get_available_languages - List available transcript languages
Prompt Templates
summarize_video(video_id, language_code) - Summarize a YouTube video transcript
search_topic_in_video(video_id, topic) - Search for and analyze a topic within a video
Testing Commands
# Discover tools
mcp tools .venv/bin/python src/server.py
# Basic transcript
mcp call get_transcript --params '{"video_id":"jNQXAC9IVRw"}' .venv/bin/python src/server.py
# Time-filtered transcript
mcp call get_transcript --params '{"video_id":"jNQXAC9IVRw", "start_time": 10, "end_time": 60}' .venv/bin/python src/server.py
# Search within transcript
mcp call search_transcript --params '{"video_id":"jNQXAC9IVRw", "query":"example"}' .venv/bin/python src/server.py
# Advanced analytics
mcp call get_transcript_summary --params '{"video_id":"jNQXAC9IVRw"}' .venv/bin/python src/server.py
# Available languages
mcp call get_available_languages --params '{"video_id":"jNQXAC9IVRw"}' .venv/bin/python src/server.pyMCP Client Configuration
HTTP Transport (Production)
{
"yttranscript": {
"url": "http://localhost:8080/mcp"
}
}STDIO Transport (Development)
{
"yttranscript": {
"command": "uv",
"args": [
"run",
"--directory", "/path/to/yttranscript_mcp",
"src/server.py"
]
}
}Key Features
Universal Parameter Compatibility
Time filtering parameters accept multiple formats:
Integers:
{"start_time": 10}Floats:
{"start_time": 10.5}Strings:
{"start_time": "10"}Nulls:
{"start_time": null}or{"start_time": "null"}
Advanced Analytics
The get_transcript_summary tool provides:
Speaking pace analysis (words per minute with descriptive labels)
Filler word detection (um, uh, like, etc.) with percentages
Content indicators (conversational, formal, high energy)
Top frequent words (excluding stop words)
Engagement metrics (questions, exclamations)
Reading time estimates at multiple speeds
CLI Implementation Benefits
Fewer rate limits - browser impersonation, a JS runtime, and backoff retries on HTTP 429
Reliable extraction - uses yt-dlp's robust parsing
Automatic retries - backoff on timeouts and transient errors
Format flexibility - handles VTT, JSON3, and other subtitle formats
Configuration
Environment Variables
YT_TRANSCRIPT_SERVER_PORT=8080 # Server port (default: 8080)
YT_TRANSCRIPT_SERVER_HOST=0.0.0.0 # Server host (default: 0.0.0.0)
YT_TRANSCRIPT_DEBUG=false # Debug modeDependencies
fastmcp>=2.14.5,<3.0.0 - MCP server framework
yt-dlp - YouTube transcript extraction via CLI
pydantic>=2.0.0 - Data validation and models
uvicorn>=0.24.0 - ASGI server for HTTP transport
This project uses uv for package management.
Deployment
Docker images are built by GitHub Actions on every push to main and published to GHCR:
ghcr.io/suckerfish/yttranscript_mcp:latestMulti-arch support: linux/amd64 and linux/arm64.
Troubleshooting
Tool not found: Verify
@mcp.tool()decorator in tool definitionsValidation errors: Video IDs must be 11 characters, time values must be non-negative
Time filtering issues: Parameters accept multiple formats (int/float/string/null)
Transport issues: Use
uvicornfor HTTP mode,python src/server.pyfor STDIONo transcript available: Check with
get_available_languagesfirstMissing session ID: Server uses
stateless_http=Truefor clients without session management
License
This project is open source and available under the MIT License.
Available Tools
4 toolsget_available_languagesC
Get list of available transcript languages for a YouTube video using yt-dlp.
Args:
video_id: YouTube video ID or URL
Returns:
List of available languages with metadata
Inputs: video_id (required).
get_transcriptA
Fetch the transcript for a YouTube video using yt-dlp.
Args:
video_id: YouTube video ID or URL
language_code: Optional language code (e.g., 'en', 'es'). If not provided, uses auto-detected language.
preserve_formatting: Whether to preserve timestamp formatting in plain text
start_time: Optional start time in seconds to filter transcript
end_time: Optional end time in seconds to filter transcript
Returns:
Complete transcript data with metadata
Inputs: video_id (required), language_code, preserve_formatting, start_time, +1 more.
get_transcript_summaryB
Get a summary of the transcript including key statistics and sample text.
Args:
video_id: YouTube video ID or URL
language_code: Optional language code
max_length: Maximum length of sample text
Returns:
Summary with statistics and sample text
Inputs: video_id (required), language_code, max_length.
search_transcriptA
Search for specific text within a YouTube video transcript.
Args:
video_id: YouTube video ID or URL
query: Text to search for
language_code: Optional language code for transcript
case_sensitive: Whether search should be case sensitive
context_window: Seconds of context to include before/after matches
Returns:
Search results with context and timestamps
Inputs: video_id (required), query (required), language_code, case_sensitive, +1 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 4 tools
Each tool has a clearly distinct purpose with no overlap: get_available_languages lists languages, get_transcript fetches full transcripts, get_transcript_summary provides statistical summaries, and search_transcript performs text searches. The descriptions reinforce these distinct roles, making tool selection unambiguous for an agent.
All tool names follow a consistent verb_noun pattern with snake_case (e.g., get_available_languages, get_transcript, get_transcript_summary, search_transcript). The naming is predictable and readable throughout the set, with no deviations in style or convention.
With 4 tools, the server is well-scoped for its purpose of YouTube transcript retrieval and analysis. Each tool earns its place by covering distinct aspects of the workflow (language discovery, full transcript fetching, summarization, and searching), avoiding bloat while providing complete functionality.
The tool set offers complete coverage for the domain of YouTube transcript operations. It includes language discovery, full transcript retrieval, summarization, and searching, with no obvious gaps. Agents can perform all core transcript-related tasks without dead ends or missing operations.
Maintenance
Related MCP Connectors
Transcripts, translations, summaries, subtitles, and search for public YouTube videos.
Search YouTube, read video metadata, and fetch transcripts with language preferences
Transcripts of YouTube videos, playlists and channels with timestamps; SRT or WebVTT too.
Fetch YouTube transcripts with timestamps, search history, and export data for AI models.
Related MCP Servers
- 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.42114 npm16MIT
- AlicenseAqualityDmaintenanceEnables AI assistants to fetch YouTube video transcripts with precise timestamps, multi-language support, and time-range filtering.31MIT
- AlicenseAqualityDmaintenanceEnables fetching, searching, and summarizing YouTube video transcripts with multi-language support.4MIT
- AlicenseNot gradedqualityDmaintenanceEnables retrieval of transcripts from YouTube videos, supporting multiple URL formats, language selection, timestamps, and ad filtering.1,237 npmMIT