YouTube MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| youtube_authA | Initiate OAuth 2.0 authentication flow. Opens a browser window for Google OAuth consent. Required before using any tools that access private channel data or analytics. |
| youtube_auth_statusC | Check current authentication status and quota usage. |
| youtube_get_channelA | Get channel details by channel ID, handle (@username), or the authenticated user's channel. Args: channel_id: YouTube channel ID (e.g., "UCxxxxxxx") handle: Channel handle (e.g., "@mkbhd") mine: If True, get the authenticated user's own channel |
| youtube_list_videosA | List videos from a channel or playlist. For a channel, uses the channel's uploads playlist. Returns video summaries with stats, sorted by most recent. Args: channel_id: Channel ID to list videos from playlist_id: Playlist ID to list videos from (overrides channel_id) mine: If True, list the authenticated user's videos max_results: Number of videos to return (max 50) |
| youtube_get_videoB | Get detailed metadata and statistics for a specific video. Args: video_id: YouTube video ID (e.g., "dQw4w9WgXcQ") |
| youtube_searchA | Search YouTube for videos, channels, or playlists. Costs 100 quota units per call — use sparingly. Args: query: Search query string search_type: Type of results: "video", "channel", or "playlist" channel_id: Limit search to a specific channel max_results: Number of results (max 50) order: Sort order: "relevance", "date", "viewCount", "rating" published_after: ISO 8601 datetime (e.g., "2025-01-01T00:00:00Z") published_before: ISO 8601 datetime region_code: ISO 3166-1 alpha-2 country code (e.g., "US") |
| youtube_search_suggestionsB | Get YouTube autocomplete/search suggestions for a query. Useful for SEO keyword research — shows what people are searching for. No quota cost (uses YouTube's public suggest endpoint). Args: query: Partial search query to get suggestions for language: Language code (e.g., "en", "es") |
| youtube_trendingA | Get currently trending videos on YouTube. Costs 1 quota unit. Args: region_code: ISO 3166-1 alpha-2 country code (e.g., "US", "GB", "IN") category_id: Filter by category ID (e.g., "28" for Science & Technology) max_results: Number of videos to return (max 50) |
| youtube_get_categoriesA | List available YouTube video categories for a region. Useful for filtering trending videos or setting video category on upload. Costs 1 quota unit. Args: region_code: ISO 3166-1 alpha-2 country code (e.g., "US") |
| youtube_list_captionsB | List available caption tracks for a video you own. Requires OAuth. Only works for videos on the authenticated user's channel. Args: video_id: YouTube video ID |
| youtube_get_transcriptA | Get the transcript/captions for a video. By default uses youtube-transcript-api (works for any public video, no quota cost). Set use_official_api=True to use the official Data API (only for your own videos, costs quota units). Args: video_id: YouTube video ID language: Preferred language code (e.g., "en", "es", "ja") use_official_api: If True, use official API (own videos only) |
| youtube_analytics_overviewB | Get channel-level analytics summary. Returns views, watch time, subscribers gained/lost, likes, comments, and shares for the date range. Args: start_date: Start date (YYYY-MM-DD). Defaults to 28 days ago. end_date: End date (YYYY-MM-DD). Defaults to today. |
| youtube_analytics_top_videosB | Get top-performing videos by views. Returns per-video metrics sorted by view count, excluding Shorts. Args: start_date: Start date (YYYY-MM-DD). Defaults to 28 days ago. end_date: End date (YYYY-MM-DD). Defaults to today. max_results: Number of videos to return (max 200). |
| youtube_analytics_top_shortsB | Get top-performing Shorts by views. Returns per-Short metrics sorted by view count. Args: start_date: Start date (YYYY-MM-DD). Defaults to 28 days ago. end_date: End date (YYYY-MM-DD). Defaults to today. max_results: Number of Shorts to return (max 200). |
| youtube_analytics_video_detailB | Get detailed analytics for a specific video over time. Returns daily metrics for the specified video. Args: video_id: YouTube video ID start_date: Start date (YYYY-MM-DD). Defaults to 28 days ago. end_date: End date (YYYY-MM-DD). Defaults to today. |
| youtube_analytics_traffic_sourcesB | Get traffic source breakdown — how viewers find your content. Shows views from search, suggested, browse, external, etc. Args: start_date: Start date (YYYY-MM-DD). Defaults to 28 days ago. end_date: End date (YYYY-MM-DD). Defaults to today. video_id: Optional video ID to filter to a specific video. |
| youtube_analytics_demographicsA | Get audience demographics — age group and gender breakdown. Args: start_date: Start date (YYYY-MM-DD). Defaults to 28 days ago. end_date: End date (YYYY-MM-DD). Defaults to today. |
| youtube_analytics_geographyC | Get views by country. Args: start_date: Start date (YYYY-MM-DD). Defaults to 28 days ago. end_date: End date (YYYY-MM-DD). Defaults to today. max_results: Number of countries to return. |
| youtube_analytics_dailyA | Get daily performance metrics over time. Useful for spotting trends and finding optimal posting days. Returns one row per day with views, watch time, subs, likes, shares. Args: start_date: Start date (YYYY-MM-DD). Defaults to 28 days ago. end_date: End date (YYYY-MM-DD). Defaults to today. |
| youtube_analytics_day_of_weekB | Get aggregated performance by day of week. Fetches daily data and aggregates by weekday to show which days perform best. Useful for scheduling uploads. Args: start_date: Start date (YYYY-MM-DD). Defaults to 90 days ago. end_date: End date (YYYY-MM-DD). Defaults to today. |
| youtube_analytics_content_type_breakdownB | Compare performance of Shorts vs long-form videos vs live streams. Args: start_date: Start date (YYYY-MM-DD). Defaults to 28 days ago. end_date: End date (YYYY-MM-DD). Defaults to today. |
| youtube_analytics_revenueB | Get revenue breakdown. Requires the channel to be in the YouTube Partner Program (monetized). Returns estimated revenue, ad revenue, and YouTube Premium revenue. Args: start_date: Start date (YYYY-MM-DD). Defaults to 28 days ago. end_date: End date (YYYY-MM-DD). Defaults to today. |
| youtube_analytics_revenue_by_videoB | Get revenue per video, sorted by highest revenue. Requires the channel to be in the YouTube Partner Program. Args: start_date: Start date (YYYY-MM-DD). Defaults to 28 days ago. end_date: End date (YYYY-MM-DD). Defaults to today. max_results: Number of videos to return (max 200). |
| youtube_analytics_retentionB | Get audience retention curve for a specific video. Returns 100 data points showing what percentage of viewers are still watching at each point in the video. Also includes relative retention compared to similar-length videos on YouTube. Args: video_id: YouTube video ID start_date: Start date (YYYY-MM-DD). Defaults to 28 days ago. end_date: End date (YYYY-MM-DD). Defaults to today. |
| youtube_upload_videoA | Upload a video to YouTube. Costs 1,600 quota units. Video is uploaded as private by default. Args: file_path: Absolute path to the video file title: Video title (max 100 characters) description: Video description (max 5,000 characters) tags: List of tags category_id: YouTube category ID (default "22" = People & Blogs) privacy_status: "private", "public", or "unlisted" publish_at: ISO 8601 datetime to schedule publishing (requires privacy_status="private") |
| youtube_update_videoB | Update metadata for an existing video. Only provided fields are updated; others remain unchanged. Args: video_id: YouTube video ID title: New title (max 100 characters) description: New description (max 5,000 characters) tags: New tags (replaces existing tags) category_id: New category ID privacy_status: "private", "public", or "unlisted" |
| youtube_set_thumbnailA | Upload a custom thumbnail for a video. Args: video_id: YouTube video ID file_path: Absolute path to the thumbnail image (JPEG, PNG, GIF, BMP; max 2MB) |
| youtube_delete_videoA | Delete a video. This action is irreversible. Args: video_id: YouTube video ID to delete |
| youtube_list_playlistsB | List playlists for a channel. Args: channel_id: Channel ID to list playlists from mine: If True, list the authenticated user's playlists max_results: Number of playlists to return (max 50) |
| youtube_create_playlistC | Create a new playlist. Args: title: Playlist title description: Playlist description privacy_status: "private", "public", or "unlisted" |
| youtube_add_to_playlistC | Add a video to a playlist. Args: playlist_id: Playlist ID to add the video to video_id: Video ID to add position: Position in the playlist (0-based). Defaults to end. |
| youtube_remove_from_playlistA | Remove a video from a playlist. Use youtube_list_playlists or the Data API to find the playlist_item_id. Args: playlist_item_id: The playlist item ID (not the video ID) |
| youtube_list_commentsB | List top-level comments on a video. Args: video_id: YouTube video ID max_results: Number of comment threads to return (max 100) order: Sort order: "relevance" or "time" |
| youtube_post_commentC | Post a new top-level comment on a video. Args: video_id: YouTube video ID to comment on text: Comment text |
| youtube_reply_to_commentC | Reply to an existing comment. Args: parent_id: The comment ID to reply to (from youtube_list_comments) text: Reply text |
| youtube_reporting_list_typesA | List available report types that can be scheduled. Common report types:
|
| youtube_reporting_create_jobB | Schedule a reporting job. Reports will be generated daily. Once created, YouTube will start generating daily CSV reports for this report type. It may take 24-48 hours for the first report to appear. Args: report_type_id: Report type ID (from youtube_reporting_list_types) name: Optional human-readable name for the job |
| youtube_reporting_list_jobsC | List all active reporting jobs. |
| youtube_reporting_list_reportsB | List available reports for a job. Reports are generated daily and available for 60 days. Args: job_id: Job ID (from youtube_reporting_create_job or youtube_reporting_list_jobs) |
| youtube_reporting_downloadA | Download a report CSV. Returns the CSV content as text. For large reports, the content may be truncated. Args: download_url: Download URL from youtube_reporting_list_reports |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/felipefontoura/youtube-studio-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server