YouTube Video Downloader
A comprehensive collection of Python tools for downloading YouTube content using yt-dlp, including both simple scripts and an advanced MCP server.
Tools
1. Simple Scripts
Single Video Downloader (youtube_downloader.py)
Downloads individual YouTube videos with progress tracking.
Playlist Downloader (playlist_downloader.py)
Downloads entire YouTube playlists with organization.
2. MCP Server (youtube_mcp_server_fastmcp.py)
An advanced MCP (Model Context Protocol) server using FastMCP that provides:
- Asynchronous video and playlist downloads
- Job tracking and status monitoring
- SQLite database for metadata storage
- Comprehensive library management
- Claude Desktop integration
Features
Simple Scripts
Single Video Downloader
- ✅ Prompts user for YouTube URL
- ✅ Downloads the best quality video available
- ✅ Creates a
downloadsfolder for saved videos - ✅ Shows download progress
- ✅ Handles errors gracefully
- ✅ Auto-installs yt-dlp if not present
- ✅ No pytube dependency (as requested)
Playlist Downloader
- ✅ Prompts user for YouTube playlist URL
- ✅ Downloads entire playlists (up to 50 videos by default)
- ✅ Creates organized folders for each playlist
- ✅ Shows playlist information before downloading
- ✅ Downloads videos with playlist index numbers
- ✅ Auto-installs yt-dlp if not present
- ✅ Confirmation prompt before downloading large playlists
MCP Server Features
- ✅ Asynchronous Downloads: Start downloads and get job IDs for tracking
- ✅ Job Status Monitoring: Check download progress and status
- ✅ Metadata Database: SQLite database with video/playlists info
- ✅ Library Management: Browse all downloaded content
- ✅ Error Handling: Comprehensive error tracking and reporting
- ✅ Concurrent Downloads: Multiple downloads can run simultaneously
- ✅ Rich Metadata: Stores titles, descriptions, duration, file paths, etc.
Requirements
- Python 3.11+
- yt-dlp (automatically installed if missing)
- MCP SDK (automatically installed if missing)
Usage
Single Video Download
- Run the single video downloader:
python3 youtube_downloader.py
- Enter a YouTube URL when prompted
- The video will be downloaded to the
downloadsfolder
Playlist Download
- Run the playlist downloader:
python3 playlist_downloader.py
- Enter a YouTube playlist URL when prompted
- Review playlist information and confirm download
- All videos will be downloaded to a playlist-specific folder
MCP Server Usage
The MCP server provides four main tools for asynchronous downloading and library management.
Using with uv (Recommended)
- Install dependencies and run:
cd /Users/granludo/code/testing/youtube_download
uv sync
uv run python start_server.py
Direct Python Usage
python3 youtube_mcp_server_fastmcp.py
Available MCP Tools
- download_video - Start async video download
- download_playlist - Start async playlist download
- get_download_status - Monitor download progress
- cancel_download - Cancel running downloads
- list_downloads - Browse all download jobs
- get_video_metadata - Get video info without downloading
Examples
Single Video Example
$ python3 youtube_downloader.py
==================================================
YouTube Video Downloader
==================================================
Enter YouTube URL: https://www.youtube.com/watch?v=dQw4w9WgXcQ
📥 Downloading video from: https://www.youtube.com/watch?v=dQw4w9WgXcQ
✓ Download completed!
📁 Files saved to: /path/to/downloads
Playlist Example
$ python3 playlist_downloader.py
==================================================
YouTube Playlist Downloader
==================================================
Enter YouTube Playlist URL: https://www.youtube.com/playlist?list=PLrAXtmRdnEQy5rhxJj7aKre_2qO5yQ5nI
📊 Analyzing playlist...
📋 Playlist name: My Music Playlist
🎥 Number of videos: 25
🔄 Download 25 videos? (y/N): y
📥 Downloading playlist: My Music Playlist
✓ Playlist download completed!
📁 All videos saved to: /path/to/playlists/My Music Playlist
MCP Server Examples
Using with uv
- Install and run the server:
cd /Users/granludo/code/testing/youtube_download
uv sync # Install dependencies
uv run python start_server.py # Start server
- The server will start silently (no stdout output, as required by MCP protocol)
MCP Tool Examples
Tool 1: Download Single Video ``json { "name": "download_video", "arguments": { "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ", "output_dir": "downloads" } } ` Response: "Download started successfully. Job ID: abc123-def456-ghi789"`
Tool 2: Download Playlist ``json { "name": "download_playlist", "arguments": { "url": "https://www.youtube.com/playlist?list=PLrAXtmRdnEQy5rhxJj7aKre_2qO5yQ5nI", "output_dir": "playlists" } } ` Response: "Playlist download started successfully. Job ID: def456-ghi789-jkl012"`
Tool 3: Check Download Status ``json { "name": "get_download_status", "arguments": { "job_id": "abc123-def456-ghi789" } } `` Response: JSON object with job status, progress, and metadata
Tool 4: List Downloads ``json { "name": "list_downloads", "arguments": {} } ` Response: `` 📹 VIDEOS:
- Never Gonna Give You Up (ID: video-uuid-123)
Path: /downloads/Never Gonna Give You Up.mp4 Duration: 213s
📁 PLAYLISTS:
- Music Collection (ID: playlist-uuid-456)
Videos: 25 Path: /playlists/Music Collection ```
Complete Workflow Example
- Configure Claude Desktop - Add the MCP server to your
claude_desktop_config.json:
{
"mcpServers": {
"youtube-mcp-tools": {
"command": "/opt/homebrew/bin/uv",
"args": [
"--directory",
"/Users/granludo/code/testing/youtube_download",
"run",
"start_server.py"
]
}
}
}
- Download a video in Claude:
"Download this YouTube video: https://www.youtube.com/watch?v=jNQXAC9IVRw"
The server will start the download and return a job ID immediately.
- Check download status:
"What's the status of that download?"
- List all downloads:
"Show me all my download jobs"
Notes
Simple Scripts
- Both scripts will automatically install yt-dlp if it's not found
- Videos are saved with their original titles
- Playlist videos are numbered by their position in the playlist
- The playlist downloader limits downloads to 50 videos by default (adjustable)
- Both scripts handle keyboard interrupts gracefully
- Downloads are organized in separate folders for videos vs playlists
MCP Server
- Uses FastMCP for simplified MCP server implementation
- Creates
youtube_library.dbSQLite database for metadata - Supports up to 3 concurrent downloads
- Job tracking with unique UUIDs for each download
- Rich metadata storage including titles, descriptions, duration, file paths
- Asynchronous downloads that return immediately with job IDs
- Comprehensive error handling and logging
- Compatible with Claude Desktop and other MCP clients











