Enhanced YouTube MCP Server for comprehensive video data extraction and analysis
12 tools with clear naming (verb-first convention: get_, search_, analyze_, batch_), all with descriptions. However, descriptions are generic (100-150 chars average) and lack LLM-optimized depth. Input schemas are present but lack required field specifications, minimum/maximum constraints on numeric parameters, and dependency documentation between parameters. Output schemas are not visible in the source code provided. Error handling is not documented in tool definitions. Tool composition is reasonable (single responsibility mostly maintained), but tools like batch_extract_urls and analyze_video_engagement could be better scoped. Critical gaps: no pagination guidance in list-returning tools, no documented return schemas, missing constraint specifications on enums.
Analyze engagement metrics for a YouTube video with benchmarking and performance assessment.
Process multiple YouTube URLs in batch for efficient extraction of video or channel data.
Extract detailed information about a YouTube channel including subscriber count, video count, and description.
Get current configuration settings for the YouTube extractor.
Check the health status of the YouTube extractor including yt-dlp version and cache status.
Extract information about a YouTube playlist including all videos and metadata.
Output schemas not documented. Tool definitions lack explicit return type documentation (e.g., what fields get_video_info returns, what structure batch_extract_urls produces). LLMs cannot plan downstream tool calls without knowing what data will be available.
Pagination not documented for list-returning tools. get_video_comments (max_comments=20 default), search_youtube (max_results default 10), get_trending_videos (max_results default 20), and batch_extract_urls lack explicit pagination guidance, offset/cursor parameters, and total_count in responses. Without pagination metadata, agents cannot reliably fetch large result sets.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 54 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 32 | - | v1 |
Get trending videos for a specified country or region.
Extract comments from a YouTube video with optional filtering and sorting capabilities.
Extract comprehensive information about a YouTube video including metadata, statistics, and engagement metrics.
Extract transcript or subtitles from a YouTube video with timing information.
Search for specific text within a video's transcript with timestamp results.
Search YouTube for videos, channels, or playlists with configurable result count and filters.
Numeric constraints missing. max_comments, max_results parameters lack min/max bounds (e.g., 'max_comments: max 50, default 20'). Unbounded integers allow LLMs to pass absurd values (e.g., max_comments=10000) that could timeout or overwhelm the API.
Descriptions lack LLM-optimized depth. Average description length ~90 chars (target 50-200). Examples: 'Extract transcript or subtitles from a YouTube video with timing information' does not explain WHEN to use this vs get_video_info, WHAT format the transcript takes, or prerequisites (e.g., does the video need captions enabled?).
Error handling not documented. No tool descriptions mention what errors can occur (e.g., 'Invalid URL', 'Video not available', 'Rate limit exceeded') or how the LLM should recover. get_video_comments might fail if the video has disabled comments, the tool definition does not hint at this.
analyze_video_engagement is ambiguous. Does it return per-video metrics only, or does it compare against benchmarks? Description says 'with benchmarking and performance assessment' but does not clarify what data is returned or what 'performance assessment' means. Violates the rule that 'update_ticket_status' is clear but 'modify_ticket' is vague, this tool title leaves the output unclear.
batch_extract_urls parameter 'extraction_type' is underdocumented. The enum [video, channel] is specified but the description does not clarify what fields differ between extraction types, whether the output structure changes, or whether batch results return a list with status per item or a single aggregated result. This forces the LLM to guess at output format.
get_extractor_health and get_extractor_config have empty input schemas ({}). This is acceptable for no-parameter tools, but descriptions are vague ('Check the health status...', 'Get current configuration...') without explaining what specific fields will be returned or their meaning.
URL parameter handling is inconsistent. get_video_info, get_channel_info, and get_playlist_info all accept 'url' but do not document what URL formats are valid (e.g., 'https://www.youtube.com/watch?v=ABC123' vs 'youtu.be/ABC123' vs 'youtube.com/user/CHANNEL'). Code includes validate_youtube_url() and normalize_channel_url() but tool descriptions do not mention URL normalization or what happens if an invalid format is passed.
No tool composition guidance. The prompts feature exists (analyze-video prompt in code), suggesting multi-step workflows. However, tool descriptions do not hint at dependencies (e.g., 'call search_youtube first to find a video, then pass the URL to get_video_info'). LLMs must infer chains without guidance.