Rust MCP server and CLI for yt-dlp search, downloads, metadata, transfers, and Plex playlists.
Most developer tooling work still happens through a UI a human drives. YTDL RMCP MCP server moves it into the conversation instead. Rust MCP server and CLI for yt-dlp search, downloads, metadata, transfers, and Plex playlists.
MCP server and CLI for yt-dlp: search and download media, embed metadata and cover art, then deliver to local, SSH, or rclone targets and Plex.
The server publishes 14 tools. What each one is for:
Self — contained paths** — the binary downloads/caches yt-dlp + ffmpeg whenSelf-installing — ytdl-rmcp setup registers the server into Claude Code,Repeat-safe — use_archive records downloaded IDs (per mode) and skipsStats — ready ledger** — every completed download call appends a JSONL entrypartial — an error occurred but some files were still producedfailed — errored with no filesskipped — nothing new (already in the archive)metadata_retag — MusicBrainz/AcoustID auto-retag summary (attempted,plex_playlist — Plex playlist summary (playlist, matched, added,history_error — set when the download succeeded but the JSONL ledger appendhost — /path/to/library — SSH target. Uses the existing rsync/scp flow andremote — path/to/library — rclone target with a relative remote path. Uses rclone copy; rclone must beInstallation goes through your MCP client rather than a global install: point it at @dinglebear/rytdl on npm and it is fetched when the client starts. The copy-paste blocks for Claude Desktop, Claude Code and Cursor are further down this page.
Configuration is passed through the environment: YTDLP_TARGET_PATH, YTDLP_VIDEO_TARGET_PATH, YTDLP_AUTO_UPDATE, YTDLP_MAX_AGE_DAYS, YTDLP_EXTRACTOR_ARGS, FPCALC_PATH, YTDLP_PLEX_URL, YTDLP_PLEX_TOKEN. Treat anything key-shaped as a real credential — scope it to the minimum the server needs, and rotate it if it ever lands in a shared config.
Among the developer tooling options, the useful question is rarely "what can it do" but "what does it cost you to run" — permissions, credentials, and how much of your context its toolset consumes. YTDL RMCP's toolset — Self, Self-installing, Repeat-safe and 11 more — is a fair guide to whether it matches your workflow. It is maintained by ai.dinglebear; worth a glance at recent repository activity before you build anything load-bearing on it.
This entry was verified against YTDL RMCP's own documentation before publication; SyncDev keeps the directory reviewed rather than auto-generated.
| Tool | What it does |
|---|---|
| Self | contained paths** — the binary downloads/caches yt-dlp + ffmpeg when |
| Self-installing | ytdl-rmcp setup registers the server into Claude Code, |
| Repeat-safe | use_archive records downloaded IDs (per mode) and skips |
| Stats | ready ledger** — every completed download call appends a JSONL entry |
| partial | an error occurred but some files were still produced. |
| failed | errored with no files. |
| skipped | nothing new (already in the archive). |
| metadata_retag | MusicBrainz/AcoustID auto-retag summary (attempted, |
| plex_playlist | Plex playlist summary (playlist, matched, added, |
| history_error | set when the download succeeded but the JSONL ledger append |
| host | /path/to/library — SSH target. Uses the existing rsync/scp flow and |
| remote | path/to/library — rclone target with a relative remote path. Uses rclone copy; rclone must be |
| rclone | remote:/path/to/library — explicit rclone target for an absolute remote path; without the rclone: prefix, host:/path remains SSH by design. |
| Surface | This repo |
{
"mcpServers": {
"ytdl-rmcp": {
"command": "npx",
"args": ["-y", "@dinglebear/rytdl"],
"env": {
"YTDLP_TARGET_PATH": "your-value",
"YTDLP_VIDEO_TARGET_PATH": "your-value",
"YTDLP_AUTO_UPDATE": "your-value",
"YTDLP_MAX_AGE_DAYS": "your-value",
"YTDLP_EXTRACTOR_ARGS": "your-value",
"FPCALC_PATH": "your-value",
"YTDLP_PLEX_URL": "your-value",
"YTDLP_PLEX_TOKEN": "your-value"
}
}
}
}Add to claude_desktop_config.json, then restart Claude Desktop.
| Variable | Description | Required |
|---|---|---|
| YTDLP_TARGET_PATH | Filesystem location the server is allowed to use. | Optional |
| YTDLP_VIDEO_TARGET_PATH | Filesystem location the server is allowed to use. | Optional |
| YTDLP_AUTO_UPDATE | Configuration value read at startup. | Optional |
| YTDLP_MAX_AGE_DAYS | Configuration value read at startup. | Optional |
| YTDLP_EXTRACTOR_ARGS | Configuration value read at startup. | Optional |
| FPCALC_PATH | Filesystem location the server is allowed to use. | Optional |
| YTDLP_PLEX_URL | Endpoint or connection string the server talks to. | Yes |
| YTDLP_PLEX_TOKEN | Credential the server authenticates with. | Yes |
Kill hallucinated APIs — version-accurate, up-to-date library documentation injected straight into context.
Microsoft's official browser automation server — drive a real browser through the accessibility tree, no screenshots needed.
GitHub's official server — repos, issues, pull requests, Actions and code security, straight from your assistant.
Issue tracking at the speed of conversation — Linear's official hosted server with OAuth and zero install.
Local repository surgery — status, diffs, commits, branches and history for any repo on disk.
Timezone sanity for AI — current time anywhere and correct conversions, without the model doing date math.