Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
YT_CONFIRMNoConfirmation mode: public, always or never.public
YT_CHUNK_MBNoUpload chunk size in MB, rounded to 256 KB.16
YT_MCP_HOMENoData folder for the state database, templates and transcripts.~/.youtube-channel-mcp
YT_MCP_VAULTNoSet to file to use the encrypted file instead of the OS keychain.
OPENAI_API_KEYNoSpeech-to-text API key. Alternative to TRANSCRIBE_API_KEY.
OPENAI_BASE_URLNoAny OpenAI-compatible speech-to-text endpoint. Alternative to TRANSCRIBE_BASE_URL.https://api.openai.com/v1
GOOGLE_CLIENT_IDNoDesktop-app OAuth client ID. Defaults to the value stored in the OS keychain by setup.
TRANSCRIBE_MODELNoSpeech-to-text model or deployment name.whisper-1
TRANSCRIBE_API_KEYNoSpeech-to-text API key. Alternative to OPENAI_API_KEY.
TRANSCRIBE_BASE_URLNoAny OpenAI-compatible speech-to-text endpoint. Alternative to OPENAI_BASE_URL.https://api.openai.com/v1
YT_DAILY_UNIT_LIMITNoDaily API unit budget used for the local quota estimate.10000
GOOGLE_CLIENT_SECRETNoDesktop-app OAuth client secret. Defaults to the value stored in the OS keychain by setup.
YT_DAILY_UPLOAD_LIMITNoDaily upload budget used for the local quota estimate.100

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

Manage a YouTube channel through the official YouTube Data and Analytics APIs.

Start with auth_status. If no channel is connected, call connect_channel (it opens Google sign-in in the browser).

What you can do:

  • Publish: generate_metadata → write title/description/chapters/tags → preview_metadata → upload_video (file_path on this computer, or url) → follow get_upload_status until ready. Thumbnail, playlists and captions can go in the same call. Uploads resume from the last byte after drops or restarts.

  • Videos: list_my_videos, get_video, update_video, set_visibility (publish/unlist/schedule), set_thumbnail, set_video_localizations, delete_video.

  • Channel: get_channel, update_channel (description, keywords, trailer, translations), set_channel_banner, set_watermark.

  • Community: list_comments (per video or channel-wide, including held-for-review and likely spam), reply_to_comment, moderate_comments, delete_comment.

  • Analytics: get_analytics (overview, daily, top_videos, traffic_sources, search_terms, geography, devices, demographics, retention, custom).

  • Organise: playlists (list/create/update/delete/add/remove/reorder), captions (list/upload/download/delete, transcribe_video), templates.

Safety: anything public (publishing, scheduling, public replies, channel profile and banner changes) or destructive needs the user's approval. If a tool returns CONFIRMATION REQUIRED, show the summary to the user and only call again with the confirmation_token after they say yes. Never invent approval.

Quota: one Google Cloud project has a daily budget (about 100 uploads and 10,000 API units). On quota errors, stop; uploads resume after the midnight Pacific reset. Unaudited Google Cloud projects may have uploads forced to private; tools report it when it happens.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": true
}
logging
{}
prompts
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
auth_statusA

Show whether Google OAuth is configured, which YouTube channels are connected (and whether their sign-in is healthy), the default channel, today’s quota use, and known project limitations. Call this first in a new conversation.

connect_channelA

Start Google sign-in to connect (or reconnect) a YouTube channel. Opens the browser on this computer and returns the sign-in link; the user picks the Google account and channel (brand accounts work). Waits up to wait_seconds for them to finish.

list_channelsB

List the YouTube channels connected to this server.

set_default_channelA

Choose which connected channel is used when a tool call does not name one.

disconnect_channelA

Remove a connected channel and revoke this app’s Google access to it. Needs the user’s confirmation.

upload_videoA

