MCP server for downloading YouTube channel videos as MP3 audio files. Provides tools to list channel videos, download multiple videos from a channel, or download individual videos.
This MCP server defines 3 tools with mixed quality. All tools have descriptions (good) and input schemas with type definitions (good). However, descriptions are brief to adequate, parameter descriptions lack detail on constraints and valid ranges, output schemas are not formally documented in schema form, and there is no error handling guidance. The tools follow a reasonable verb_noun naming pattern but lack nuance in distinguishing concerns. Security considerations around file path handling are not documented. Overall, the server lands in the fair-to-poor range due to incomplete schema documentation, missing parameter constraint details, and lack of error recovery guidance.
Скачать N последних видео YouTube-канала как MP3 (192 kbps). Файлы сохраняются в audio_folder/<имя_канала>/<id> <slug-title>.mp3. Уже скачанные файлы пропускаются.
Скачать одно YouTube-видео как MP3 (192 kbps).
Получить метаданные последних N видео YouTube-канала без скачивания.
Output schemas not formally documented. The code returns dicts with inferred fields (e.g., list_channel_videos returns {channel, count, videos}) but there is no explicit JSON Schema definition for return types. LLMs cannot reliably plan downstream operations without knowing the shape of the response.
Parameter descriptions lack constraint details. 'limit' is described as 'Сколько последних видео вернуть' (How many recent videos to return) but does not specify min/max bounds, what happens if limit exceeds channel size, or whether 0 is valid. 'audio_folder' lacks detail on path format expectations, path length limits, or symbolic link handling.
No error handling or recovery guidance. None of the tools document what happens if the channel URL is invalid, if the channel has no videos, if disk write fails, or if yt-dlp encounters a network error. LLMs receive raw exception details with no guidance on next steps.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | 2026-07-28+ | v2 |
File path security not addressed in tool descriptions. download_channel_audio and download_video_audio accept 'audio_folder' as a string. No validation against path traversal (e.g., ../../../etc/passwd) is documented. The code calls os.path.abspath and os.path.expanduser, which prevent some traversal, but the tool description does not document these safeguards or constraints.
Missing parameter 'video_id' or similar in download_video_audio. The tool takes a video_url and extracts the ID internally using yt_dlp. If the URL is malformed or yt_dlp fails, the error is not captured in the description. A 'video_id' alternative parameter would improve robustness and reduce dependencies on URL parsing.
No pagination or result limiting guidance. list_channel_videos with a high 'limit' value could return thousands of entries, bloating the response and consuming tokens. The baseline rubric recommends capping results at 20-50 and offering pagination; this tool does not mention these constraints.
Incomplete error handling for partial failures. download_channel_audio returns a dict with 'failed' list but does not guide the LLM on how to recover. Should it retry failed videos? Skip them? The description says 'already downloaded files are skipped' but does not explain retry strategy for transient network errors.