YouTube Studio MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| YOUTUBE_STUDIO_MCP_HOME | No | OAuth client and tokens. | ~/.config/youtube-studio-mcp (`%APPDATA%\youtube-studio-mcp`) |
| YOUTUBE_STUDIO_MCP_PROFILE | No | Which signed-in channel to use (see multiple channels). | default |
| YOUTUBE_STUDIO_MCP_CLIENT_ID | No | Provide the OAuth client inline instead of a file (client ID). | |
| YOUTUBE_STUDIO_MCP_LOG_LEVEL | No | Logging (always to stderr). | WARNING |
| YOUTUBE_STUDIO_MCP_OUTPUT_DIR | No | Where charts and exports go when given a bare filename. | ~/Documents/youtube-studio-mcp |
| YOUTUBE_STUDIO_MCP_ENABLE_WRITE | No | Set to `1` to expose the editing tools (requires `auth --write`). | off |
| YOUTUBE_STUDIO_MCP_CLIENT_SECRET | No | Provide the OAuth client inline instead of a file (client secret). | |
| YOUTUBE_STUDIO_MCP_DATA_LAG_DAYS | No | How many recent days to leave out of rolling periods because their data is incomplete (0-7). | 3 |
| YOUTUBE_STUDIO_MCP_CLIENT_SECRET_FILE | No | Use an OAuth client file elsewhere. | <home>/client_secret.json |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
Tools for a YouTube creator's own channel (YouTube Studio data via the official APIs).
Getting started: if a tool reports that you are not signed in, call get_auth_status, then
authenticate (opens Google sign-in in the user's browser) and wait for the user to finish.
Picking tools:
Overview / "how am I doing": get_performance_summary (period vs previous period).
Trends and growth charts: get_metrics_over_time (granularity day/week/month/year).
Best/worst content: get_top_videos; catalogue and lifetime stats: list_videos.
Audience (age, gender, countries, devices, Shorts vs long-form, subscribers vs not): get_audience_breakdown. Discovery: get_traffic_sources (source_type='YT_SEARCH' = search terms).
One video: get_videos_details, get_audience_retention, and video_id on the analytics tools.
Media kit / sponsor deck: get_media_kit_data, then create_chart for visuals.
Money: get_revenue (monetized channels). Impressions & CTR: get_impressions (beta).
Anything else: query_analytics (raw YouTube Analytics API v2).
Data notes: analytics dates are US Pacific time and lag ~2-3 days; periods end at the latest complete day and every result states its exact date range — quote it. Percentages are 0-100. Public subscriber counts are rounded by YouTube. Don't invent numbers that a tool didn't return.
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
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_auth_statusA | Check whether the server is signed in to YouTube, which channel it reads, and which permissions were granted. Call this first if any other tool reports a sign-in problem. |
| authenticateA | Start Google sign-in in the user's browser and return the sign-in URL immediately. The user must approve access in the browser (choosing the account or Brand Account that
owns the channel). Afterwards call |
| get_channelA | The signed-in channel's profile and lifetime public stats: subscribers, total views, video count, creation date, country, handle, description, keywords and topics. |
| list_videosA | List the channel's uploads (including private/unlisted/scheduled, newest first) with public lifetime stats: views, likes, comments, engagement rate, duration, format guess. Costs ~1 quota unit per 50 videos. For period-specific performance use get_top_videos. |
| get_videos_detailsB | Full metadata and lifetime public stats for specific videos: title, description, tags, category, privacy, duration, captions, live-stream details, views, likes, comments. |
| list_playlistsA | The channel's playlists with item counts and privacy. Use list_videos(playlist_id=...) to see a playlist's videos. |
| list_commentsA | Read comment threads (top-level comments with reply counts) for the channel or one video, e.g. to summarise audience sentiment, find questions, or spot content ideas. |
| get_performance_summaryA | Headline numbers for a period, like Studio's Overview tab: views, engaged views, watch time (hours), average view duration/percentage, subscribers gained/lost/net, likes, comments, shares, engagement rate, optionally revenue, each with the previous period and % change. Works for the channel or a single video. |
| get_metrics_over_timeA | A time series of metrics by day, week, month or year — for trend analysis and growth charts. Adds netSubscribers when gained and lost are both requested. Buckets cut off by the date range are flagged partial=true. |
| get_top_videosA | Rank the channel's videos by performance within a period (like Studio's 'Top content'), with title, publish date, YouTube's content type (Shorts/Videos/Live), views, watch time, average view duration/percentage, likes, comments, shares, subscribers gained and engagement rate. |
| get_audience_breakdownA | Who watches and how: demographics, geography, devices, subscriber vs non-subscriber views, Shorts vs long-form split, playback locations. Rows include readable labels and share_pct of views, ready for media-kit charts. |
| get_traffic_sourcesA | How viewers find the content: views and watch time by traffic source (search, suggested, browse, Shorts feed, external, ...) or, with source_type, the top search terms / referring videos / websites for that source. |
| get_audience_retentionA | The audience-retention curve for one video, with timestamps, key retention milestones and the steepest drop-off moments. Defaults to the video's lifetime. audience_watch_ratio = share of viewers still watching at that moment (can exceed 1 when people rewatch a part). relative_retention compares with similar-length YouTube videos (0-1; above 0.5 is better than average). |
| get_revenueB | Monetization report (YouTube Partner Program channels): estimated revenue, ad revenue, gross revenue, RPM, CPM, playback-based CPM, monetized playbacks and ad impressions, with a trend and the top-earning videos. |
| query_analyticsA | Run any YouTube Analytics API v2 report for the channel (ids=channel==MINE) — the escape hatch when no other tool fits. See https://developers.google.com/youtube/analytics/channel_reports for valid combinations. Notes: the 'video' dimension needs sort and max_results <= 200; 'insightTrafficSourceDetail' needs a filter on insightTrafficSourceType, sort and max_results <= 25; demographics (ageGroup/gender) only support viewerPercentage; the 'month' dimension aligns dates to whole months automatically. YouTube's error message is returned if a combination is invalid. |
| enable_impressions_reportsA | One-time setup for thumbnail impressions & click-through rate (CTR), which the Analytics API does not provide. Creates a YouTube Reporting API job for the channel (safe to call again). YouTube then publishes daily reports: the first ones ~48 hours later, plus 30 days of history. Use get_impressions afterwards. |
| get_impressionsA | Thumbnail impressions and impressions click-through rate (CTR) from the YouTube Reporting API, by day, by video, or in total. Requires enable_impressions_reports to have been run at least ~2 days earlier; only days YouTube has published are included. |
| get_media_kit_dataA | Everything a creator media kit / sponsor deck needs, as one stable JSON snapshot
(schema_version 1, snake_case, *_pct 0-100, *_s seconds): channel profile, period
performance vs previous period, Shorts vs long-form performance, impressions funnel,
daily and monthly trends, audience age/gender/countries/devices, recent uploads with
thumbnails, top videos and traffic sources. Anything YouTube can't provide is null and
explained in |
| create_chartA | Render a polished, media-kit-ready chart (PNG, SVG or PDF) from data you provide — typically numbers from the analytics tools. Uses a colour-blind-safe palette by default, thin marks, clean axes and direct value labels. Returns the saved file path(s) and a preview image. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| channel_checkup | Review how the channel performed in a period and suggest what to do next. |
| media_kit_refresh | Collect fresh media-kit numbers and render the standard charts. |
| video_deep_dive | Explain how one video performed and what to learn from it. |
| comment_digest | Summarise what the audience is saying in the comments. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 19 tools
Most tools have sharply distinct targets: auth status vs. authenticate, list_videos vs. get_videos_details vs. get_top_videos, and each analytics tool covers a different report (summary, time series, audience, traffic, retention, revenue). The overlap risk is concentrated in get_media_kit_data (a composite of nearly everything else) and query_analytics (escape hatch that can reproduce other tools' output), plus get_impressions vs. enable_impressions_reports, though the descriptions do state when to use each.
Nearly all tools follow snake_case verb_noun (get_channel, list_videos, get_audience_breakdown, get_traffic_sources). Minor deviations exist: bare 'authenticate', the different verb style in 'query_analytics', and the awkward plural in 'get_videos_details' versus the singular 'get_channel'/'get_video' pattern. The enable_/get_ pair for impressions is a sensible sub-convention.
At 19 tools the surface leans heavy for a single-platform server, but each tool maps to a real YouTube Studio/analytics view rather than duplicating another. Composite tools (get_media_kit_data, query_analytics) arguably consolidate several others, yet they serve distinct aggregation/escape-hatch use cases.
Analytics and reporting coverage is excellent: performance, trends, top content, audience, traffic, retention, revenue, impressions/CTR and a raw-query fallback, plus chart rendering. Gaps are on the write side — comments can be read but not replied to or moderated, and there is no video/playlist metadata editing or upload, though those are arguably outside a 'Studio reporting' scope.