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 |
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 |
|---|---|
| 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 | |
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/aaronckj/yt-studio-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server