Custom Model Context Protocol (MCP) server for YouTube Studio analytics, video metadata management, and transcript extraction.
Server has 8 tools with complete schemas and descriptions. Naming follows verb_noun convention (youtube_*). Descriptions are present and substantive (100-250 chars avg), explaining WHAT and WHEN. However, parameter descriptions lack actionable constraints (enums, ranges, formats). Output schemas are not documented. Error handling is absent, no recovery guidance, no validation feedback. Missing idempotency hints on write operations. No tool annotations (readOnlyHint/destructiveHint). Composition is sound: tools are single-responsibility and chainable (video_id flows through multiple tools). Security: no visible credential leakage, but no audit logging or permission gates shown.
Fetch performance analytics reports for the channel via YouTube Analytics API. Args: start_date: Start date in 'YYYY-MM-DD' format (e.g. '2026-08-01'). Defaults to 30 days ago. end_date: End date in 'YYYY-MM-DD' format. Defaults to 2 days ago (due to YouTube API reporting lag). dimensions: Dimension to group by, such as 'day', 'month', or None for overall total.
Retrieve high-level statistics and metadata for the authenticated YouTube channel. Returns subscriber count, total view count, video count, and channel profile information.
Retrieve top comments on a video for sentiment evaluation or drafting responses. Args: video_id: The 11-character YouTube video ID. max_results: Maximum comments to retrieve (default: 20).
Extract subtitles/transcript from a YouTube video for AI summarization and content analysis. Args: video_id_or_url: YouTube URL (e.g. 'https://www.youtube.com/watch?v=...' or 11-character ID). languages: Preferred language codes in order of priority (default: ['vi', 'en']). include_timestamps: Whether to prefix lines with timestamps [MM:SS].
Parameter constraints missing: date formats, enum values, numeric ranges not formally declared. E.g., 'dimensions' in youtube_analytics_report accepts 'day', 'month', or None but no enum constraint; 'privacy_status' in youtube_update_video lists valid values in description only, not as enum.
Output schemas not documented. Tools return Dict[str, Any] or List[Dict[str, Any]] with no field documentation. LLMs cannot plan downstream calls or extract specific fields without knowing response structure.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2026-07-28+ | v2 |
Retrieve current metadata and settings for a specific video. Returns title, full description, list of tags, category ID, privacy status, and view/like stats.
List recent videos uploaded to the channel (including public, unlisted, and private videos). Args: max_results: Number of recent videos to retrieve (between 1 and 50).
Update title, description, tags, category, and/or privacy status for a video on YouTube Studio. Only provide the fields you wish to modify. Unspecified fields will retain their existing values. Args: video_id: The 11-character YouTube video ID to edit. title: New video title. description: New video description. tags: Complete replacement list of video tags/keywords. category_id: Numeric YouTube video category ID (e.g. '27' for Education, '28' for Science & Tech). privacy_status: One of 'public', 'unlisted', or 'private'.
Fetch deep performance analytics for a single video (views, watch time, retention, shares). Args: video_id: The 11-character YouTube video ID. start_date: Start date in 'YYYY-MM-DD' format. end_date: End date in 'YYYY-MM-DD' format.
No error handling or recovery guidance. Tools do not document what errors can occur, whether they are retryable, or what the LLM should do next. E.g., 'video_id not found' or 'authentication failed' have no guidance.
Destructive tool (youtube_update_video) lacks confirmation or dry-run support. No idempotentHint or destructiveHint annotation. Agents cannot safely preview changes before committing.
No pagination support documented. youtube_list_videos accepts max_results but no offset/cursor or total_count returned. Large result sets risk context window exhaustion.