youtube-analytics-mcp
Provides comprehensive access to the YouTube Analytics, Data v3, and Reporting APIs, allowing AI agents to query channel analytics, retrieve video and audience data, run reporting jobs, and manage multiple authorized YouTube channels.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@youtube-analytics-mcpShow me my top 10 videos from the last 28 days by views"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
youtube-analytics-mcp
An MCP server that gives an AI assistant the whole YouTube Analytics, Data v3 and Reporting API surface for channels you own — including several channels at once.
Most YouTube MCP servers hardcode a handful of metric strings, so the first question
outside their preset list is unanswerable without forking them. This one is built the
other way round: youtube_analytics_query takes every parameter reports.query accepts,
and youtube_data_call / youtube_reporting_call do the same for the other two APIs. The
presets are conveniences on top, never the only route to something.
You bring your own Google Cloud OAuth client. Nothing is shipped with this package, no credentials pass through any third party, and everything runs locally over stdio.
Tools
Tool | What it does |
| List authorized channels, the default, and where config lives |
| Start adding a channel; returns the consent URL at once |
| How the in-flight consent flow ended |
| Abandon an in-flight consent flow |
| Pick which channel unqualified calls use |
| Drop a stored refresh token |
| Exercise every grant and report its age |
| Unrestricted |
| Unrestricted Data API v3 |
| Unrestricted Reporting API |
| One video or stream: summary + traffic-source split |
| One ended stream's concurrent viewers, minute by minute |
| What these APIs can and cannot answer |
Every data tool takes an optional account, so one conversation can compare two channels.
Large results go to a file, not through the model
youtube_analytics_query, youtube_data_call and youtube_reporting_call take
outputPath (and optional format: csv or json, otherwise inferred from the
extension). With it, the full result is written to disk and only a summary — row count,
columns, byte size, first three rows — comes back. Without it, results over 100 rows are
truncated with a pointer to the option, because a thousand-row report returned inline costs
the caller its context window and is unreadable when it arrives.
For genuinely bulk work — every day of every video, months at a time — use the Reporting
API through youtube_reporting_call: it produces downloadable daily CSV reports with
dimension combinations reports.query will not return in a single call.
Related MCP server: YouTube Studio MCP Server
Setup
1. A Google Cloud OAuth client, once
Create or pick a project.
APIs & Services → Library: enable YouTube Analytics API, YouTube Data API v3 and YouTube Reporting API.
OAuth consent screen → Audience: set user type to External (Internal is only offered when a Workspace organisation is attached). On that same Audience page, under Test users, click + Add users and add the Google account of every channel owner — including your own.
Miss this and consent fails with "… has not completed the Google verification process. The app is currently being tested and can only be accessed by developer-approved testers." Being the project owner does not make you a test user; you have to add yourself explicitly.
Set publishing status to In production. This matters more than it looks. Google:
A Google Cloud Platform project with an OAuth consent screen configured for an external user type and a publishing status of "Testing" is issued a refresh token expiring in 7 days, unless the only OAuth scopes requested are a subset of name, email address, and user profile.
Every YouTube scope is sensitive, so a Testing app makes you re-authorize every week.
Be warned that publishing is not simply a switch for these scopes: the console is likely to require a demo video and put the app through YouTube API verification review before it will let you leave Testing. That is real work for a personal tool, and weekly re-consent is often the better trade. See The 7-day grant limit below for the alternatives.
Credentials → Create credentials → OAuth client ID → Desktop app. Not Web application: this server listens on a random free loopback port each run, and a Web client requires every redirect URI, port included, to be registered in advance.
Download the JSON.
2. Tell the server where the client is
Put it in the config file (see config.example.json):
// %APPDATA%\youtube-analytics-mcp\config.json (Windows)
// ~/Library/Application Support/youtube-analytics-mcp/ (macOS)
// ~/.config/youtube-analytics-mcp/config.json (Linux)
{
"client": { "client_id": "...", "client_secret": "..." }
}Run youtube-analytics-mcp --where to print that directory. Environment variables work
too and take precedence — YTMCP_CLIENT_ID + YTMCP_CLIENT_SECRET, or
YTMCP_CLIENT_FILE pointing at Google's download verbatim (the {"installed": …} wrapper
is unwrapped for you). YTMCP_CONFIG_DIR relocates the whole directory.
3. Authorize each channel
bun run auth # or: youtube-analytics-mcp --authorize
bun run auth -- --alias second # name it yourselfYour browser opens on the consent page automatically; the URL is printed too, for the
cases where it cannot (SSH, containers, CI). Pick the Google account that owns the channel and
approve. Repeat for each channel — choose a different account in the browser each time.
Accounts are named after their @handle unless you pass --alias.
Set YTMCP_NO_BROWSER=1 to never launch a browser, or pass openBrowser: false to the
youtube_authorize tool for a single call.
Refresh tokens are written to accounts.json in the same directory, separate from the
config.json you hand-edit, so the file you might paste into a bug report is never the
file holding tokens. Both are written 0600 where the platform honours it.
Your assistant can also drive this. youtube_authorize returns the consent URL immediately
and keeps listening in the background; youtube_authorize_status reports how it ended. It
does not block, because consent takes as long as a human takes and MCP clients give up on a
tool call long before that. The URL is also written to pending-auth.txt in the config
directory, since most clients discard a server's stderr and a URL nobody can read is no use.
4. Register with your MCP client
Claude Code:
claude mcp add youtube-analytics --scope user -- bunx youtube-analytics-mcpOr by hand, in any client's mcpServers map:
{
"mcpServers": {
"youtube-analytics": { "command": "bunx", "args": ["youtube-analytics-mcp"] }
}
}Read-only by default
Updating a video, posting or moderating comments, and uploading thumbnails are not
reversible on a live channel, so the write scope is not requested and non-GET calls are
refused. To enable them set YTMCP_ALLOW_WRITE=1 and re-authorize — the flag alone
does nothing, because the stored token does not carry the scope.
Concurrent viewers, and the query shape nobody guesses
averageConcurrentViewers and peakConcurrentViewers do work on ended streams, and
they match Studio's own numbers exactly. They are widely believed not to exist because the
API refuses them in every shape but one: the filter must pin a single video and
dimensions must be livestreamPosition.
query | result |
| 400 |
| 500 internal error |
| 400 — the extra filter is rejected |
| one row per minute of the stream |
No error names the missing dimension, and the 500 in particular reads as the metric being
broken rather than the request being wrong. youtube_concurrent_curve assembles it for you
and returns the peak, the mean, and the whole minute-by-minute curve.
What it genuinely cannot give you
youtube_capabilities returns the current list. Both were checked by asking for the metric
and getting Unknown identifier back, which is how the API distinguishes a name it has
never heard of from one it knows but cannot serve here:
Live chat message and reaction totals. Studio-only.
liveChatMessagesreads a chat in real time and cannot recover an ended one.Impressions and impression click-through rate. Studio-only, in the Reach tab.
Two things worth knowing
There is no "since published" window. The Analytics API is purely date-range, so a window covering a stream day returns that stream's live audience by construction. Studio's default per-video window excludes the entire live period, which is an easy and expensive trap when analysing live streams. This API cannot fall into it.
Analytics quota is separate. The Analytics and Reporting APIs meter independently of the Data API v3 daily unit budget, so querying here does not consume the quota that live chat polling competes for. Strong inference from them being distinct APIs with their own console quota pages — not measured.
Development
bun install
bun run dev # start on stdio
bunx tsc --noEmit # typecheck
bun run inspector # MCP InspectorMIT.
The API lags a few days
Finalized Analytics data is not available immediately. Measured on 2026-08-25, day-dimension rows ran through 08-22 and stopped: sessions from the previous three days returned no rows at all, not zero rows. A query for a stream that ended hours ago will look like a channel with no traffic.
Studio's web UI has a realtime path that the API does not expose, so same-day reporting still has to come from Studio. Use this server for everything older than roughly three days, where it is far better than clicking through Studio one video at a time.
The 7-day grant limit, and why no code can work around it
While the Cloud project's publishing status is Testing with an External user type, Google revokes refresh tokens after 7 days unless the only scopes requested are name, email and profile. Every YouTube scope is sensitive, so the exception never applies here.
This cannot be automated away. The 7 days is on the refresh token. Minting a new one requires a human approving a consent screen in a browser — that is what consent means, not a gap to engineer around. Refreshing access tokens more often does not touch it.
What this server does instead:
youtube_accountsreports each grant'sageDaysand warns from day 5.An expired grant fails with a message naming the cause and the fix, not a bare
invalid_grant.youtube_refresh_tokens(or--refreshfrom the CLI) exercises every grant as a health check. It is also a hedge: it is not established whether the 7-day clock is absolute from issuance or slides on use. If it slides, running this daily on a scheduler keeps grants alive indefinitely; if it does not, the call costs almost nothing. Worth running either way.Re-consenting is one call to
youtube_authorize, which opens the browser itself — about fifteen seconds.
The real fixes, in order of cost:
Publishing status → In production. Free, and grants stop expiring. For sensitive YouTube scopes Google may require a demo video and verification review before it will let you publish, which is a real amount of work for a personal tool.
Internal user type. No 7-day limit and no verification, but the option only exists when the project belongs to a Google Workspace organisation — a paid subscription.
Live with weekly re-consent. For a single-user tool this is often the right answer.
Available Tools
13 toolsyoutube_accountsA
List authorized channels, which one is the default, and where configuration lives. Start here when unsure what this server can see.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It explicitly states the tool 'Lists' information, which indicates a read-only, non-destructive operation. It also adds the location of configuration as extra context. It does not mention error cases, authentication requirements, or side effects, but for a simple listing tool these are unlikely to be significant. The description is transparent about what the tool does and returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with zero waste. The primary function is stated first, and the usage hint is appended after. Every word contributes to either explaining what the tool does or when to use it. It is appropriately short and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, parameterless listing tool with no output schema, the description fully covers what the tool returns (authorized channels, default, configuration location) and its role as an entry point. Nothing critical is missing. An agent can invoke this tool correctly without further clarification.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is no schema to supplement. The description itself adds no parameter information (there is none). Per the guideline, 0 params baseline is 4 because there is nothing to describe. The description is sufficient and does not need to compensate for any gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and names the resource ('authorized channels') and additional outputs (default channel, configuration location). It clearly distinguishes itself from siblings like youtube_capabilities by focusing on channel authorization state rather than general platform capabilities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Start here when unsure what this server can see' provides explicit guidance on when to use this tool as a discovery entry point. It does not name specific alternatives or exclusions, but the context strongly implies that for targeted operations (e.g., authorizing, setting default), the user should use other tools. This is clear enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_analytics_queryB
Unrestricted YouTube Analytics reports.query — any metrics/dimensions/filters/sort the API accepts. This API has no "since published" window, so a date range covering a live stream returns its live audience by construction.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | defaults to channel==MINE | |
| raw | No | return the response verbatim instead of named rows | |
| sort | No | ||
| format | No | ||
| account | No | alias or channel id; defaults to the configured default, or the only account | |
| endDate | No | defaults to today | |
| filters | No | e.g. video==ID or insightTrafficSourceType==YT_SEARCH | |
| metrics | Yes | comma-separated, e.g. views,estimatedMinutesWatched,averageViewDuration | |
| currency | No | ||
| startDate | Yes | ||
| dimensions | No | e.g. day, video, insightTrafficSourceType, ageGroup,gender | |
| maxResults | No | ||
| outputPath | No | write the full result here instead of returning it inline; strongly preferred for anything large. Extension picks the format unless format is given. | |
| startIndex | No | ||
| includeHistoricalChannelData | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry behavioral disclosure. It discloses the live audience behavior for live streams, which is a specific behavioral trait. However, it omits broader behaviors such as authentication requirements, rate limits, or the fact that it is a read-only operation, leaving significant gaps in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no redundancy. It front-loads 'Unrestricted,' which immediately signals the tool's core value, and the second sentence adds a relevant behavioral nuance. Every word earns its place, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a high-complexity tool with 15 parameters, no output schema, and no annotations. The description is too sparse to guide an agent through constructing valid queries or understanding result formats. It lacks information about return types, handling large outputs (though outputPath is in the schema), or common pitfalls, making it incomplete for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 53%, which is moderate, so the baseline is 3. The description adds marginal value by indicating the tool accepts 'any metrics/dimensions/filters/sort,' which relates to several parameters, but it does not elaborate on syntax or formats. It does not compensate for the undocumented parameters that lack schema-level descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as 'Unrestricted YouTube Analytics reports.query' with 'any metrics/dimensions/filters/sort the API accepts,' which precisely defines its function. It distinguishes itself from siblings only by the term 'unrestricted' but does not explicitly name the restricted alternatives, so it is clear but not fully differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance on when to choose this tool over its siblings. It mentions the 'since published' window nuance but does not state criteria like 'use this for arbitrary queries or when you need full flexibility.' Without this, an agent lacks direction on optimal selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_authorizeA
Start authorizing a channel. Returns the consent URL immediately — give it to the owner to open in a browser, then poll youtube_authorize_status. Run it again, picking a different Google account in the browser, to add another channel.
| Name | Required | Description | Default |
|---|---|---|---|
| alias | No | name for this channel; defaults to its @handle | |
| setDefault | No | make this the default account | |
| openBrowser | No | open the consent page automatically (default true) | |
| timeoutSeconds | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility. It discloses the asynchronous nature (returns URL immediately, then must poll) and the ability to authorize multiple channels by re-running. It does not mention potential failure states or permissions, but the core behavior is transparent enough for correct invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences front-load the primary action and immediately provide the follow-up step. Every word adds value; no redundancy or fluff. The structure is optimal for quick comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the essential flow: start, get URL, poll status, add more channels. It does not detail cancellation or edge cases, but those are handled by sibling tools (youtube_authorize_cancel). For a tool that merely initiates an asynchronous process, this is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75%, and the description adds no direct parameter explanations. The mention of opening in a browser aligns with openBrowser, but it does not elaborate on alias, setDefault, or timeoutSeconds. Since the schema already documents these, baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Start authorizing'), a specific resource ('a channel'), and the immediate action ('Returns the consent URL immediately'). It also distinguishes itself from siblings by mentioning polling youtube_authorize_status, making its role in the authorization flow clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly gives the workflow: 'give it to the owner to open in a browser, then poll youtube_authorize_status.' It also explains how to add another channel by re-running with a different Google account. This is concrete, actionable guidance that separates initialization from status polling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_authorize_cancelA
Abandon an in-flight consent flow so a new one can be started.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It clearly states the action (abandoning a flow) and its purpose. While it doesn't detail side effects or reversibility, for a zero-parameter cancel operation the core behavior is sufficiently disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence that conveys the exact purpose with zero waste. It is as concise as possible while remaining informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no parameters and no output schema, the description fully covers what the tool does and why. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has no properties, so there are no parameters to explain. The description doesn't need to add parameter info, and the baseline for 0 parameters is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('abandon') and resource ('in-flight consent flow'), and distinguishes this from siblings like youtube_authorize and youtube_authorize_status. It clearly conveys this is the cancellation operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context for when to use it ('so a new one can be started'), implying it should be used to reset a pending authorization. It doesn't explicitly list alternatives, but the purpose is self-evident given the sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_authorize_statusA
Check an in-flight consent flow started by youtube_authorize: still waiting, finished, or failed. Also re-prints the consent URL.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description uses 'Check' which strongly implies a read-only operation, and it does disclose the three possible outcomes and the consent URL re-print. However, it does not explicitly state that the operation has no side effects, whether it is idempotent, or if repeated polling is safe.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the action ('Check') and the resource, then concisely lists the possible states and the URL re-print. Every word earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For such a simple tool (no parameters, no output schema, no annotations), the description covers the core purpose and outcomes. However, it does not specify the exact return format or behavior when no consent flow is in progress, which is a minor but relevant gap for an agent invoking it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the input schema is empty. Per the baseline for zero-parameter tools, the description is not required to add parameter semantics, and it does not attempt to do so. This is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Check' with the resource 'in-flight consent flow started by youtube_authorize', clearly distinguishing it from related tools like youtube_authorize (start) and youtube_authorize_cancel (cancel). The purpose is unambiguous and properly scoped.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies it is used after starting a consent flow with youtube_authorize, but it does not explicitly state when to use this tool versus alternatives, nor does it mention when not to use it or point to other tools for cancellation or re-authorization.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_capabilitiesA
What these APIs can and cannot answer. Read this before concluding a metric is missing.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations provided, so the description carries the full burden. It implies a read-only informational nature but does not explicitly state the tool performs no side effects or is safe to invoke. However, given its nature as a capability descriptor, the implication is strong enough for a 3.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, tightly scoped sentence that is front-loaded with the core purpose and ends with a direct call to action. Every word earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no parameters and no output schema, the description is sufficiently complete. It conveys the purpose and when to use it. Could mention what type of output it returns, but since it's a probe of capabilities, that is less critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, matching the baseline of 4. The description doesn't need to explain parameters, and it adds value by clarifying the purpose without any ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states exactly what the tool provides: an explanation of what the APIs can and cannot answer. It clearly distinguishes itself from sibling tools that perform specific API operations, positioning this as a meta-tool for capability understanding.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs when to use it: 'Read this before concluding a metric is missing,' giving a clear trigger condition. It doesn't need alternatives since it's a standalone informational tool, and the context signals reinforce this by having zero parameters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_concurrent_curveC
Peak and average concurrent viewers for one ended live stream, minute by minute. These metrics are real but only answer in one exact query shape, which this builds.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | ||
| account | No | alias or channel id; defaults to the configured default, or the only account | |
| endDate | No | ||
| videoId | Yes | ||
| startDate | Yes | a date on or before the stream day | |
| outputPath | No | write the full result here instead of returning it inline; strongly preferred for anything large. Extension picks the format unless format is given. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It mentions the constraint 'for one ended live stream' and says metrics are 'real but only answer in one exact query shape', but this is cryptic and does not clarify side effects, authorization requirements, rate limits, or what happens with invalid inputs. The lack of any behavioral detail beyond a vague limitation is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, which is concise, but the second clause 'which this builds' is confusing and unexplained. It front-loads the main purpose but then introduces a cryptic notion of a query shape without elaboration. Overall, it is brief but not optimally structured for clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 6 parameters, no output schema, and no annotations, the description is drastically incomplete. It does not explain required inputs (videoId, startDate), response format, or any operational details. An agent cannot determine how to call this tool correctly based solely on the description and schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds no information about parameters. The schema already documents startDate, account, and outputPath, but there is no compensation for the undocumented videoId, endDate, and format. With schema description coverage at 50%, the description should help clarify the other half, but it does not. It adds zero value beyond the schema for parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns peak and average concurrent viewers for one ended live stream, minute by minute. It specifies a concrete resource and metrics, and the phrase 'only answer in one exact query shape' hints at specialization, though it doesn't explicitly differentiate from sibling analytics tools. It is not a tautology and conveys a distinct function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like youtube_analytics_query or youtube_reporting_call. There are no conditions, exclusions, or context that help an agent choose this over siblings. The description merely states what it does without any usage criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_data_callB
Unrestricted call against the YouTube Data API v3 (e.g. /videos, /channels, /liveBroadcasts, /search). Read-only unless YTMCP_ALLOW_WRITE=1.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | ||
| path | Yes | endpoint path, e.g. /videos | |
| query | No | ||
| format | No | ||
| method | No | ||
| account | No | alias or channel id; defaults to the configured default, or the only account | |
| outputPath | No | write the full result here instead of returning it inline; strongly preferred for anything large. Extension picks the format unless format is given. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly states 'Read-only unless YTMCP_ALLOW_WRITE=1', which is a critical safety trait. However, it omits other behavioral aspects such as authentication requirements, error handling behavior, or that outputPath is recommended for large responses. The read-only/write condition is useful, but the description is thin overall.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, front-loaded with the tool's purpose and examples, followed by the read-only condition. Every word contributes value; there is no redundancy or fluff. It is an excellent example of concise, structured writing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a generic wrapper with 7 parameters, no output schema, and no annotations, the description is inadequate. It does not mention that the agent needs to know YouTube Data API v3 endpoint syntax, nor does it point to any documentation. It also fails to mention authentication prerequisites (though sibling auth tools exist) or that outputPath is strongly preferred for large results. The agent cannot safely and correctly invoke this tool based solely on the given description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds no parameter semantics beyond what the input schema already provides. Schema coverage is only 43% (3 of 7 parameters have descriptions: path, account, outputPath), leaving body, query, format, and method undocumented. The description does not compensate for this gap; it merely gives endpoint examples, so the agent must guess at parameter usage for the undocumented fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('call') and resource ('YouTube Data API v3') with concrete endpoint examples (/videos, /channels, /liveBroadcasts, /search). It is obvious this is a raw API wrapper, but it doesn't explicitly distinguish it from sibling tools like youtube_analytics_query or youtube_reporting_call, leaving some ambiguity about when to use this vs. a specialized tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus its siblings. It does not say 'use this for arbitrary endpoints not covered by specialized tools' or mention any prerequisites like authentication or authorization. The agent must infer usage from the name and examples, which is insufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_forget_accountA
Remove a stored refresh token. This does not revoke the grant — do that at https://myaccount.google.com/permissions.
| Name | Required | Description | Default |
|---|---|---|---|
| alias | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full responsibility. It transparently states that the action removes a stored token and clarifies the important limitation that it does not revoke the grant. The mutating nature is evident, and the non-revocation caveat is a valuable behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences with no filler. The primary action is front-loaded, and the clarifying limitation follows immediately, making it efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool, the description covers the core action and its non-revocation limitation, which is sufficient for basic usage. However, it omits any explanation of the 'alias' parameter and does not mention prerequisites (e.g., prior authorization) or return behavior, leaving minor gaps that an agent might need.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one required parameter 'alias' with no description, and the tool description does not explain what 'alias' refers to. With 0% schema description coverage, the description was expected to provide this meaning but does not, leaving the agent to infer from the parameter name alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Remove a stored refresh token') on a clear resource (stored refresh token), and explicitly notes it does not revoke the grant, distinguishing it from authorization-related siblings. This leaves no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly explains what the tool does not do (revoke the grant) and directs the user to an external URL for that purpose, providing when-not-to-use guidance. However, it does not explicitly name sibling alternatives, so the guidance is implicit rather than comparative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_refresh_tokensA
Exercise every stored grant and report its age. Use as a health check, or on a daily schedule: it is not established whether the 7-day Testing clock is absolute or slides on use, and if it slides this keeps grants alive. Cannot create a new grant — only consent does that.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses that it exercises grants, reports age, and cannot create new grants. It also reveals the uncertainty about the Testing clock and the potential sliding behavior, which is valuable context. It does not explicitly state whether token refresh modifies stored state, but 'exercise' implies action; still, the key limitations are clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no wasted words. The core function and primary usage are front-loaded, and the limitation is stated clearly at the end. It is both concise and informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no parameters, no output schema, and no annotations, the description covers everything an agent needs: what it does, when to use it, why, and its key limitation. It even explains the underlying reasoning about the clock, making the tool fully self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema describes nothing. Per the rubric, a 0-parameter tool gets a baseline of 4. The description adds no parameter information since there are none, which is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('exercise') and clearly identifies the resource ('every stored grant') and the output ('report its age'). It distinguishes itself from sibling tools by explicitly stating it cannot create new grants, which only consent can do. This makes its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly prescribes usage as a health check or on a daily schedule, explains the reasoning about the 7-day Testing clock, and states what it does not do (cannot create a grant). This gives clear when-to-use guidance and differentiates from authorization tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_reporting_callA
Unrestricted call against the YouTube Reporting API (e.g. /jobs, /reportTypes, /media). Read-only unless YTMCP_ALLOW_WRITE=1.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | ||
| path | Yes | endpoint path, e.g. /videos | |
| query | No | ||
| format | No | ||
| method | No | ||
| account | No | alias or channel id; defaults to the configured default, or the only account | |
| outputPath | No | write the full result here instead of returning it inline; strongly preferred for anything large. Extension picks the format unless format is given. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly discloses the read-only default and the YTMCP_ALLOW_WRITE=1 escape hatch, which is critical safety information. It does not detail auth prerequisites or write-path side effects, but the core risk behavior is surfaced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no fluff. It front-loads the API name and examples before the read-only caveat, making the most important information immediately visible.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is minimally viable: it names the API, gives endpoint examples, and includes a key safety guard. However, it omits auth/account prerequisites, does not clarify how YTMCP_ALLOW_WRITE influences method handling, and provides little context for the many undocumented parameters, leaving the agent to infer too much.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 43%, and the description adds little parameter-level meaning beyond path examples like /jobs and /reportTypes. Parameters such as body, query, method, and format are not explained in the description, leaving significant semantic gaps for a 7-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource (YouTube Reporting API) and the action (unrestricted call), with concrete endpoint examples like /jobs and /reportTypes. It is specific enough to distinguish from sibling tools like youtube_data_call or youtube_analytics_query, though it does not explicitly state that distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context about when to use the tool: for low-level calls to the YouTube Reporting API endpoints. It provides concrete examples, but it does not explicitly mention when not to use it or point to alternatives such as dedicated analytics tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_session_reportA
Summary plus traffic-source split for one video or live stream, over a window wide enough to include the live audience. A convenience over youtube_analytics_query.
| Name | Required | Description | Default |
|---|---|---|---|
| account | No | alias or channel id; defaults to the configured default, or the only account | |
| endDate | No | ||
| videoId | Yes | ||
| startDate | Yes | a date on or before the stream day |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It adds a useful detail: the tool automatically uses a window that includes the live audience, implying it adjusts dates around the stream. It also indicates the output includes a summary and traffic-source split. However, it does not disclose any side effects, permission requirements, rate limits, or the exact return structure. This is partial transparency but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no filler. The first sentence front-loads the core purpose and the window behavior, and the second sentence immediately identifies the relationship to a sibling tool. Every word contributes value, making it highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 4 parameters, no output schema, and no annotations, the description is insufficient. It fails to explain the meaning of endDate and account, and does not describe the format or structure of the returned summary and traffic-source split. While an agent might infer some behavior, it lacks the specifics needed to invoke the tool correctly or interpret results without additional context. The hint about the window is helpful but not enough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50% (only startDate and account have descriptions; videoId and endDate lack them). The description does not compensate for the missing parameters. It implicitly ties videoId to the video/live stream and startDate to the window start, but it does not clarify endDate (whether it is used or overridden) or account (its default behavior). Since coverage is low, the description needed to explain all parameters but only partially addresses them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: providing a summary and traffic-source split for a single video or live stream. It also explicitly names youtube_analytics_query as the tool it simplifies, which differentiates it from that sibling. The verb 'provide' is implied through 'Summary plus traffic-source split', and the resource is specific (one video or live stream).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says it is 'A convenience over youtube_analytics_query', which implies that for a typical summary of a single video, this tool is preferable to writing a raw query. It also mentions the window being 'wide enough to include the live audience', hinting at a use case for live streams. However, it does not explicitly state when not to use it or contrast with other siblings like youtube_data_call or youtube_reporting_call, so it falls short of full exclusions but still gives clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_set_default_accountB
Choose which authorized channel calls use when none is named.
| Name | Required | Description | Default |
|---|---|---|---|
| alias | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden of behavioral disclosure. It states that a default is chosen, implying persistence and effect on subsequent calls, but it does not mention prerequisites (e.g., accounts must already be authorized), whether this overwrites an existing default, or if changes are reversible. Such gaps are critical for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that fronts the verb and the core concept. There is no fluff or repetition; every word earns its place, achieving maximum conciseness while preserving clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (one parameter, no output schema), but the description is still incomplete. It fails to specify how the agent should obtain a valid alias, whether the alias must correspond to an already-authorized account, or any side effects of making a call without setting a default. An agent cannot reliably call this tool correctly based solely on this description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema description coverage at 0%, the description must explain the 'alias' parameter. It only implies that alias is the name of an authorized channel ('which authorized channel calls use... when none is named'), but it does not define what an alias is, how to obtain one, or the expected format. This is insufficient for an agent to correctly supply the parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (choose) and the resource (default authorized channel) and the conditional context (when none is named). It distinguishes this tool from siblings like youtube_accounts (lists accounts) and youtube_authorize (adds accounts), leaving no ambiguity about what it does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'when none is named' implies a usage context but does not explicitly contrast with per-call account naming or mention when you would need to set a default. It offers no guidance on when to use this tool versus naming an account directly in other calls, leaving the agent to infer the intended workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
13 tool updates
v0.2.0- First observed
youtube_accounts - First observed
youtube_analytics_query - First observed
youtube_authorize - First observed
youtube_authorize_cancel - First observed
youtube_authorize_status - First observed
youtube_capabilities - First observed
youtube_concurrent_curve - First observed
youtube_data_call - First observed
youtube_forget_account - First observed
youtube_refresh_tokens - First observed
youtube_reporting_call - First observed
youtube_session_report - First observed
youtube_set_default_account
TDQS
Scored across 13 tools
Each tool has a clearly distinct purpose: authorization flow (authorize, status, cancel), account management (accounts, set default, forget, refresh), raw API access (analytics_query, data_call, reporting_call), convenience wrappers (session_report, concurrent_curve), and capability explanation. The only slight overlap among the three unrestricted calls is mitigated by descriptions pointing to different YouTube APIs.
All tools share the consistent 'youtube_' prefix and use snake_case. However, the naming pattern mixes nouns (youtube_accounts, youtube_capabilities) with verb phrases (youtube_set_default_account, youtube_refresh_tokens) and compound nouns (youtube_analytics_query, youtube_concurrent_curve). Still, the names are readable and predictable after a moment.
At 13 tools, the server has a well-scoped surface covering authentication, account management, and multiple API query methods without redundancy. Each tool contributes a distinct capability, and none feel superfluous.
The surface covers the full lifecycle: authorization, account state, raw access to all three YouTube APIs, convenience queries for typical needs, and a capabilities tool to explain limitations. No obvious missing operations; even token revocation is addressed with a pointer to Google's page.
Maintenance
Related MCP Connectors
YouTube transcripts, search, channel/playlist listings and upload tracking for AI agents.
YouTube discovery, transcripts, library search, and monitors with API keys or OAuth.
YouTube data for AI agents: channels, videos, transcripts, comments, search. Video research.
Personal YouTube AI knowledge base powered by RAG. Query your subscribed YouTube channels.
Related MCP Servers
- FlicenseAqualityCmaintenanceEnables AI assistants to analyze YouTube channels, videos, transcripts, and content strategy through structured tool calls.1735 npm-
- FlicenseNot gradedqualityBmaintenanceEnables AI-powered automation of YouTube Studio tasks, including retrieving channel stats, fetching unanswered comments, and posting replies, using Google Gemini and MCP over SSE or stdio.-
- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to manage YouTube channels directly, including video publishing, SEO optimization, playlist curation, community interaction, and traffic analytics, all through local OAuth.1MIT
- AlicenseAqualityCmaintenanceEnables AI assistants to retrieve YouTube channel overviews, Studio analytics, video performance, traffic source breakdowns, and comments for sentiment analysis using natural language prompts.81MIT