MCP server providing tools for YouTube playlist management, video metadata retrieval, transcript fetching, and video search
YouTube Stack MCP has 11 tools with mostly complete schemas and descriptions. Naming follows verb_noun convention (youtube_playlist_create, youtube_search). Descriptions are present but vary in quality (60-180 chars, below the 194-char baseline). Parameter schemas are well-typed with defaults. However, output schemas are not formally documented in the code, only inferred from docstrings. Error handling returns structured error objects but lacks recovery guidance. No tool annotations (readOnlyHint, destructiveHint) despite clear risk levels. Missing idempotency guarantees for write operations.
List available transcript languages for a video.
Get recent videos from a YouTube channel. Args: channel_url: Channel URL (https://www.youtube.com/@handle or /channel/UCxxx). max_videos: Max videos to return (default 20, cap 50).
Fetch metadata of a YouTube video (no transcript). Returns: title, channel, duration, views, likes, upload_date, description (truncated), tags.
Fetch transcript text of a YouTube video. Args: url: Full YouTube URL or 11-char video ID. lang: Preferred language code (default 'en'). Falls back to any available.
Add a single video to a playlist.
Create a new playlist on the authenticated YouTube account. Args: title: Playlist name (max 150 chars). description: Optional description (max 5000 chars). privacy: 'private' (default), 'unlisted', or 'public'. Returns: {playlist_id, title, url}
Output schemas not formally documented. Docstrings describe return values informally (e.g., '{playlist_id, title, url}') but no JSON Schema definitions. LLMs cannot reliably parse or chain results.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Tools marked as READ_ONLY or DESTRUCTIVE in metadata but not exposed to MCP protocol. Agents cannot infer safety properties.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
List videos in a playlist.
List all playlists owned by the authenticated user.
Remove a specific item from a playlist (use playlist_item_id from get_items, NOT video_id).
Search YouTube and add top results to a playlist. Uses yt-dlp for search (no API quota cost on search), then API for adding.
Search YouTube for videos matching a query. Args: query: Search query string. max_results: Max number of results (default 10, cap 25). Returns: list of {video_id, title, channel, duration, views, url}.
Error handling returns generic error objects without recovery guidance. E.g., 'HttpError: 403 Forbidden' gives no hint whether to retry, refresh auth, or ask user. Violates recovery-guide pattern.
Minimal parameter descriptions. 'youtube_playlist_list()' has empty input schema with no description. 'youtube_playlist_get_items' description is only 28 chars. Below 50-char minimum for clarity.
No idempotency guarantees documented. Write tools (create, add_video, remove_video) do not state whether repeated calls with same params are safe. Agents may retry and cause duplicates.