Upload a video file from this computer (file_path) or a public URL to YouTube with a resumable, checkpointed upload that survives network drops and restarts. Optionally schedule it (publish_at), set a thumbnail, add it to playlists and attach captions in the same call. Runs in the background: returns a job_id right away (or the finished video if it completes within wait_seconds). Poll get_upload_status. Private uploads start immediately; public, unlisted and scheduled uploads need the user’s confirmation first. Tip: write metadata first (generate_metadata, then preview_metadata).

get_upload_statusA

Status of an upload job (progress, errors, resulting video) and/or a video’s YouTube processing state (processing, failed, rejected), plus a check for the "locked to private" restriction. Can wait for changes.

list_uploadsB

Recent upload jobs from this computer, newest first, with progress and results.

cancel_uploadA

Stop an upload job that has not finished. It can be resumed later with resume_upload.

resume_uploadB

Resume a stopped, failed or cancelled upload from the last byte YouTube confirmed (for example after a quota reset or reconnecting the channel). Network drops and quota resets are also retried automatically.

list_my_videosA

List videos on the channel, newest first (including private, unlisted and scheduled ones), with privacy, schedule, duration and view counts. Paginate with page_token.

get_videoB

Full details of one video: metadata, privacy and schedule, processing state, duration, captions flag and statistics.

update_videoA

Change a video’s title, description, tags, category, languages, audience and other settings. Only the fields you pass change. Optionally apply a template to the fields you pass (title format; footer and hashtags when you pass description; template tags when you pass tags). Changing visibility to public/unlisted or scheduling needs the user’s confirmation (or use set_visibility).

set_visibilityA

Change who can see a video: private, unlisted or public, or schedule it with publish_at. Anything other than private needs the user’s confirmation.

delete_videoA

Permanently delete a video from YouTube. Cannot be undone. Always needs the user’s confirmation.

set_thumbnailA

Upload a JPG or PNG (max 2 MB, ideally 1280x720) from this computer as the video’s thumbnail. The channel must be phone-verified.

set_video_localizationsA

Add or update the title and description shown to viewers in other languages, e.g. {"hi": {"title": "...", "description": "..."}}. Merged with existing translations. The video needs a default_language set (update_video).

list_categoriesB

YouTube video categories you can assign (id and name) for a region.

list_playlistsB

All playlists on the channel with id, title, privacy and video count.

create_playlistC

Create a new playlist on the channel.

add_to_playlistB

Add a video to a playlist by playlist id or exact title. Optionally at a position (0 = first).

remove_from_playlistB

Remove a video from a playlist (the video itself is not deleted).

update_playlistA

Rename a playlist, change its description or privacy. Making it public or unlisted needs the user’s confirmation.

delete_playlistA

Delete a playlist (the videos in it are not deleted). Needs the user’s confirmation.

move_in_playlistA

Move a video to a new position in a playlist (0 = first). Works for playlists sorted manually.

list_playlist_itemsD

Videos in a playlist, in order.

list_captionsC

Caption tracks on a video (language, name, auto-generated or uploaded, draft).

upload_captionsB

Add a captions track (.srt, .vtt or other YouTube-supported format) to a video, from a file on this computer or inline content.

delete_captionsA

Delete an uploaded caption track (see list_captions for ids). Needs the user’s confirmation.

download_captionsA

Download a caption track of your own video as SRT (prefers uploaded tracks, falls back to auto-generated). Costs 250 quota units.

transcribe_videoA

Transcribe a video file on this computer with any OpenAI-compatible speech-to-text API (needs ffmpeg and a configured key). Saves an .srt you can pass to upload_video or upload_captions, and returns a timestamped transcript for writing metadata and chapters.

generate_metadataA

Collect everything needed to write a strong title, description, chapters and tags: the transcript with timestamps (from text you pass, a .srt/.vtt/.txt file, an uploaded video’s captions, or by transcribing a local file), the chosen template and YouTube’s rules. You then write the metadata and check it with preview_metadata.

preview_metadataA

