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