YouTube MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| scopes | No | Comma-separated OAuth scopes (default includes readonly; add youtube.force-ssl and youtube.upload for full features) | |
| client_id | Yes | OAuth 2.0 Client ID from Google Cloud Console | |
| client_secret | Yes | OAuth 2.0 Client Secret from Google Cloud Console | |
| oauth_redirect_uri | No | Redirect URI for OAuth (default: http://localhost) |
Capabilities
Features and capabilities supported by this server
| 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 |
|---|---|
| list_captionsA | Retrieves a list of caption tracks for a YouTube video. Returns an empty list if no captions exist, or fails if the video ID is invalid or not found. Args: video_id: The YouTube video ID for which to return caption tracks. part: Comma-separated list of caption resource parts to include. Valid parts are 'id' and 'snippet'. Default: 'id,snippet'. Returns: Object with 'data' (caption list), 'error' (if any), and 'successful' boolean. |
| download_caption_trackA | Downloads a specific YouTube caption track, which must be owned by the authenticated user, and returns its content as text. Args: id: Unique YouTube-assigned ID of the caption track to download (from list_captions response). tfmt: Desired format: 'srt' (SubRip), 'sbv' (SubViewer), 'vtt' (WebVTT). Default: 'srt'. Returns: Object with 'data' (contains 'content' with caption text), 'error' (if any), and 'successful' boolean. |
| get_channel_activitiesA | Gets recent activities from a YouTube channel including video uploads, playlist additions, likes, and other channel events. Args: channel_id: The YouTube channel ID to retrieve activities for. Channel IDs typically start with 'UC'. max_results: Maximum number of activities to return (0-50). page_token: Pagination token from a previous response to get the next page. part: Comma-separated list of activity resource properties to include (e.g., 'snippet', 'contentDetails', 'id'). published_after: Return activities published after this date-time (RFC 3339 format: YYYY-MM-DDTHH:MM:SSZ). published_before: Return activities published before this date-time (RFC 3339 format: YYYY-MM-DDTHH:MM:SSZ). Returns: Object with 'data', 'error' (if any), and 'successful' boolean. |
| get_channel_id_by_handleA | Retrieves the YouTube channel ID for a specific YouTube channel handle. Args: channel_handle: The YouTube channel handle (e.g., @Google) for which to retrieve the corresponding channel ID. May include or omit the '@' symbol. Returns: Object with 'data' (channel info including id), 'error' (if any), and 'successful' boolean. |
| get_channel_statisticsA | Gets detailed statistics for YouTube channels including subscriber counts, view counts, and video counts. Args: id: Comma-separated list of YouTube channel IDs. Channel IDs typically start with 'UC'. part: Comma-separated list of channel resource properties to include. Use 'statistics' for subscriber count. Default: 'statistics,snippet'. Returns: Object with 'data' (channel stats), 'error' (if any), and 'successful' boolean. |
| list_channel_videosA | Lists videos from a specified YouTube channel, ensuring results are of type 'video'. Args: channel_id: The unique ID of the YouTube channel for which videos are to be retrieved. max_results: Maximum number of videos to return per page (default 5, max 50). page_token: Token for pagination; use nextPageToken from a previous response. part: Search resource properties to include; must be 'snippet' for this action. Returns: Object with 'data' (video list), 'error' (if any), and 'successful' boolean. |
| list_user_playlistsA | Retrieves playlists owned by the authenticated user, implicitly using mine=true. Args: max_results: Maximum number of playlists to return (0-50). Default: 5. page_token: Token for pagination to retrieve a specific page of results. part: Comma-separated list of playlist resource properties to include. Common values are 'snippet', 'id', and 'contentDetails'. Default: 'snippet,contentDetails'. Returns: Object with 'data' (playlist list), 'error' (if any), and 'successful' boolean. |
| search_youtubeA | Searches YouTube for videos, channels, or playlists using a query term, returning the raw API response. Args: q: Search query term. Supports: basic text ('machine learning'), exact phrases ('"exact phrase"'), exclusions ('python -snake'), multiple terms ('AI OR ML'), channel search ('@channelhandle' or channel name). max_results: Maximum number of items to return per page (0-50). Default: 5. page_token: Pagination token from a previous response's nextPageToken or prevPageToken. part: Comma-separated list of search resource properties (e.g. 'id', 'snippet') to include. type: Restrict search to 'video', 'channel', or 'playlist'; comma-separate for multiple. Returns: Object with 'data' (raw API response), 'error' (if any), and 'successful' boolean. |
| list_user_subscriptionsA | Retrieves the authenticated user's YouTube channel subscriptions, allowing specification of response parts and pagination. Args: max_results: Maximum number of subscription items to return per page (0-50). Default: 5. page_token: Token for a specific page of results, obtained from a previous response. part: Comma-separated subscription resource parts to include. Valid parts are 'id', 'snippet', 'contentDetails', and 'subscriberSnippet'. Default: 'snippet,contentDetails'. Returns: Object with 'data' (subscription list), 'error' (if any), and 'successful' boolean. |
| subscribe_to_channelA | Subscribes the authenticated user to a specified YouTube channel, identified by its unique channelId which must be valid and existing. Args: channel_id: Unique identifier (ID) of the YouTube channel to subscribe to (typically starts with 'UC'). Returns: Object with 'data' (subscription resource), 'error' (if any), and 'successful' boolean. |
| update_thumbnailA | Sets the custom thumbnail for a YouTube video using an image from thumbnailUrl. The authenticated user must have permission to edit the video. Args: thumbnail_url: Publicly accessible URL of the new thumbnail image. Must be JPG, GIF, or PNG; under 2MB. Recommended: 16:9, 1280x720 (min 640px width). video_id: Identifier of the YouTube video for which to update the thumbnail. Returns: Object with 'data' (thumbnail resource), 'error' (if any), and 'successful' boolean. |
| update_videoA | Updates metadata for a YouTube video identified by videoId, which must exist. An empty list for tags removes all existing tags. Omitted fields are left unchanged. Args: video_id: The video's unique YouTube ID (typically found in its URL). title: New video title. No change if omitted. description: New video description. No change if omitted. tags: New tags, replacing all existing. An empty list removes all. No change if omitted. category_id: New YouTube category ID. No change if omitted. privacy_status: New privacy status ('public', 'private', or 'unlisted'). No change if omitted. Returns: Object with 'data' (updated video resource), 'error' (if any), and 'successful' boolean. |
| upload_videoA | Uploads a video from a local file path to a YouTube channel. The video file must be in a YouTube-supported format (e.g. MP4, MOV, AVI). Args: video_file_path: Local file path (absolute or relative) of the video to upload. title: The title for the video. description: Detailed description of the video content. tags: List of keyword tags (strings) for the video. category_id: YouTube category ID (e.g. '22' for People & Blogs). privacy_status: 'public', 'private', or 'unlisted'. Returns: Object with 'data' (uploaded video resource), 'error' (if any), and 'successful' boolean. |
| video_detailsA | Retrieves specified information parts (e.g., snippet, contentDetails, statistics) for a YouTube video, identified by its id. Args: id: The YouTube video ID (typically 11 characters) for which to retrieve details. part: Comma-separated list of video resource parts to include. Valid parts: 'snippet', 'contentDetails', 'statistics', 'status', 'player', etc. Default: 'snippet,contentDetails,statistics'. Returns: Object with 'data' (video resource), 'error' (if any), and 'successful' boolean. |
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/DivyaV18/Youtube-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server