yt-studio-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| VAULTPROXY_URL | No | URL of vaultproxy server for vaultproxy backend | |
| YT_MCP_SECRETS | No | Secrets backend: file (default), env, or vaultproxy | |
| YT_MCP_CLIENT_ID | No | OAuth client ID for env backend | |
| YT_MCP_CLIENT_SECRET | No | OAuth client secret for env backend | |
| YT_MCP_REFRESH_TOKEN | No | OAuth refresh token for env backend |
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 |
|---|---|
| channel_infoB | Get the authorized channel's profile, statistics, and uploads playlist id. |
| list_videosC | List the channel's uploaded videos, newest first, with basic stats. |
| get_videoB | Get full metadata and statistics for one video. |
| update_videoA | Update video metadata. Only supplied fields change; others are preserved. |
| set_thumbnailC | Set a custom thumbnail from a local image file (JPG/PNG, <2MB). |
| upload_videoC | Upload a video (resumable). privacy: private|unlisted|public. publish_at (RFC3339) schedules publication and requires privacy=private. |
| delete_videoB | Permanently delete a video. Irreversible. |
| list_playlistsC | List the channel's playlists. |
| create_playlistB | Create a playlist. privacy: public|unlisted|private. |
| delete_playlistB | Delete a playlist (videos are not deleted). |
| add_to_playlistC | Add a video to a playlist, optionally at a specific position. |
| remove_from_playlistA | Remove an item from a playlist by playlist-item id (from list results). |
| list_playlist_itemsC | List videos in a playlist. |
| list_commentsB | List comment threads for one video, or channel-wide when video_id is omitted. |
| post_video_questionA | Post a top-level comment on a video as the channel (e.g. a question prompt for viewers). Note: the API cannot pin comments — pin manually in YouTube Studio if desired. |
| reply_to_commentC | Reply to a comment as the channel. |
| moderate_commentC | Set moderation status: published | heldForReview | rejected. |
| mark_spamC | Flag a comment as spam. |
| delete_commentB | Delete a comment authored by the channel (own comments only). |
| list_broadcastsC | List live broadcasts. status: all|active|upcoming|completed. |
| create_broadcastC | Schedule a live broadcast. start_time is RFC3339 (e.g. 2026-08-01T18:00:00Z). |
| list_streamsC | List reusable stream keys and their health. |
| bind_broadcastC | Bind a broadcast to a stream key. |
| live_chat_messagesA | Read messages from a live chat (chat_id from list_broadcasts). |
| post_chat_messageC | Post a message to a live chat as the channel. |
| delete_chat_messageC | Delete a live chat message. |
| ban_chat_userC | Ban a user from live chat; temporary when duration_seconds given, else permanent. |
| list_captionsB | List caption tracks on a video. |
| upload_captionC | Upload a caption track (SRT/VTT file). |
| download_captionA | Download a caption track's text. fmt: srt|vtt. |
| channel_reportC | Channel analytics between start/end (YYYY-MM-DD). |
| video_reportB | Per-video analytics between start/end (YYYY-MM-DD). |
| top_videosB | Top videos by views between start/end (YYYY-MM-DD). |
| collect_entriesA | Collect giveaway entries: walk every upload's comments in the window (RFC3339 timestamps), one entry per distinct video per commenter, capped per user. Writes an auditable snapshot file and returns its hash. |
| draw_winnersA | Deterministically draw n winners (distinct channels) from a snapshot. Same snapshot + seed always reproduces the same winners. Writes an audit record next to the snapshot. |
| make_verification_codeC | Generate a short verification code for a winner and record it in the audit file. |
| check_verification_replyB | Verify a winner's reply: fetches the comment and checks it was authored by the winning channel and contains their verification code. |
| export_entries_csvA | Export a snapshot's entries to CSV (channel_id, author, video_id, comment_id, published) for spreadsheets or records. |
| winner_announcementA | Draft winner-announcement text (for a pinned comment / community post) from a draw's audit record. Review before posting. |
| post_winner_replyC | Reply to a winning comment as the channel (winner announcement/notification). |
| banned_words_listA | Show the managed banned-word list used by scan_comments. |
| banned_words_addC | Add words/phrases to the banned list. |
| banned_words_removeC | Remove words from the banned list. |
| scan_commentsA | Sweep comments (one video, or channel-wide when video_id omitted) for banned words. auto_action: none | heldForReview | rejected — matches get that moderation status applied (dry_run previews instead). incremental=True only examines comments newer than the previous incremental scan (watermark stored locally) — cheap to run daily. |
| batch_update_descriptionsA | Update descriptions across many videos in one sweep. mode=append: add text at the end (skips videos that already contain it).
mode=footer: everything after the last "---" marker line is replaced
with text (marker added if missing) — ideal for a links/giveaway
footer kept in sync across all videos.
mode=replace: replace occurrences of |
| made_for_kids_auditA | Audit every upload's made-for-kids designation (COPPA). Reports both the platform-effective flag and the self-declared one per video. |
| post_stream_digestA | Channel performance digest for a date window (YYYY-MM-DD): totals, per-day trend, and top videos — run it the morning after a stream. |
| post_giveaway_questionA | Post the formatted giveaway question comment (unique question + official-rules link) on a video as the channel. Tracks state locally and refuses to double-post unless force=True. Result includes the Studio URL for the one-click manual pin (no pin API exists). |
| giveaway_question_statusA | Cross-reference every upload against posted question comments: which videos still need one, which are posted (with pin links). |
| quota_statusA | Quota units spent this session (local estimate from the official cost table). |
| health_checkA | Verify stored credentials refresh and the channel is reachable. |
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 51 tools
Each tool targets a distinct action on a distinct resource; even related tools like comment management are clearly differentiated (list, reply, moderate, scan, delete, etc.).
Most tools follow a verb_noun pattern (e.g., list_videos, upload_video), but a few use noun_verb (e.g., banned_words_add, channel_report) or other patterns (health_check), causing minor inconsistency.
With 51 tools, the server is extremely large for a typical MCP server; while many sub-domains are covered, the number is excessive and could be streamlined.
The tool set provides comprehensive coverage of YouTube Studio functionality including video, playlist, comment, live stream, caption, analytics, giveaway, and channel management, with no obvious gaps.