MCP server providing tools for interacting with YouTube API, including channel information, video search, analytics, live chat, captions, and more
Critical gaps across naming, descriptions, and schemas. Most tools lack visible input schemas in source code, only 5 of 20 tools show explicit schema definitions (get_channel_info, list_channel_videos, get_captions, analyze_captions, get_channel_analytics). Descriptions are present but generic (avg ~80 chars, well below the 194-char baseline for A+ tools). Many tool names are ambiguous: 'analyze_thumbnail_effectiveness', 'analyze_video_performance', 'analyze_captions' conflate similar operations without clear distinction. No tool annotations (readOnlyHint/destructiveHint) despite 3 WRITE tools. Error handling is absent, api_client.py returns generic {'error': '...'} dicts with no recovery guidance. No pagination support visible despite tools like search_videos and list_channel_videos that could return large result sets.
Analyze captions/subtitles for a YouTube video. This function retrieves a specific caption track for a video and performs various types of analysis on the content, such as extracting keywords, finding phrases, or generating a timeline breakdown.
Analyze the effectiveness of video thumbnails
Analyze the performance of a YouTube video
Create a live broadcast on YouTube
Get the active live chat ID for a live broadcast
Get audience demographic information for a YouTube channel. This function retrieves demographic data about a channel's audience, including age groups, gender distribution, geographic location, and viewing device types. Requires OAuth.
15 of 20 tools lack visible input schemas in source code. Only get_channel_info, list_channel_videos, get_captions, analyze_captions, and get_channel_analytics show explicit schema definitions. Remaining tools inferred from registration only, cannot verify parameter types, constraints, or descriptions.
Ambiguous tool names conflate similar operations. 'analyze_thumbnail_effectiveness', 'analyze_video_performance', and 'analyze_captions' all start with 'analyze' but operate on different resources. LLMs cannot distinguish intent. Rename to 'evaluate_thumbnail_quality', 'assess_video_metrics', 'extract_caption_insights' or similar.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 37 | 2026-07-28+ | v2 |
Get captions/subtitles for a YouTube video. This function retrieves caption tracks for a video and returns either the list of available captions or the content of a specific caption track. Caption content can be returned in different formats including plain text, SRT, or WEBVTT.
Get advanced analytics for a YouTube channel. This function retrieves YouTube Analytics data for a channel, providing creators with valuable insights about their channel performance over time. Requires OAuth.
Get information about a YouTube channel.
Get a list of channels that the specified channel is subscribed to. Note: This requires OAuth authorization and can only be used with the channel of the authorized user, not arbitrary channels.
Get messages from a live chat
Get details about a YouTube playlist
Get comments from a YouTube video
Get detailed information about a YouTube video
List videos from a specific YouTube channel.
Look up a YouTube channel
Search for videos by topic
Search for videos on YouTube
Send a message to a live chat
Upload a video to YouTube
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite 3 WRITE tools (create_live_broadcast, send_live_chat_message, upload_video). Agents cannot distinguish safe reads from destructive writes without explicit hints.
Error handling returns generic {'error': 'message'} dicts with no recovery guidance. api_client.py catches HTTPStatusError, RequestError, and JSON parse failures but provides no actionable next steps. E.g., 'User not found. Try search_users() first.' or 'Rate limited. Retry after 60 seconds.'
No pagination support visible. Tools like search_videos, list_channel_videos, get_video_comments, and get_live_chat_messages likely return large result sets but show no limit, offset, or cursor parameters. Unbounded results risk context window exhaustion.