media-downloader
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@media-downloaderDownload the audio from this YouTube video: https://youtube.com/watch?v=xxxxx"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
多媒體下載與轉檔 MCP Server
版本:v4.0.0 | 更新日期:2026-05-19
一個由 Claude AI Agent 透過 MCP(Model Context Protocol)控制的自動化媒體處理系統。
版本紀錄
v4.0.0(2026-05-19)— 架構全面升級
P0:修復 yt-dlp 硬編碼路徑(動態偵測 venv / PATH),精簡工具 13 → 8 個
P1:統一回傳結構(error_code 標準化),SSL 驗證改為 fallback 模式,合併重複下載邏輯
P2:MCP Context 進度回報、下載歷史紀錄(自動跳過已下載)、YouTube Playlist 支援
P3:新增 3 個 MCP Resources、6 個 Prompt 操作流程、字幕下載、
query_formats格式查詢工具
v3.0.0(2026-05-19)— 專案整理與自動修復
新增
start_mcp.sh啟動包裝腳本,每次啟動自動更新 yt-dlp 並清除快取歸檔過時檔案,整理
docs/目錄
v2.1.0(2026-03-03)— 修復 YouTube JavaScript Runtime
加入
--js-runtimes node:...和--remote-components ejs:github
v2.0.0(2025-12-31)— MCP Server 大幅升級
MCP Server 增加至 13 個工具,新增 HLS / Podcast / 白名單功能
v1.0.0(2025-12-10)— 初始版本
基礎 YouTube 下載與 MP3 轉換,Claude Desktop MCP 整合
Related MCP server: webgrab-mcp
功能特色
批量下載:支援 YouTube 單影片、Playlist、頻道 URL 同時下載多個
下載進度:Agent 可即時收到每個 URL 的下載進度通知
歷史紀錄:自動跳過已下載的 URL(檔案存在才跳過)
字幕下載:下載影片時同步取得 SRT 字幕
格式查詢:下載前查詢可用畫質和字幕語言
HLS 串流下載:下載
.m3u8串流並自動轉為 MP4Podcast 下載:支援 RSS Feed 解析和直接音檔連結
格式轉換:使用 FFmpeg 轉換為 MP3,可選擇同步進行 EBU R128 響度正規化
圖片下載:下載圖片並轉換為 JPG
網路白名單:限制下載來源,防止誤操作
自動修復:每次啟動自動更新 yt-dlp、補裝套件、清除快取
MCP Resources:白名單狀態、yt-dlp 版本、下載歷史可直接查閱(不佔工具位)
MCP Prompts:6 個操作流程卡片,引導 Agent 最佳操作路徑
系統需求
Python 3.10+
yt-dlp:YouTube 及各平台影音下載
FFmpeg:音視頻轉檔
Node.js:YouTube n-challenge 解密(建議安裝)
macOS 安裝
brew install yt-dlp ffmpeg node安裝步驟
# 1. 克隆專案
git clone <your-repo-url>
cd DownloadVideoPythonProject
# 2. 建立虛擬環境
python -m venv .venv
source .venv/bin/activate
# 3. 安裝 Python 套件
pip install -r requirements.txt
# 4. 測試啟動
python server.py使用方法
Claude Desktop 整合(推薦)
編輯 Claude Desktop 配置檔:
macOS:~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"media-downloader": {
"command": "/bin/bash",
"args": [
"/你的專案路徑/DownloadVideoPythonProject/start_mcp.sh"
]
}
}
}使用
start_mcp.sh啟動:每次啟動自動更新 yt-dlp、補裝缺少套件、清除快取,解決 yt-dlp 因 YouTube 反爬蟲更新而失效的問題。
設定完成後重啟 Claude Desktop,即可透過對話使用所有功能。
CLI 工具
# 下載單一音檔
python download_cli.py "https://www.youtube.com/watch?v=xxxxx"
# 下載並指定輸出目錄
python download_cli.py "url" -o ./my_downloads
# 批量下載
python download_cli.py "url1" "url2" "url3"
# 查看完整說明
python download_cli.py --help對話使用範例
以下為在 Claude Desktop 中與 Agent 對話的實際用法。
下載 YouTube 影片音檔
下載這個 YouTube 影片的音檔:
https://www.youtube.com/watch?v=xxxxxAgent 會自動呼叫 download_media,下載過程中回報進度,完成後告知檔案位置。
下載整個 Playlist
下載這個 YouTube 播放清單的所有音檔,存到 ./music:
https://www.youtube.com/playlist?list=PLxxxxxdownload_media 支援 playlist URL,yt-dlp 自動展開逐一下載。
下載影片並附帶繁中字幕
下載這部影片,要有繁體中文字幕:
https://www.youtube.com/watch?v=xxxxxAgent 會先呼叫 query_formats 確認字幕語言,再以 subtitles=True, sub_lang="zh-TW" 下載,字幕 .srt 儲存在影片同目錄。
查詢可用格式
查詢這個影片有哪些可用畫質和字幕語言:
https://www.youtube.com/watch?v=xxxxx呼叫 query_formats,回傳格式清單(解析度、副檔名)和可用字幕語言代碼。
下載 Podcast
下載這個 Podcast 的最新一集:
https://feeds.example.com/podcast.rss下載第 3 集(index=2):
https://feeds.example.com/podcast.rss episode_index=2下載 HLS 串流
幫我下載這個 m3u8 串流,輸出為 ./downloads/video.mp4:
https://example.com/stream/index.m3u8管理白名單
列出目前的白名單規則新增 *.example.com 到白名單移除 example.com查看下載歷史
顯示最近的下載紀錄Agent 會自動讀取 data://download-history Resource,回傳最近 20 筆紀錄。
診斷 MCP 狀態
幫我診斷一下 MCP 是否正常,yt-dlp 版本是否最新在輸入框輸入 / 選取 check_mcp_health,或直接在對話中說「用 check_mcp_health 診斷」,Agent 會依序讀取版本、白名單、下載紀錄並給出建議。
MCP 工具一覽(8 個)
工具 | 說明 |
| yt-dlp 下載影音,支援 playlist、字幕、進度回報、歷史跳過 |
| FFmpeg 轉換音視頻為 MP3(可加 |
| 下載圖片並轉換為 JPG |
| Podcast 下載(RSS Feed 或直接音檔連結) |
| HLS (.m3u8) 串流下載並轉為 MP4 |
| 純 HTTP 下載音檔(不依賴 yt-dlp) |
| 白名單查詢、新增、移除、啟用/停用 |
| 查詢 URL 可用的影片格式與字幕語言 |
規劃中(尚未實作):音量調整工具
adjust_audio(對既有音檔調整音量)。設計細節見 P4 任務文件。
MCP Resources(3 個,不佔工具位)
Resources 是唯讀資料,需透過 Claude Desktop UI 手動附加到對話中才能讓 Agent 讀取。 Agent 不會主動偵測並讀取 Resource,自然語言也無法直接觸發(yt-dlp 版本、下載歷史都沒有對應工具)。
URI | 說明 |
| 白名單規則和啟用狀態 |
| yt-dlp 版本號和執行路徑 |
| 最近 20 筆下載紀錄 |
使用步驟(Claude Desktop)
在對話輸入框左下角點擊
+按鈕選擇 「Add from MCP」 或 「MCP Resources」
找到
media-downloader伺服器,選取要附加的 ResourceResource 會顯示為對話中的附件,Agent 即可讀取其內容
輸入問題,例如:
根據剛才附加的 Resource,yt-dlp 目前版本是多少?根據附加的下載歷史,最近下載了哪些檔案?注意:Claude Desktop UI 的 Resource 入口位置隨版本不同可能有差異,若找不到
+選單,可改用下方「直接指定 URI」的方式。
備用方式:直接在對話中指定 URI
若 UI 無法附加,可明確告訴 Agent 要讀取哪個 Resource:
請使用 MCP resource 讀取 status://ytdlp-version,告訴我 yt-dlp 版本請用 MCP resource 讀取 data://download-history,列出最近的下載紀錄MCP Prompts(6 個)
Prompts 是預設的操作流程說明,有兩種使用方式:
方式一:透過 Claude Desktop UI(推薦)
+ 按鈕:
點擊對話輸入框左下角的
+按鈕選擇 「MCP Prompts」 或對應的
media-downloader項目點選 Prompt 名稱後自動帶入流程說明
/ 斜線指令:
在對話輸入框直接輸入
/從彈出清單找到 Prompt 名稱並點選
首次設定或修改 Prompt 後需重啟 Claude Desktop 才會出現在清單中。
方式二:在對話中直接呼叫
使用 batch_download_youtube 流程,下載這幾個 URL:
https://www.youtube.com/watch?v=aaa用 check_mcp_health 診斷一下目前 MCP 狀態Agent 先取得 Prompt 的步驟說明,再依序呼叫對應工具。
Prompt | 適用情境 |
| YouTube 批量下載音檔的完整流程 |
| 下載影片同時取得字幕 |
| Podcast RSS 整季下載 |
| HLS 串流下載 |
| 白名單完整設定流程(含常用規則建議) |
| 診斷 MCP 狀態(版本 / 白名單 / 歷史紀錄) |
專案結構
DownloadVideoPythonProject/
├── server.py # MCP 伺服器主程式(8 Tools + 3 Resources + 6 Prompts)
├── start_mcp.sh # 啟動包裝腳本(自動更新 yt-dlp)
├── download_cli.py # CLI 下載工具
├── requirements.txt # Python 套件依賴
├── whitelist.json # 白名單設定檔
├── claude_desktop_config.example.json # Claude Desktop 設定範例
├── tools/
│ ├── podcast_downloader.py # Podcast 下載
│ └── hls_downloader/ # HLS 串流下載模組
├── utils/
│ ├── audio_downloader.py # 音檔直接下載(SSL fallback)
│ ├── download_history.py # 下載歷史紀錄管理
│ ├── path_resolver.py # yt-dlp / Node.js 路徑偵測、YouTube player client、檔名清洗參數
│ ├── response.py # 統一回傳結構(success_response / error_response)
│ ├── whitelist_validator.py # 白名單驗證
│ ├── rss_parser.py # RSS Feed 解析
│ ├── loudnorm.py # 兩趟式 EBU R128 響度正規化
│ └── sanitizer.py # 檔名清洗、Unicode 正規化與路徑還原
├── docs/
│ ├── shared/ # 需求文件(P0–P3 全部完成)
│ ├── guides/ # 使用指南(白名單、HLS)
│ ├── spec/ # 功能規格書
│ ├── issues/ # 問題紀錄
│ └── archive/ # 歸檔(過時文件與腳本)
├── downloads/ # 下載檔案目錄
└── images/ # 圖片儲存目錄常見問題
yt-dlp 下載失敗(YTDLP_FAILED)
重啟 Claude Desktop,start_mcp.sh 會自動執行 pip install --upgrade yt-dlp 和 yt-dlp --rm-cache-dir。
手動更新:
source .venv/bin/activate
pip install --upgrade yt-dlp
yt-dlp --rm-cache-dirYouTube 下載失敗:n challenge solving failed / 只抓得到縮圖
現象:
WARNING: [youtube] xxxxx: n challenge solving failed: Some formats may be missing.
WARNING: Only images are available for download. use --list-formats to see them
ERROR: [youtube] xxxxx: Requested format is not available.原因:YouTube 對播放連結加了一層「n 參數」JS 加密挑戰,yt-dlp 需要本機安裝 JS runtime(Node.js 或 Deno)才能解出真正可用的影音網址。若機器上沒有可用的 JS runtime,yt-dlp 只能拿到縮圖,導致指定的 mp4/m4a 格式全部找不到。
排除步驟(2026-07-13 實測有效):
確認 yt-dlp 是最新版:
pip install -U yt-dlp(若已是最新版,此步驟不會解決問題,需繼續下一步)安裝 Deno 作為 JS challenge solver:
brew install deno安裝完成後 重新開一個終端機視窗(讓新 shell 讀到含
deno的 PATH),yt-dlp 不需要加任何參數就會自動偵測並使用 Deno:
[youtube] [jsc:deno] Solving JS challenges using deno看到這行代表 n challenge 已成功解開,下載會恢復正常。
檔案明明存在,轉檔卻說找不到
現象:ls 列得出檔案,但照著螢幕把檔名打一次就失敗:
ls: 睡前故事 EP143 《我從哪裡來?》 生命教育|兒童性教育|家庭生活.mp4: No such file or directory原因:影片標題夾帶 NBSP(U+00A0)等不可見空白,寫進檔名後與半形空格完全無法分辨。用 repr() 即可現形:
python3 -c "import os; [print(repr(f)) for f in os.listdir('.')]"處理:2026-09-15 起下載時已自動清洗,新檔案不會再有此問題(需重啟 MCP server)。此日期之前下載的舊檔案檔名仍帶不可見字元,但 convert_to_mp3 與 media-processor 技能腳本已能自動比對還原,可直接沿用。完整分析見 ISSUE-004。
轉檔後音檔長度大幅縮短(大寫副檔名 .MP3)
現象:對 .MP3(大寫)檔案轉檔後,原始檔案內容大量消失,但工具回報成功:
轉檔前: 2760832 bytes, 600.0 秒
轉檔後: 32262 bytes, 6.9 秒原因:macOS 檔案系統不分大小寫,song.MP3 與 song.mp3 是同一個檔案,舊版以字串比較無法判斷,導致 FFmpeg 同時讀寫同一檔案。
處理:2026-09-15 起已改用 os.path.samefile() 判斷,不會再發生(需重啟 MCP server)。已受損的檔案無法復原,若先前曾對大寫副檔名的 MP3 轉檔,請檢查長度並從原始來源重新取得。完整分析見 ISSUE-005。
Claude Desktop 無法連接 MCP Server
確認
claude_desktop_config.json中的路徑正確(絕對路徑)按 ⌘Q 完全退出後重開 Claude Desktop
查看日誌:
tail -f ~/Library/Logs/Claude/mcp-server-media-downloader.log白名單驗證失敗(WHITELIST_DENIED)
在 Claude Desktop 輸入:
列出白名單規則,並把 youtube.com 和 *.googlevideo.com 加入詳細說明:白名單指南
HLS 下載相關問題
參閱:HLS 設定指南
重複下載同一個 URL
download_media 會自動查詢歷史紀錄,已下載且檔案存在時回傳 status: skipped,不重複下載。若需強制重新下載,請先刪除 download_history.json。
安全注意事項
僅下載有版權或授權的內容
建議啟用白名單功能,限制下載來源
download_history.json已排除於 git 追蹤之外
授權
MIT License
This server cannot be deployed
Maintenance
Related MCP Connectors
An MCP server that gives any LLM or agent clean YouTube transcripts on demand: a single video, a whole channel, or a playlist, plus AI cleanup of auto-generated captions. API-key auth, credit-based, same backend as the public v1 API. Get a free API key with 25 free credits at youtubetranscriptdownload.com/account.
Download YouTube, TikTok, Vimeo, SoundCloud and 6 more platforms from any MCP AI chatbot.
An MCP server that provides tools to discover and retrieve podcast episodes transcripts.
MCP server for the FFmpeg Micro video transcoding API — create, monitor, download transcodes.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceMCP server for downloading videos and audio from YouTube and hundreds of other sites using yt-dlp.MIT
- AlicenseNot gradedqualityCmaintenanceMCP server for web content downloading supporting videos, articles, danmaku, comments, and copy protection bypass across 1700+ sites.4MIT
- FlicenseAqualityDmaintenanceMCP server wrapping yt-dlp for downloading videos and audio from URLs, providing tools to check dependencies, retrieve video metadata, and perform downloads.4-
- FlicenseNot gradedqualityCmaintenanceMCP server for downloading videos and audio from 1000+ sites, with YouTube search, playlist support, and tools for video/audio extraction, compatible with Claude, Cursor, and other AI agents.-