Skip to main content
Glama
README.md
# yt-dlp-mcp

Standalone MCP server for extracting metadata and downloading videos (TikTok, YouTube, etc.) via yt-dlp.

## Features

- Extract video metadata (title, description, uploader, duration)
- Get direct `.mp4` link without downloading
- **Download videos locally** to a `downloads` folder (now generates both universal MP4 and separate MP3 audio file)
- **Clear downloads cache** to free up disk space
- Support for multiple platforms (TikTok, YouTube, Facebook, Vimeo, etc.)

## Installation

```bash
# Project initialization (already done)
uv init

# Install dependencies (already done)
uv add "mcp[cli]" yt-dlp
```

## Usage

### Start the server

```bash
uv run server.py
```

The server runs in `stdio` mode and is ready to be used by any MCP client.

### Usage with various MCP clients

#### Cline /cline (VS Code)

Add to your `~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json` an entry to "mcpServers" element:

the above path is for macos, with cline installed as VS code extension !
you'll have to check for linux ou windows using the cline mcp configuration management interface, it opens the file for you ! with "Configure MCP Servers" Button !

```json
{
  "mcpServers": {
    "other-mcp-server": { },
    "yt-dlp": {
      "command": "uv",
      "args": ["run", "--directory", "<your_path>/yt-dlp-mcp", "server.py"]
    }
  }
}
```
don't use `~` in <your_path>, else cline won't find the file, use true root path !
#### OpenCode

Add to your `~/.opencode/mcp.json`:

```json
{
  "servers": {
    "yt-dlp": {
      "command": "uv",
      "args": ["run", "--directory", "<your_path>/yt-dlp-mcp", "server.py"]
    }
  }
}
```

#### Claude Desktop

Add to your `claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "yt-dlp": {
      "command": "uv",
      "args": ["run", "--directory", "<your_path>/yt-dlp-mcp", "server.py"]
    }
  }
}
```

#### Zed

Add to your `~/.config/zed/settings.json`:

```json
{
  "mcp": {
    "servers": {
      "yt-dlp": {
        "command": "uv",
        "args": ["run", "--directory", "<your_path>/yt-dlp-mcp", "server.py"]
      }
    }
  }
}
```

#### Cursor

Add to your `~/.cursor/mcp.json`:

```json
{
  "mcpServers": {
    "yt-dlp": {
      "command": "uv",
      "args": ["run", "--directory", "<your_path>/yt-dlp-mcp", "server.py"]
    }
  }
}
```

### Available Tools

#### 1. extract_video_info

Extracts metadata and direct link from a video. Supports Facebook via lightweight regex and fb-video scraper as fallback.

```python
extract_video_info(url="https://www.tiktok.com/@username/video/123456789")
```

**Parameters:**
- `url` (str): The URL of the video to extract

**Returns:**
- `title` : Video title
- `description` : Video description
- `uploader` : Uploader name
- `duration` : Duration in seconds
- `url` : Direct video link (.mp4)
- `webpage_url` : Original page URL
- `thumbnail` : Thumbnail URL
- `error` : Error message if extraction failed
- `source` : Scraper source (if using Facebook fallbacks)

#### 2. download_video

Downloads a video and generates both a universal MP4 (H.264/AAC/FastStart) and a separate MP3 audio file to the local `downloads` folder.

```python
download_video(url="https://www.tiktok.com/@username/video/123456789")
```

**Parameters:**
- `url` (str): The URL of the video to download

**Returns:**
- `success` : Boolean indicating success
- `title` : Video title
- `filename_mp4` : Local MP4 filename
- `filename_mp3` : Local MP3 filename
- `local_path_mp4` : Absolute path to the downloaded MP4 file
- `local_path_mp3` : Absolute path to the downloaded MP3 file
- `message` : Status message
- `error` : Error message if download failed

#### 3. clear_downloads

Clears all files from the downloads folder.

```python
clear_downloads()
```

**Returns:**
- `success` : Boolean indicating success
- `deleted_count` : Number of files deleted
- `error` : Error message if operation failed

## Updating dependencies

```bash
uv add --upgrade yt-dlp
```

## Requirements

- Python 3.10+
- uv (Python package manager)
- ffmpeg (optional, for video processing)

TDQS

A4.1/5.0

Scored across 3 tools

Disambiguation5/5

Each tool has a clearly distinct role: extraction, downloading, and cleanup. There is no overlap or ambiguity between them.

Naming Consistency5/5

All tool names follow a consistent verb_noun snake_case pattern: extract_video_info, download_video, clear_downloads. The naming is predictable and uniform.

Tool Count5/5

Three tools is a well-scoped set for a focused yt-dlp workflow: extract metadata, download media, and clear storage. Each tool has a clear purpose and none feel redundant.

Completeness4/5

The core workflow of extracting video info and downloading video/audio is covered, with cleanup included. Minor gaps exist such as no option to download video-only or audio-only, and no selective file deletion, but these do not severely hinder the primary use case.

Maintenance

ActivityInactive
ResponsivenessNo issues