MCP server that fetches YouTube video transcripts and optionally summarizes them
Runs on your machine from its package; the steps are below.

At most: only reads or looks up information.
Odel charges nothing per call. The publisher may charge for its own service.
Runs locally over stdio
This server isn't hosted — your MCP client launches it from a package registry. Use one of the commands below, or drop the config into your client (e.g. Claude Desktop).
Run
uvx youtube-summarize
MCP client config
{
"mcpServers": {
"youtube-summarize": {
"command": "uvx",
"args": [
"youtube-summarize"
]
}
}
}MCP server that fetches YouTube video transcripts and optionally summarizes them.

youtube.com/watch?v=, youtu.be/, youtube.com/embed/, youtube.com/shorts/) or bare video IDsget_transcriptFetch a YouTube video's transcript. By default the response is prefixed with a [METADATA] block (title, channel, published, duration, views, description); pass include_metadata=false for transcript-only output.
| Parameter | Type | Default | Description |
|---|---|---|---|
url | string | required | YouTube video URL or video ID |
languages | string[] | ["en"] | Preferred languages in priority order |
format | string | "text" | Output format: text, json, pretty, webvtt, srt |
preserve_formatting | boolean | false | Keep HTML formatting tags in the transcript |
include_timestamps | boolean | false | When true with format="text", prefix each line with [HH:MM:SS]. Ignored for other formats (they already include timestamps). |
include_metadata | boolean | true | Prepend a [METADATA] block before the transcript. Pass false for transcript-only output. |
summarize_transcriptFetch a transcript and return it with summarization instructions. The response is structured into clearly-labeled sections ([INSTRUCTIONS], [PROMPT_SOURCE], [VIDEO], [METADATA], [TRANSCRIPT]) so a human can review the prompt before letting the LLM act on it.
| Parameter | Type | Default | Description |
|---|---|---|---|
url | string | required | YouTube video URL or video ID |
prompt | string | (default prompt) | Custom summarization instructions |
languages | string[] | ["en"] | Preferred languages in priority order |
include_timestamps | boolean | false | Prefix each transcript line with [HH:MM:SS]. |
include_metadata | boolean | true | Include a [VIDEO] block with title, channel, published, duration, views, and description. |
get_video_metadataFetch metadata (title, description, channel, upload date, duration, views, tags, chapters, etc.) for a YouTube video. Backed by yt-dlp.
| Parameter | Type | Default | Description |
|---|---|---|---|
url | string | required | YouTube video URL or video ID |
list_playlist_videosList the videos in a YouTube playlist (title, ID, channel, duration, views, URL). Per-video metadata is intentionally lean so the call stays fast even for large playlists; call get_video_metadata with a specific video ID for full detail.
| Parameter | Type | Default | Description |
|---|---|---|---|
url | string | required | YouTube playlist URL (with ?list=...) or bare playlist ID |
limit | integer | 500 | Maximum videos to return |
sort_by | string | "index" | One of: index (playlist order), title, duration, views. upload_date is not supported. |
order | string | "asc" | asc or desc |
search_videosSearch YouTube for videos and return a clean ranked list (title, ID, channel, duration, views, URL) — only actual videos, with no ads, recommendation shelves, or personalization. Relevance ordering still comes from YouTube's backend. Pair with get_transcript or summarize_transcript on a result's ID or URL.
| Parameter | Type | Default | Description |
|---|---|---|---|
query | string | required | Search terms |
limit | integer | 10 | Maximum results to return |
sort_by | string | "relevance" | One of: relevance, date (newest first), views, rating |
uploaded | string | "any" | Filter by upload time: any, hour, today, week, month, year |
duration | string | "any" | Filter by length: any, short (<4 min), medium (4–20 min), long (>20 min) |
list_transcriptsList available transcript languages for a video.
| Parameter | Type | Default | Description |
|---|---|---|---|
url | string | required | YouTube video URL or video ID |
uvx youtube-summarize
Add to your claude_desktop_config.json:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.json{
"mcpServers": {
"youtube-summarize": {
"command": "uvx",
"args": ["youtube-summarize"]
}
}
}
claude mcp add youtube-summarize -- uvx youtube-summarize
Run the server over stdio:
uvx youtube-summarize
# Install dependencies
uv sync
# Launch the MCP inspector (web UI for testing tools)
uv run mcp dev main.py
MIT
mcp-name: io.github.zlatkoc/youtube-summarize