ytmcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| YTMCP_AUTH_MODE | No | Authentication mode. Can be 'cookie', 'oauth', or 'auto' (default). When 'auto', the server picks the method automatically based on available credentials. | auto |
| YTMCP_COOKIE_FILE | No | Path to a cookies.txt file or JSON export for browser cookie authentication (Option A). | |
| YTMCP_OAUTH_CLIENT_ID | No | OAuth 2.0 client ID from Google Cloud Console for OAuth device flow (Option B). | |
| YTMCP_OAUTH_CLIENT_SECRET | No | OAuth 2.0 client secret from Google Cloud Console for OAuth device flow (Option B). |
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 |
|---|---|
| upload_videoA | Upload a video file to the authenticated YouTube channel. Args: file_path: Absolute path to the video file on the local machine. title: Video title (max 100 chars). description: Video description text. tags: Optional list of tags/keywords. visibility: One of 'public', 'unlisted', 'private', 'scheduled'. category_id: YouTube category id (default '22' = People & Blogs). publish_at: ISO-8601 datetime; required when visibility='scheduled'. made_for_kids: COPPA compliance flag. thumbnail_path: Optional path to a custom thumbnail image. |
| update_video_metadataB | Update the metadata of an existing video. Args: video_id: The YouTube video id to edit. title: New title (optional). description: New description (optional). tags: New tag list (optional). category_id: New category id (optional). default_language: New default language code, e.g. 'en' (optional). |
| set_video_visibilityB | Change a video's visibility. Args: video_id: The YouTube video id. visibility: One of 'public', 'unlisted', 'private', 'scheduled'. publish_at: ISO-8601 datetime; required for 'scheduled'. |
| delete_videoB | Permanently delete a video from the channel. Args: video_id: The YouTube video id to delete. |
| get_video_infoB | Get detailed information about a video (title, views, description). Args: video_id: The YouTube video id. |
| search_videosC | Search YouTube for videos. Args: query: Search keywords. limit: Maximum number of results (default 20). |
| list_channel_videosB | List a channel's uploaded videos (newest first). Args: channel_id: The channel id (starts with 'UC'). limit: Maximum number of videos to return. |
| create_playlistB | Create a new playlist on the channel. Args: title: Playlist title. description: Playlist description. visibility: One of 'public', 'unlisted', 'private'. |
| list_playlistsC | List all playlists belonging to a channel. Args: channel_id: The channel id (starts with 'UC'). |
| add_video_to_playlistC | Add a video to a playlist. Args: playlist_id: Target playlist id (starts with 'PL'). video_id: Video id to add. |
| remove_video_from_playlistC | Remove a video from a playlist. Args: playlist_id: Target playlist id. video_id: Video id to remove. |
| delete_playlistC | Delete a playlist. Args: playlist_id: Playlist id to delete. |
| list_commentsB | List top-level comments for a video. Args: video_id: The YouTube video id. limit: Maximum number of comments to return. |
| reply_to_commentB | Reply to a comment on a video. Args: video_id: The video id the comment belongs to. comment_id: The comment to reply to. text: Reply text. |
| moderate_commentB | Moderate a comment (approve, hold, or reject). Args: comment_id: Target comment id. action: One of 'published', 'heldForReview', 'rejected'. |
| get_channel_infoB | Get information about a channel (title, description, banner). Args: channel_id: Channel id; if omitted, uses the authenticated channel. |
| get_subscriber_countB | Get the subscriber count of a channel. Args: channel_id: Channel id; if omitted, uses the authenticated channel. |
| update_channel_brandingB | Update channel branding: banner, avatar, and profile links. Args: banner_path: Local path to a new banner image. avatar_path: Local path to a new avatar image. links: List of {'title': ..., 'url': ...} profile links. |
| get_analyticsB | Get channel analytics (views, watch-time, subscribers gained/lost). Args: channel_id: Channel id. period_days: Reporting window in days (default 28). |
| get_top_videosC | Get a channel's most-viewed videos. Args: channel_id: Channel id. limit: Maximum number of videos to return. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 20 tools
Most tools have clearly distinct purposes, but a few channel-video retrieval and channel-info tools have closely related scopes (e.g., get_top_videos vs list_channel_videos, get_channel_info vs get_subscriber_count), which could cause minor misselection.
All tool names use a consistent snake_case verb_noun pattern (get_, list_, create_, update_, delete_, etc.) with no mixed conventions, making them predictable and readable.
20 tools is on the higher side but reasonable for the broad YouTube channel management domain, covering videos, playlists, comments, analytics, and channel branding without obvious redundancy.
Core CRUD exists for videos and playlists, but notable gaps remain: no way to list videos within a playlist, no update_playlist, no update_channel_description/title, and no delete comment. These missing operations could hinder full playlist and channel management.