# Bootleg-Link MCP

> MCP Server — YouTube/Qobuz/Beatport 下载 | CDJ-2000 兼容 MP3 (48kHz/320k CBR/JPEG封面) | Bootleg-Link Flow (Try Before Buy) | 20 MCP Tools | 断点续传 | 智能命名 | 播放列表分页 | bgutil PO Token

- Skill: `lord1egypt/bootleg-link-mcp` (Agent Skill)
- Install (CLI): `npx skillmds@latest add lord1egypt/bootleg-link-mcp`
- Raw SKILL.md: https://api.skillmd.com/api/skills/lord1egypt/bootleg-link-mcp/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: Lord1Egypt (https://skillmd.com/u/lord1egypt)
- Updated: 2026-09-08
- Page: https://skillmd.com/skills/lord1egypt/bootleg-link-mcp

---


# Bootleg-Link MCP v0.9.0

Python MCP server for downloading music from YouTube, Qobuz, and Beatport. Outputs CDJ-2000 compatible MP3 (48kHz/320k CBR/JPEG cover). Features task queue with resume, concurrent downloads, and intelligent file naming.

## Architecture

Single-file Python MCP server (`src/server.py`) over stdin/stdout JSON-RPC 2.0.

- **Multi-source**: YouTube (yt-dlp), Qobuz (qobuz-dl), Beatport (Playwright + requests)
- **CDJ-2000 Format**: 48kHz/320k CBR MP3, JPEG cover (WebP→JPEG auto-convert), no video streams
- **Task Queue**: In-memory + SQLite persistence, auto-resume on restart
- **Parallel Download**: ThreadPoolExecutor with configurable workers (max 32)
- **Paged Playlist**: Flat extraction (100/page) for large channel downloads
- **Smart Naming**: `Artist - Title (Mix) [LABEL].mp3` with auto artist extraction from YouTube metadata
- **YouTube Auth**: Playwright + Xvfb stealth Chromium login, bgutil PO Token provider
- **Config**: `~/.bootleg-link-mcp/config.json` for paths, proxy, quality, concurrency

## MCP Tools (20)

### Download & Task Management
| Tool | Description |
|------|-------------|
| `submit_download_task` | Submit YouTube URL (channel/playlist/video/search) |
| `query_progress` | Query task progress (incl. outputDir, url) |
| `list_tasks` | List all tasks with status filter |
| `cancel_task` | Cancel pending/downloading task |
| `clear_completed` | Clear completed/failed/cancelled tasks |
| `clear_database` | Clear ALL tasks and videos |
| `get_queue_status` | Queue metrics (active, queued, total) |

### YouTube
| Tool | Description |
|------|-------------|
| `youtube_login` | Playwright stealth Google login |
| `youtube_auth_status` | Check cookie authentication |
| `youtube_logout` | Clear YouTube cookies |

### Qobuz
| Tool | Description |
|------|-------------|
| `qobuz_login` | Login to Qobuz |
| `qobuz_search` | Search tracks/albums/artists |
| `qobuz_download` | Download (MP3 320 / CD FLAC / Hi-Res 96k / 192k) |
| `qobuz_my_purchases` | List purchased/favorite tracks |

### Beatport
| Tool | Description |
|------|-------------|
| `beatport_login` | Playwright login to Beatport |
| `beatport_search` | Search Beatport catalog |
| `beatport_download` | Download owned tracks |

## Dependencies

- `yt-dlp>=2026.05.25` — YouTube extraction (with Node.js for JS challenge solving)
- `mutagen` — MP3 ID3 tag + cover art embedding
- `playwright` — Stealth browser login (optional, for YouTube/Beatport auth)
- `qobuz-dl` — Qobuz integration (optional)
- `bgutil-ytdlp-pot-provider` — PO Token for YouTube (auto-started)
- `ffmpeg` — Audio extraction + format conversion
- Python 3.10+, Node.js 24+

## Configuration

`~/.bootleg-link-mcp/config.json`:

```json
{
  "paths": {
    "outputDir": "/mnt/e/music",
    "dbPath": "~/.bootleg-link-mcp/bootleg-link.db"
  },
  "proxy": { "http": "http://proxy:port", "https": "http://proxy:port" },
  "download": { "maxConcurrent": 32, "quality": "320" }
}
```

## Smart Directory

When no `outputDir` is specified, auto-creates subdirectories under `paths.outputDir` from URL content:
- Search query `[TECHAWAY RECORDS]` → `outputDir/TECHAWAY RECORDS/`
- Channel `@ChannelName` → `outputDir/ChannelName/`

## Bootleg-Link Flow (Try Before Buy)

Core workflow: YouTube fast preview → test in set → mark favorites → one-click Beatport/Qobuz replacement with full ID3/cover/name preservation.

