MCP server: One MCP server.

YouTube Summarize

@zlatkocMCP server · External

MCP server that fetches YouTube video transcripts and optionally summarizes them

Transcriptionv0.6.0MITPython
Freeno charge per call

Runs on your machine from its package; the steps are below.

Demo — summarizing a YouTube video in Claude
From the README

What it does

  1. Reads
  2. Writes
  3. High impact

At most: only reads or looks up information.

What it costs

Free

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).

PyPIyoutube-summarizev0.6.0

Run

uvx youtube-summarize

MCP client config

{
  "mcpServers": {
    "youtube-summarize": {
      "command": "uvx",
      "args": [
        "youtube-summarize"
      ]
    }
  }
}
README4 min read

MCP server that fetches YouTube video transcripts and optionally summarizes them.

Demo — summarizing a YouTube video in Claude

Features

  • Fetch transcripts in multiple formats (text, JSON, SRT, WebVTT, pretty-print)
  • Video metadata — title, description, channel, upload date, duration, views, chapters (via yt-dlp)
  • Optional timestamps in plain-text transcripts
  • Summarize videos — returns transcript with the prompt clearly broken out for human review before the LLM acts on it
  • List playlist videos — fast enumeration of any public playlist with optional sorting
  • Search videos — clean ranked results with sort and filter options, without the ads, Shorts shelves, and personalized recommendations of the YouTube website
  • List available languages for any video's transcripts
  • Flexible URL parsing — accepts full YouTube URLs (youtube.com/watch?v=, youtu.be/, youtube.com/embed/, youtube.com/shorts/) or bare video IDs
  • Multi-language support — request transcripts in specific languages with fallback priority

Tools

get_transcript

Fetch 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.

ParameterTypeDefaultDescription
urlstringrequiredYouTube video URL or video ID
languagesstring[]["en"]Preferred languages in priority order
formatstring"text"Output format: text, json, pretty, webvtt, srt
preserve_formattingbooleanfalseKeep HTML formatting tags in the transcript
include_timestampsbooleanfalseWhen true with format="text", prefix each line with [HH:MM:SS]. Ignored for other formats (they already include timestamps).
include_metadatabooleantruePrepend a [METADATA] block before the transcript. Pass false for transcript-only output.

summarize_transcript

Fetch 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.

ParameterTypeDefaultDescription
urlstringrequiredYouTube video URL or video ID
promptstring(default prompt)Custom summarization instructions
languagesstring[]["en"]Preferred languages in priority order
include_timestampsbooleanfalsePrefix each transcript line with [HH:MM:SS].
include_metadatabooleantrueInclude a [VIDEO] block with title, channel, published, duration, views, and description.

get_video_metadata

Fetch metadata (title, description, channel, upload date, duration, views, tags, chapters, etc.) for a YouTube video. Backed by yt-dlp.

ParameterTypeDefaultDescription
urlstringrequiredYouTube video URL or video ID

list_playlist_videos

List 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.

ParameterTypeDefaultDescription
urlstringrequiredYouTube playlist URL (with ?list=...) or bare playlist ID
limitinteger500Maximum videos to return
sort_bystring"index"One of: index (playlist order), title, duration, views. upload_date is not supported.
orderstring"asc"asc or desc

search_videos

Search 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.

ParameterTypeDefaultDescription
querystringrequiredSearch terms
limitinteger10Maximum results to return
sort_bystring"relevance"One of: relevance, date (newest first), views, rating
uploadedstring"any"Filter by upload time: any, hour, today, week, month, year
durationstring"any"Filter by length: any, short (<4 min), medium (4–20 min), long (>20 min)

list_transcripts

List available transcript languages for a video.

ParameterTypeDefaultDescription
urlstringrequiredYouTube video URL or video ID

Installation

bash
uvx youtube-summarize

Claude Desktop

Add to your claude_desktop_config.json:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json
json
{
  "mcpServers": {
    "youtube-summarize": {
      "command": "uvx",
      "args": ["youtube-summarize"]
    }
  }
}

Claude Code

bash
claude mcp add youtube-summarize -- uvx youtube-summarize

Other MCP clients

Run the server over stdio:

bash
uvx youtube-summarize

Prerequisites

  • Python 3.13+
  • uv package manager

Development

bash
# Install dependencies
uv sync

# Launch the MCP inspector (web UI for testing tools)
uv run mcp dev main.py

License

MIT


mcp-name: io.github.zlatkoc/youtube-summarize

Similar modules

Browse Transcription