Skip to main content
Glama
Nareshtt

YouTube MCP Server

by Nareshtt
README.md
# YouTube MCP Server

Distraction-free YouTube for AI assistants. Get your subscribed channels, latest videos, and transcripts without algorithm recommendations.

## Features

- **No Distractions**: Lists only your subscribed content
- **Direct Links**: Every video has a clickable link
- **Read Mode**: Get transcripts to read instead of watching
- **No OAuth**: Uses browser cookies - much simpler
- **Caching**: Fast responses for repeated queries

## Available Tools

| Tool | Description |
|------|-------------|
| `get_subscribed_channels` | List all your subscribed channels |
| `get_latest_videos` | Get latest videos from subscriptions with direct links |
| `get_video_transcript` | Get transcript of a video (read instead of watching) |
| `search_subscribed_channels` | Search within your subscriptions |
| `get_channel_videos` | Get videos from a specific channel |
| `setup_youtube_auth` | Get authentication setup instructions |

## Setup

### 1. Install Dependencies

```bash
cd /home/naresh/Projects/youtube-mcp-python
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
```

### 2. Export YouTube Cookies

**Using Chrome:**
```bash
yt-dlp --cookies-from-browser chrome --cookies auth/cookies.txt
```

**Using Firefox:**
```bash
yt-dlp --cookies-from-browser firefox --cookies auth/cookies.txt
```

**Note:** You must be logged into YouTube in your browser first.

### 3. Add to OpenCode

Add to `~/.config/opencode/opencode.jsonc`:

```json
{
  "mcp": {
    "youtube": {
      "type": "local",
      "command": ["/home/naresh/Projects/youtube-mcp-python/.venv/bin/python", "/home/naresh/Projects/youtube-mcp-python/main.py"],
      "enabled": true
    }
  }
}
```

## Usage Examples

**Get latest videos:**
```
Use get_latest_videos with max_results=15
```

**Read a video transcript:**
```
Use get_video_transcript with video_id="dQw4w9WgXcQ"
```

**Search your subscriptions:**
```
Use search_subscribed_channels with query="python tutorial"
```

**Get a specific channel's videos:**
```
Use get_channel_videos with channel_id="UCwX6rVkOq0"
```

## Project Structure

```
youtube-mcp-python/
├── main.py              # Entry point
├── mcp_server.py        # MCP tool definitions
├── config.py           # Configuration
├── requirements.txt    # Dependencies
├── opencode-mcp-config.json
├── auth/
│   └── __init__.py    # Cookie validation
├── services/
│   ├── __init__.py
│   ├── subscriptions_service.py
│   ├── videos_service.py
│   ├── transcripts_service.py
│   └── search_service.py
├── utils/
│   ├── __init__.py
│   ├── ytdlp_wrapper.py
│   ├── cache.py
│   └── retry.py
└── data/
    └── cache/          # Cached data
```

## Troubleshooting

**"Cookies not found"**
→ Run the yt-dlp cookie export command

**"401 Unauthorized"**
→ Re-export cookies (they expire when you log out)

**"No subscriptions found"**
→ Make sure you're subscribed to channels on YouTube

## Credits

Built with:
- [yt-dlp](https://github.com/yt-dlp/yt-dlp) - YouTube extraction
- [MCP](https://github.com/modelcontextprotocol/python-sdk) - Model Context Protocol