Show exactly what would be sent to YouTube (title, description, tags, playlists) after applying a template, and check it against YouTube’s limits and chapter rules. No API call, no quota.

list_templatesC

Metadata templates (title format, description footer, default tags, hashtags, category, playlists, voice guidance) available for uploads.

save_templateB

Create or replace a metadata template, saved as JSON in the templates folder. Use {title} in title_format. extends inherits another template; tags and hashtags combine.

delete_templateC

Delete a saved template file.

quota_statusA

Estimated YouTube API quota used today (units and uploads) for this Google Cloud project, and when it resets (midnight Pacific Time).

get_channelC

The channel’s title, handle, description, keywords, country, default language, trailer, subscriber/view/video counts, banner and settings.

update_channelA

Change the channel description, keywords, country, default language or the trailer shown to non-subscribers. Only the fields you pass change. These are public, so the user confirms first. (The channel name and handle can only be changed in YouTube Studio.)

set_channel_bannerA

Upload a channel banner (JPG/PNG, 16:9, at least 2048x1152, ideally 2560x1440, max 6 MB). Public, so the user confirms first.

set_watermarkA

Set the subscribe watermark shown on all channel videos (square JPG/PNG, at least 150x150, max 1 MB), or remove it with remove: true.

list_commentsA

Comment threads on one video, or across the whole channel (newest first). Filter by moderation state (published, held_for_review, likely_spam) or search text. Includes replies.

reply_to_commentA

Post a public reply to a comment (comment_id = the top-level comment or thread id) or a new top-level comment on a video (video_id). Posts publicly as the channel, so the user confirms the exact text first.

moderate_commentsA

Publish held comments, hold comments for review, or remove (reject) them; optionally ban the author from commenting on the channel. Removing or banning needs the user’s confirmation.

delete_commentA

Delete a comment or reply that the channel itself wrote (other people’s comments are removed with moderate_comments). Needs the user’s confirmation.

get_analyticsA

YouTube Analytics for the channel or one video. Reports: overview (views, watch time, average view duration, subscribers gained/lost, likes, comments, shares), daily (trend by day), top_videos (best performers with titles), traffic_sources, search_terms (YouTube search queries), geography, devices, demographics (age/gender), retention (audience retention curve, needs video_id), subscribed_status, or custom (your own metrics/dimensions). Defaults to the last 28 days. Data lags about 2 days.

Prompts

Interactive templates invoked by user choice

NameDescription
publish_videoGuided flow: transcript → metadata → upload → thumbnail/playlists → confirm visibility.

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

B3.2/5.0

Scored across 46 tools

Disambiguation4/5

Tools are largely organized by resource+action (video, playlist, caption, comment, channel, template), and descriptions draw the few delicate boundaries explicitly (delete_comment only deletes the channel's own comments; others go through moderate_comments). The main soft overlaps are set_visibility vs update_video's visibility field and moderate_comments' remove vs delete_comment, but both are spelled out. An agent can pick correctly with modest care.

Naming Consistency4/5

Nearly everything follows a verb_noun pattern (upload_video, list_playlists, move_in_playlist, moderate_comments, set_thumbnail). The only deviations are noun-only status tools (auth_status, quota_status), which read fine in context. No mixed casing or style chaos.

Tool Count2/5

46 tools is far beyond a comfortable working set for a single server, even one covering this many sub-domains (uploads, videos, playlists, captions, comments, channel branding, analytics, templates, auth, quota). Several thin tools (auth_status, quota_status, list_uploads) could be folded into broader resources. The surface is heavy enough that discovery itself becomes a burden.

Completeness5/5

The lifecycle is covered end to end: video and playlist CRUD plus item reordering, caption upload/download/delete, channel profile and branding, comment listing/reply/moderation/deletion, analytics reports, background upload jobs with cancel/resume, and metadata templates. Even operational concerns (quota, auth health, confirmation rules, previews) are represented, leaving no obvious dead ends.

Maintenance

ActivityMaintained
ResponsivenessNo recent community issues