Skip to main content
Glama
Vinaykumarreddy467

YouTube Summarizer MCP Server

README.md
# YouTube Summarizer MCP Server

An MCP (Model Context Protocol) server that fetches YouTube video transcripts and exposes them to AI agents as tools, resources, and prompts.

Works with any MCP client — OpenWork, Claude Desktop, or any custom MCP host.

## Features

### Tools (callable by agents)

| Tool | Description |
|------|-------------|
| `get_youtube_transcript(video_url)` | Full plain-text transcript |
| `search_transcript(video_url, keyword)` | Case-insensitive search, returns matching lines with timestamps |
| `get_timestamped_transcript(video_url)` | Every line prefixed with `[MM:SS]` — ideal for citing moments |

### Resources (readable by agents)

| URI | Description |
|-----|-------------|
| `youtube://transcript/{video_id}` | Full plain text |
| `youtube://transcript/{video_id}/segments` | Timestamped segments |
| `youtube://transcript/{video_id}/stats` | Word count, duration, estimated reading time |

### Prompt

- `summarize_video(video_url, format_style)` — generates a prompt template that asks the LLM to summarize a video. The LLM can read the transcript resource and return a summary in the requested format (default: bullet points).

## Usage

### Run directly

```bash
uv run --directory /path/to/yt-summarizer python3 summarizer.py
```

Or with the fastmcp CLI:

```bash
uv run --directory /path/to/yt-summarizer fastmcp run summarizer.py
```

### Connect from Claude Desktop

Add to `claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "yt-summarizer": {
      "command": "/path/to/uv",
      "args": [
        "run",
        "--directory",
        "/path/to/yt-summarizer",
        "python3",
        "summarizer.py"
      ]
    }
  }
}
```

### Connect from OpenWork

Add to `opencode.jsonc`:

```json
{
  "mcp": {
    "youtube-summarizer": {
      "type": "local",
      "command": ["uv", "run", "--directory", "/path/to/yt-summarizer", "python3", "summarizer.py"],
      "enabled": true
    }
  }
}
```

## Example

An agent can fetch and summarize a video in one interaction:

1. Agent reads `youtube://transcript/dQw4w9WgXcQ/stats` — sees "1250 words, 5 min duration"
2. Agent calls `get_youtube_transcript("https://youtube.com/watch?v=dQw4w9WgXcQ")` — gets the full text
3. Agent calls `search_transcript("https://youtube.com/watch?v=dQw4w9WgXcQ", "important topic")` — finds relevant parts with timestamps
4. Agent uses the `summarize_video` prompt template to format the final summary

## Supported URL formats

- `https://youtube.com/watch?v=VIDEO_ID`
- `https://youtu.be/VIDEO_ID`
- `https://youtube.com/shorts/VIDEO_ID`
- `https://youtube.com/embed/VIDEO_ID`
- `https://youtube.com/v/VIDEO_ID`

## Requirements

- Python 3.10+
- `fastmcp` — MCP server framework
- `youtube-transcript-api` — fetches YouTube transcripts

## Project structure

```
yt-summarizer/
├── summarizer.py          # Main MCP server
├── yt-summarizer.py       # Original minimal version
├── yt-summarizer1.py      # Older version with logging
├── pyproject.toml         # Dependencies
├── plan.txt               # Dev notes
└── README.md
```

TDQS

A3.7/5.0

Scored across 3 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: one returns the full transcript with timestamps, one returns plain text, and one searches for specific terms. No ambiguity between them.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case (get_timestamped_transcript, get_youtube_transcript, search_transcript), making them predictable and easy to understand.

Tool Count5/5

Three tools is well-scoped for a YouTube transcript server, covering the core needs without being too few or too many.

Completeness4/5

The set covers the main transcript retrieval and search functionality. A minor gap is the lack of a tool to get video metadata or list available transcripts, but it is still complete for typical summarization tasks.

Maintenance

ActivityInactive
ResponsivenessNo issues