Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
YOUTUBE_CONFIGNoConfig file path.
YOUTUBE_CLIENT_IDYesDesktop-app OAuth client id (`….apps.googleusercontent.com`).
YOUTUBE_CHANNEL_IDNoExpected channel (`UC…`). Every tool refuses if the token acts as another channel.
YOUTUBE_TOKEN_FILENoWhere the login is stored.~/.config/youtube/tokens.json
YOUTUBE_ALLOW_WRITESNoSet to `1` to register the upload and other write tools, and ask for the `youtube` scope.
YOUTUBE_CHUNK_SIZE_MBNoUpload chunk size in MB.16
YOUTUBE_CLIENT_SECRETYesThe OAuth client secret. Google requires it even with PKCE.
YOUTUBE_REFRESH_TOKENNoUse this refresh token in memory instead of the token file.

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

CapabilityDetails
tools
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
youtube_auth_statusA

Whether the server is configured and signed in, which channel the token acts as (the token picks the channel, so this is where uploads land), the granted scopes, whether write tools are registered, and the daily quota model. When unconfigured, returns the exact setup steps. Call this first when a tool you expected is missing. Costs 1 quota unit the first time it resolves the channel, then nothing.

youtube_auth_loginA

Sign in with Google: opens the consent screen in the browser and waits for it to finish, then stores a refresh token (mode 600) and reports which channel it acts as. On the account chooser, pick the channel uploads should go to — a Brand Account channel is listed separately from the personal one. The app is unverified, so Google shows a warning first: Advanced → Go to (app). If no browser can be opened, or the wait runs out, returns the authorize URL instead and keeps listening for 5 minutes; call youtube_auth_status afterwards. Logging in again replaces the stored login.

youtube_auth_logoutA

Revoke the stored refresh token at Google and delete it locally. Recoverable by calling youtube_auth_login again. Uploads already in progress fail at their next chunk.

youtube_get_channelA

The channel the signed-in token acts as: id, handle, uploads playlist, subscriber/video/view counts, and long_uploads — whether videos longer than 15 minutes are allowed. Check that before uploading anything long: an unverified channel (disallowed or eligible) cannot, and the failure only shows after the whole file has been sent. Verify by phone at https://www.youtube.com/verify. Costs 1 quota unit.

youtube_list_categoriesA

The video categories that can be assigned to an upload in a region, as {id, title}. Pass the id as categoryId to youtube_upload_video or youtube_update_video. Categories vary slightly by region, and some listed ones (e.g. Movies, Shows) are not assignable and are filtered out here. Costs 1 quota unit.

youtube_list_videosA

This channel's uploads, newest first, including private, unlisted and scheduled ones: id, title, privacy, upload status, duration, views/likes/comments and URL. A video still processing shows upload_status uploaded; one that failed shows failure_reason or rejection_reason. A just-uploaded video can take a minute or more to appear here, because the uploads playlist is eventually consistent — youtube_get_video finds it at once. Costs 2 quota units per page (+1 the first time, to find the uploads playlist). For one video's full detail use youtube_get_video.

youtube_get_videoA

One video in full: snippet, status (privacy, uploadStatus, failure/rejection reason, publishAt, madeForKids), contentDetails, statistics, and — for your own videos — processingDetails (processing progress after an upload) and fileDetails. Use it to follow processing after youtube_upload_video finishes: processingStatus goes processing → succeeded. Costs 1 quota unit.

youtube_list_playlistsA

This channel's playlists, including private ones: id, title, privacy and item count. The id is what youtube_add_to_playlist and youtube_upload_video's playlistId take. Costs 1 quota unit per page.

youtube_requestA

Escape hatch: call any YouTube Data API v3 endpoint (https://developers.google.com/youtube/v3/docs) that has no dedicated tool, e.g. GET /captions, GET /commentThreads, GET /search. The path is relative to /youtube/v3; parameters go in query. Returns the raw response, unshaped — prefer the dedicated tools. Media uploads (captions, banners) are not possible through it. Watch the cost: GET /search costs 100 units and has its own daily bucket. Writes are DISABLED: only GET is permitted. Set YOUTUBE_ALLOW_WRITES=1 to allow mutations.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A4.1/5.0

Scored across 9 tools

Disambiguation4/5

The existing tools are cleanly separated: three auth tools, three read tools targeting distinct resources (channel, videos, playlists), a category lookup, and an explicit escape hatch. The only overlap is youtube_request, which can duplicate every other read tool, but it is clearly framed as a fallback that should be preferred less. The bigger confusion source is that several descriptions point at tools that do not exist (youtube_upload_video, youtube_update_video, youtube_add_to_playlist), sending an agent hunting for phantom tools.

Naming Consistency4/5

All names are snake_case with a consistent youtube_ prefix, and get_/list_ verb patterns are used predictably for reads. Minor deviations: the auth tools use a noun-namespace form (auth_login/status/logout) rather than verb_noun, and youtube_request is a bare noun. These are readable and conventional enough not to cause misselection.

Tool Count4/5

Nine tools is a well-scoped count for a YouTube server and nothing feels padded. The composition is slightly lopsided — three of nine tools are auth lifecycle — but each earns its place given the OAuth flow described. The number itself is appropriate; the issue is which tools are present rather than how many.

Completeness2/5

The surface is read-only in practice: no upload, update, delete, playlist mutation, or comment tools exist, yet descriptions extensively document upload behavior (long_uploads checks, categoryId passing, processing follow-up) for tools that are absent. Writes are even disabled in youtube_request unless an env var is set, so there is no workaround path. This will cause agent failures on the server's apparent primary use case.

Maintenance

ActivityMaintained
ResponsivenessNo recent community issues