Turn YouTube into a research source for AI. MCP server for searching, transcripts, comments, and multi-video analysis.
This server provides 9 well-intentioned YouTube research tools with reasonably complete schemas and descriptions. However, there are significant gaps in parameter constraints, output schema documentation, error handling guidance, and composition clarity. Naming is generally verb-noun compliant. Descriptions are present but often lack actionable context (e.g., no guidance on when to use collect_research_sources vs search_videos). Parameter types are defined but enums are missing for constrained fields like 'order' (relevance|time), 'search_order' (relevance|uploadDate|viewCount), and 'comment_order'. Output schemas are not documented, LLMs must infer structure from model names. No recovery guidance for common failures (transcript unavailable, API quota exceeded). Security is adequate (no exposed credentials) but lacks permission declarations and audit trail specification.
Collect transcripts and comments from a channel's videos for analysis.
Collect transcripts and comments from specific video URLs for analysis.
Search YouTube and collect transcript plus comments for each usable video.
Search YouTube and collect transcript-ready sources for analysis.
Collect one video's transcript plus comments for discussion analysis.
Retrieve the current API quota usage for the day.
Fetch a YouTube transcript by URL or video ID.
Constrained parameters lack enum declarations. Fields like 'order' (relevance|time), 'search_order' (relevance|uploadDate|viewCount), and 'comment_order' should be enums, not free-text strings. LLMs will hallucinate invalid values.
Output schemas are not documented. Tool descriptions do not specify what fields the returned dict or list contains. LLMs must infer structure from Pydantic model names (VideoDiscussion, ResearchSourceCollection, etc.), which are not visible in the tool definition. Requires reverse-engineering from code.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | <=2025-11-25 | v2 |
Fetch top-level YouTube comments for one video.
Search YouTube videos and return structured metadata.
No error recovery guidance. Descriptions do not state what happens if transcript is unavailable, API quota is exceeded, or video ID is invalid. Error messages are not shown in the code, and tool descriptions provide no 'if X fails, try Y' recovery hints.
Unclear composition and mutual exclusivity. Tools collect_research_sources, collect_research_discussions, analyze_videos, and analyze_channel all fetch videos and transcripts but with different parameters and use cases. Descriptions do not explain when to use each one, forcing LLMs to guess. Example: should an agent call collect_research_sources or analyze_videos to fetch multiple video transcripts?
max_transcript_chars=0 default is ambiguous. A value of 0 typically means 'no limit' or 'skip this field', but the code truncates to max_transcript_chars characters. Zero should either be clearly documented or replaced with a None default and a description like 'Maximum transcript length in characters (0 = no limit).'
Parameter descriptions lack validation rules. For example, 'max_results' accepts an integer but does not state the valid range (is 1-100? 1-50?). 'languages' is a list of strings but does not specify expected format (language codes like 'en', 'es', or full names?). This forces LLMs to guess or guess wrong.
get_quota_status has a trivial description ('Retrieve the current API quota usage for the day.') that does not explain what the returned fields are or what action to take if quota is low. The input schema is empty {} (no parameters), which is correct, but the output structure is undocumented.
No distinction between required and optional parameters in descriptions. For example, 'languages' is marked as optional with default=null, but the description does not explain what happens if omitted (does the tool auto-detect language?). This invites incorrect usage.
No pagination support. search_videos returns a list of results but does not offer limit/offset or next_cursor for large result sets. If a search matches 10,000 videos, the tool will attempt to return all of them (capped by max_results), risking context window exhaustion.
No permission declarations or scope annotations. The rubric requires tools to declare what permissions they require (e.g., 'read:youtube_transcript', 'read:youtube_comments'). This server has none, making least-privilege agent configuration and audit trails impossible.