youtube-mcp-server
Provides full programmatic control over a single YouTube channel, including tools for channel management, video upload and editing, playlist management, comments, captions, search, subscriptions, and analytics.
Click on "Install 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-mcp-serverlist my recent videos"
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-mcp-server
A local stdio MCP server that gives Claude (or any MCP client) full programmatic control over a single YouTube channel. Built with the MCP SDK, googleapis, and strict TypeScript/ESM.
What It Does
The server exposes ~46 tools grouped across eight domains:
Channel (4 tools)
Tool | Description |
| Fetch full details (stats, branding, playlists) for the authenticated channel |
| Fetch public details for any channel by ID, @handle, or username |
| Update description, keywords, country, language, or trailer video |
| List all sections on the channel home page |
Videos (8 tools)
Tool | Description |
| Fetch full metadata for any video by ID |
| List videos uploaded to the authenticated channel (paginated) |
| Upload a local video file to the channel |
| Update title, description, tags, category, or privacy for a video |
| Permanently delete a video (requires |
| Upload a local image file as the custom thumbnail |
| Like, dislike, or remove a rating on any video |
| List available video category IDs for a given region |
Playlists (6 tools)
Tool | Description |
| List playlists owned by the authenticated channel |
| Fetch details for any playlist by ID |
| Create a new playlist with title, description, and privacy |
| Update title, description, or privacy of a playlist |
| Permanently delete a playlist (requires |
| List items (videos) inside any playlist (paginated) |
| Add a video to a playlist |
| Remove an item from a playlist (requires |
Comments (6 tools)
Tool | Description |
| List top-level comment threads on a video or channel |
| Fetch a single comment thread with replies |
| Post a new top-level comment on a video |
| Post a reply to an existing comment thread |
| Edit the text of a comment you own |
| Delete a comment (requires |
| Set a comment's moderation status (hold/publish/reject) |
Captions (5 tools)
Tool | Description |
| List caption tracks for a video |
| Download the raw caption track content |
| Upload a new caption file to a video |
| Replace an existing caption track |
| Delete a caption track (requires |
Search (2 tools)
Tool | Description |
| Full YouTube search with filters (type, channel, order, date, region) |
| Search within only the authenticated channel's videos |
Subscriptions (3 tools)
Tool | Description |
| List channels the authenticated account is subscribed to |
| Subscribe to a channel by channel ID |
| Unsubscribe from a channel (requires |
Analytics (6 tools)
Tool | Description |
| Core channel metrics (views, watchTime, subscribers) over a date range |
| Per-video metrics over a date range |
| Traffic source breakdown (search, suggested, external, etc.) |
| Age/gender audience breakdown |
| Top N videos by a chosen metric (views, watchTimeMins, etc.) |
| Revenue and ad metrics (requires monetized channel) |
Related MCP server: YouTube MCP Server
Prerequisites
Node.js >= 18 (ESM +
fetchbuiltins required)A Google account with a YouTube channel
A Google Cloud project (see setup below)
Credentials & Configuration
This server authenticates to Google as you via OAuth 2.0. Nothing is hard-coded — you supply credentials at runtime, and none of them are ever committed (all are listed in .gitignore). You need three secret values, all obtained during the Google OAuth setup below:
Value | What it is | Where it comes from |
| OAuth client identifier (ends in |
|
| OAuth client secret |
|
| Long-lived token authorizing access to your channel | produced by |
You provide these in one of two ways:
Option A — file-based (recommended). Drop the downloaded credentials.json into the project root and run npm run auth. That writes token.json (containing all three values) and the server picks it up automatically. Nothing else to configure.
Option B — environment variables. Instead of token.json, set the three values directly (handy for CI, Docker, or a secrets manager):
YT_CLIENT_ID=your-client-id.apps.googleusercontent.com
YT_CLIENT_SECRET=your-client-secret
YT_REFRESH_TOKEN=your-refresh-tokenSee .env.example for a fully-commented template covering both options. Never commit credentials.json, token.json, or a real .env — anyone holding these can fully control your YouTube channel.
Google OAuth Setup
1. Create or Select a Google Cloud Project
Go to console.cloud.google.com.
Click the project selector (top-left) → New Project.
Name it (e.g.
my-youtube-app), click Create.Make sure the new project is selected in the dropdown before continuing.
2. Enable the Required APIs
In the left menu: APIs & Services → Library.
Search for and Enable each of the following:
YouTube Data API v3 (required)
YouTube Analytics API (required)
YouTube Reporting API (optional — bulk reporting jobs)
3. Configure the OAuth Consent Screen
Go to APIs & Services → OAuth consent screen.
Select External as the User Type, click Create.
Fill in the required fields:
App name (e.g.
My YouTube Tool)User support email (your own Google account)
Developer contact email (your own Google account)
Click Save and Continue through the Scopes step (you will add scopes in code, not here — or add them here if prompted).
On the Test users step: click + Add Users and add your own Google account email. Click Save and Continue.
Submit/finish the wizard.
Important — 7-day token expiry warning: While the app's publishing status is Testing, Google issues refresh tokens that expire after 7 days, regardless of any other setting. When your token expires, your app will get an
invalid_granterror and you must re-authenticate.To avoid this disruption:
Option A (recommended for personal use): Keep the app in Testing but make sure your own account is listed as a Test User — re-auth when needed, or click Publish App to move to Production.
Option B: Click Publish App → your app moves to "In Production" and refresh tokens no longer have the 7-day limit (tokens only expire if unused for 6+ months or manually revoked).
For a personal channel tool you own, publishing is safe and removes the friction.
4. Create OAuth Client Credentials (Desktop App)
Go to APIs & Services → Credentials.
Click + Create Credentials → OAuth client ID.
Application type: Desktop app.
Name it (e.g.
youtube-desktop-client), click Create.Click Download JSON on the confirmation dialog (or find it in the credentials list and click the download icon).
Save the file as
credentials.jsonin your project root.Keep this file private — never commit it to version control.
5. Scopes Requested
The server requests all six of these scopes:
https://www.googleapis.com/auth/youtube
https://www.googleapis.com/auth/youtube.force-ssl
https://www.googleapis.com/auth/youtube.upload
https://www.googleapis.com/auth/youtubepartner
https://www.googleapis.com/auth/yt-analytics.readonly
https://www.googleapis.com/auth/yt-analytics-monetary.readonlyThese cover full channel management, uploads, partner operations, and read access to both standard and monetary analytics.
6. Quota Limits
Resource | Cost |
Default daily quota | 10,000 units/day |
| 100 units per call |
| ~1,600 units per call |
Most read operations | 1–5 units |
Monitor usage at APIs & Services → Quotas & System Limits. You can request a quota increase via the console if needed.
7. Local Auth Flow with @google-cloud/local-auth
The npm run auth command uses @google-cloud/local-auth to open a browser consent flow and writes token.json to the project root.
import { authenticate } from '@google-cloud/local-auth';
import path from 'path';
const SCOPES = [
'https://www.googleapis.com/auth/youtube',
'https://www.googleapis.com/auth/youtube.force-ssl',
'https://www.googleapis.com/auth/youtube.upload',
'https://www.googleapis.com/auth/youtubepartner',
'https://www.googleapis.com/auth/yt-analytics.readonly',
'https://www.googleapis.com/auth/yt-analytics-monetary.readonly',
];
const client = await authenticate({
scopes: SCOPES,
keyfilePath: path.join(process.cwd(), 'credentials.json'),
});
// client.credentials includes access_token AND refresh_tokenHow the flow works:
authenticate()starts a local loopback HTTP server onlocalhost(a random port).It opens the Google consent URL in the user's default browser.
After the user grants consent, Google redirects to
http://localhost:<port>with an auth code.The library exchanges the code for tokens and returns an
OAuth2Client.client.credentials.refresh_tokenis present on the first authorization — persist it (e.g.token.json) and reuse it to avoid re-prompting on subsequent runs.
import fs from 'fs';
const TOKEN_PATH = path.join(process.cwd(), 'token.json');
// After first auth, save credentials:
fs.writeFileSync(TOKEN_PATH, JSON.stringify(client.credentials));
// On subsequent runs, load and restore:
import { google } from 'googleapis';
const savedCreds = JSON.parse(fs.readFileSync(TOKEN_PATH, 'utf8'));
const oauth2Client = new google.auth.OAuth2();
oauth2Client.setCredentials(savedCreds);
// Pass oauth2Client to google.youtube({ version: 'v3', auth: oauth2Client })Sources:
Install and Build
# Install dependencies
npm install
# Compile TypeScript to dist/
npm run buildAuthorize
Run the one-time OAuth flow to generate token.json:
npm run authThis opens a browser window. Sign in with the Google account that owns your YouTube channel, grant all requested scopes, and the token is saved automatically.
Security note:
credentials.jsonandtoken.jsonare listed in.gitignoreand must never be committed or shared. Anyone with these files can fully manage your YouTube channel.
Connect to Claude Code
Option A — claude mcp add command
claude mcp add youtube-mcp-server \
--transport stdio \
-- node "/ABSOLUTE/PATH/TO/youtube-mcp-server/dist/index.js"If you want to pass the token path explicitly via an environment variable:
claude mcp add youtube-mcp-server \
--transport stdio \
--env YT_TOKEN_PATH="/ABSOLUTE/PATH/TO/youtube-mcp-server/token.json" \
-- node "/ABSOLUTE/PATH/TO/youtube-mcp-server/dist/index.js"Option B — JSON config block
Add the following entry to your Claude Code MCP config file (.claude/settings.json or the global equivalent):
{
"mcpServers": {
"youtube-mcp-server": {
"type": "stdio",
"command": "node",
"args": ["/ABSOLUTE/PATH/TO/youtube-mcp-server/dist/index.js"],
"env": {
"YT_TOKEN_PATH": "/ABSOLUTE/PATH/TO/youtube-mcp-server/token.json"
}
}
}
}Option C — Environment-variable auth (no token.json)
Instead of token.json, you can supply credentials directly via environment variables — useful for CI or shared environments:
export YT_CLIENT_ID="your-client-id"
export YT_CLIENT_SECRET="your-client-secret"
export YT_REFRESH_TOKEN="your-refresh-token"
node dist/index.jsCopy .env.example to .env and fill in the values if you use a .env-loading approach.
Quota and Safety Notes
Daily quota: 10,000 units by default. A single
youtube_searchcall costs 100 units; a video upload costs ~1,600 units. Read operations cost 1–5 units each.Destructive tools (
youtube_delete_video,youtube_delete_playlist,youtube_delete_comment,youtube_delete_caption,youtube_remove_playlist_item,youtube_unsubscribe) all requireconfirm: truein the call. This prevents accidental data loss when the model mis-fires.Revenue analytics (
youtube_get_revenue_analytics) requires a monetized channel enrolled in the YouTube Partner Program.Token expiry: If you leave the OAuth app in "Testing" status, refresh tokens expire after 7 days. Either add yourself as a Test User and re-run
npm run authwhen needed, or publish the app to Production to remove the limit.
Testing
Interactive inspector (recommended for exploring tools)
npx @modelcontextprotocol/inspector node dist/index.jsOpen the URL printed in the terminal to browse and call tools interactively.
Smoke test (CI-friendly)
npm run build
node scripts/smoke.mjsExpected output:
TOOLS:46Exit code 0 means at least one tool is registered; exit code 1 means the server failed to respond or registered no tools.
Available Tools
46 toolsyoutube_add_video_to_playlistAdd Video to PlaylistA
Add a YouTube video to one of your playlists, with optional position.
Args
playlistId(string, required): The target playlist ID.videoId(string, required): The video ID to add.position(integer ≥ 0, optional): Zero-based position to insert at. If omitted, appends to end.
Returns Confirmation Markdown + structured new playlist item resource:
{
"playlistItemId": "...",
"playlistId": "PL...",
"videoId": "...",
"position": 0
}Examples
youtube_add_video_to_playlist({ playlistId: "PL...", videoId: "dQw4w9WgXcQ" })Add at position 0:
youtube_add_video_to_playlist({ playlistId: "PL...", videoId: "...", position: 0 })
Errors
404 → playlist or video not found.
403 → not your playlist or quota exceeded.
| Name | Required | Description | Default |
|---|---|---|---|
| playlistId | Yes | Playlist ID to add the video to. | |
| videoId | Yes | Video ID to add to the playlist. | |
| position | No | Zero-based insertion position. Omit to append at the end. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate a mutation (readOnlyHint=false). Description expands on behavior with return format, error cases (404, 403), and position details. No contradictions with annotations.
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?
Well-organized with headings (Args, Returns, Examples, Errors). Every sentence is informative, no redundancy. Efficient and easy to parse.
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?
Despite no output schema, the description includes the return JSON structure and common errors. It is nearly complete, though it could mention prerequisites like video visibility.
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 100%, but description adds significant value: clarifies position as zero-based, optional with append behavior, and provides concrete examples. Exceeds baseline.
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?
Clearly states 'Add a YouTube video to one of your playlists, with optional position.' Verb and resource are specific, and the tool is distinct from siblings like `youtube_remove_playlist_item`.
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 explicit guidance on when to use this tool versus alternatives. Examples and errors are provided, but there is no direct statement about typical use cases or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_audience_demographicsAudience DemographicsARead-onlyIdempotent
Retrieve the age group and gender distribution of the channel's viewers, expressed as percentages of total viewership.
Args:
startDate(optional): Inclusive start date inYYYY-MM-DDformat. Defaults to 28 days ago.endDate(optional): Inclusive end date inYYYY-MM-DDformat. Defaults to today.response_format(optional):"markdown"(default) or"json".
Returns (JSON shape):
{
"columns": ["ageGroup", "gender", "viewerPercentage"],
"rows": [
["age25-34", "male", 23.5],
["age18-24", "female", 18.2],
...
]
}Examples:
"What is my audience demographics?" → call with no arguments.
"Demographics for Q1 2025" → pass matching
startDate/endDate.
Errors:
403: insufficient scope or the channel has insufficient data — re-run
npm run auth.rows empty: channel may not have enough viewership data to surface demographics.
| Name | Required | Description | Default |
|---|---|---|---|
| startDate | No | Inclusive start date in YYYY-MM-DD format. Defaults to 28 days ago. | |
| endDate | No | Inclusive end date in YYYY-MM-DD format. Defaults to today. | |
| response_format | No | Output format: "markdown" (default) for a human-readable table, "json" for the structured payload. | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, destructive, idempotent, openWorld hints. Description adds useful behavioral context: returns percentage data, indicates that empty rows may occur if viewership data is insufficient, and explains error 403 requires re-authentication. This is extra value beyond annotations.
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?
Well-structured with clear sections: purpose, Args, Returns, Examples, Errors. Front-loaded with the main functionality. Each sentence adds necessary information; no fluff. Efficiently covers all needed aspects in a readable format.
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?
Despite lacking an output schema, the description includes a full JSON shape of the return value, covering columns and example rows. Handles date ranges, optional parameters, default behavior, and common errors. Sufficient for an agent to understand and invoke the tool correctly.
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 100%, so baseline is 3. Description adds value by providing return shape (JSON with columns/rows), default values, and examples showing parameter usage. It clarifies the meaning of dates and the response_format enum. Slightly redundant with schema but still helpful.
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?
Clearly states the tool retrieves age group and gender distribution of viewers as percentages. Specific verb 'retrieve' and resource 'age and gender distribution' with no ambiguity. Distinguishes itself from sibling analytics tools like youtube_revenue and youtube_traffic_sources.
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 example calls with and without arguments, and describes error scenarios. However, no explicit guidance on when to prefer this tool over siblings. The examples implicitly guide usage for date ranges, but lacks 'when not to use' or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_channel_summaryChannel Analytics SummaryARead-onlyIdempotent
Retrieve a broad performance summary for the authenticated channel covering views, watch time, subscriber changes, likes, dislikes, comments, and shares. Optionally break the data down by day or month.
Args:
startDate(optional): Inclusive start date inYYYY-MM-DDformat. Defaults to 28 days ago.endDate(optional): Inclusive end date inYYYY-MM-DDformat. Defaults to today.dimension(optional): Time grouping —"none"(default, aggregate totals),"day"(one row per day), or"month"(one row per month).response_format(optional):"markdown"(default) or"json".
Returns (JSON shape):
{
"columns": ["views", "estimatedMinutesWatched", "averageViewDuration", "averageViewPercentage",
"subscribersGained", "subscribersLost", "likes", "dislikes", "comments", "shares"],
"rows": [[12345, 67890, 240, 45.2, 100, 10, 500, 20, 80, 30]]
}When dimension is "day" or "month", the first column is the date/month string.
Examples:
"Give me my channel stats for last month" → pass
startDate/endDatecovering that month."Daily breakdown of my channel this week" →
dimension: "day"with appropriate dates.
Errors:
403: insufficient scope — re-run
npm run auth.
| Name | Required | Description | Default |
|---|---|---|---|
| startDate | No | Inclusive start date in YYYY-MM-DD format. Defaults to 28 days ago. | |
| endDate | No | Inclusive end date in YYYY-MM-DD format. Defaults to today. | |
| dimension | No | Time grouping: "none" (default) for aggregate totals, "day" for per-day rows, "month" for per-month rows. | none |
| response_format | No | Output format: "markdown" (default) for a human-readable table, "json" for the structured payload. | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds valuable behavioral context: the JSON shape of the response, error handling (403 scope), and the effect of the dimension parameter on output structure. It does not contradict annotations. The added detail on default date range and format enhances 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 well-structured with sections for description, arguments, returns, examples, and errors. It is not overly verbose for the amount of detail provided. Every sentence adds value. However, it could be slightly more concise; some details about default behavior are repeated in both description and schema.
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?
Given no output schema, the description compensates by providing the exact JSON shape and explaining the markdown output. It covers error handling (403), includes examples, and explains optional parameters with defaults. The tool is well-documented for an agent to use correctly.
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 100%, so baseline is 3. The description adds meaning beyond the schema by providing usage examples (e.g., 'Daily breakdown of my channel this week'), explaining the effect of dimension on output, and clarifying default behavior. The error note also adds context. This elevates the score above baseline.
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 retrieves a 'broad performance summary' for the authenticated channel, listing specific metrics. The verb 'Retrieve' and resource 'channel performance summary' are precise. Among siblings, this is distinct from query-based analytics (youtube_run_analytics_query) and video-specific tools (youtube_top_videos, youtube_video_performance).
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 guidance on when to use the tool (for channel summary), includes optional parameters with defaults, and gives examples. It does not explicitly state when not to use it or suggest alternatives, but the examples and error note indirectly guide usage. A slightly stronger score would require explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_create_comment_threadCreate Comment ThreadA
Posts a new top-level comment on a YouTube video, creating a new comment thread.
Args
videoId(string, required) — ID of the video to comment on.text(string, required) — Text of the top-level comment (supports basic HTML entities).
Returns The newly created commentThread resource:
{
"id": "string",
"videoId": "string",
"authorDisplayName": "string",
"text": "string",
"likeCount": 0,
"publishedAt": "ISO-8601"
}Examples
Comment on a video:
{ "videoId": "dQw4w9WgXcQ", "text": "Great video!" }
Errors
400 if
textis empty.403 if comments are disabled for the video or quota is exceeded.
404 if the video does not exist.
| Name | Required | Description | Default |
|---|---|---|---|
| videoId | Yes | ID of the video to post the top-level comment on. | |
| text | Yes | Text of the top-level comment. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description supplements annotations by detailing the return format, error scenarios (empty text, disabled comments, missing video), and the fact that it creates a new resource. Annotations already indicate mutation and non-destructiveness, and the description adds context about what the tool does and its failure modes.
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 concise and well-structured with clear sections (Args, Returns, Examples, Errors). Every sentence adds value, and the first sentence immediately states the purpose. No redundancy or fluff.
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 write tool with only 2 parameters and no output schema, the description covers the operation, example usage, return data, and common errors. It does not mention authentication or rate limits explicitly, but the error note on quota covers some of that. It is largely complete for the given complexity.
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 100%, so baseline is 3. The description adds minimal extra value: it mentions that text supports basic HTML entities, which schema does not. Otherwise, parameter descriptions are nearly identical to schema. The return format and example provide indirect parameter context.
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 posts a new top-level comment on a YouTube video, creating a new comment thread. It uses a specific verb and resource, and distinguishes from siblings like youtube_reply_to_comment (which replies to an existing thread) and youtube_list_comment_threads.
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 an example and lists error conditions, which imply use cases, but it does not explicitly state when to use this tool vs alternatives like youtube_reply_to_comment. There is no direct contrast or prerequisites mentioned beyond the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_create_playlistCreate PlaylistA
Create a new playlist on the authenticated channel.
Args
title(string, required): Playlist title (max 255 characters).description(string, optional): Playlist description.privacyStatus("public" | "private" | "unlisted", default "private"): Visibility.defaultLanguage(string, optional): BCP-47 language code (e.g."en").
Returns Confirmation Markdown + structured new playlist resource:
{ "id": "PL...", "title": "...", "privacyStatus": "private", "publishedAt": "..." }Examples
youtube_create_playlist({ title: "My Shorts", privacyStatus: "public" })
Errors
400 → invalid parameters (e.g. empty title).
403 → quota exceeded or insufficient scope.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | Playlist title (required, max 255 chars). | |
| description | No | Optional playlist description. | |
| privacyStatus | No | Visibility: "public", "private" (default), or "unlisted". | private |
| defaultLanguage | No | Optional BCP-47 language code, e.g. "en". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate a non-read-only, non-destructive operation with open-world hints. The description adds context by mentioning errors (e.g., 403 quota exceeded) and return structure, which supplements the annotations well.
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 well-organized with clear sections (Args, Returns, Examples, Errors), front-loaded with the purpose, and contains no unnecessary information. Every part serves a purpose.
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 operation, parameters, return format, error scenarios, and an example. For a creation tool with 4 parameters and no output schema, it is comprehensive and leaves no gaps for the agent.
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?
Since schema description coverage is 100%, the baseline is 3. The description adds marginal value by repeating defaults and providing an example, but does not substantially enhance parameter meaning beyond the schema.
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 'Create a new playlist on the authenticated channel' using a specific verb and resource. It distinguishes from sibling tools like youtube_delete_playlist and youtube_update_playlist through the creation intent.
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?
While the description provides examples and error codes, it does not explicitly specify when to use this tool versus alternatives (e.g., youtube_update_playlist). Usage context is implied but not explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_delete_captionDelete Caption TrackADestructiveIdempotent
Permanently delete a caption track from a YouTube video.
This action is irreversible. You must pass confirm: true explicitly or
the tool will refuse to proceed.
Args
captionId(string, required): The ID of the caption track to delete.confirm(boolean, default false): Must be set totrueto authorize the deletion.
Returns A short confirmation string on success:
Caption track <captionId> deleted successfully.Examples
Delete a track (dry run — will be refused):
captionId="AYtvM..."Delete a track (confirmed):
captionId="AYtvM...", confirm=true
Errors
403: You can only delete captions on your own channel. Check scopes (
youtube.force-ssl).404: Caption track not found.
Refused: If
confirmis nottruethe tool returns an error without calling the API.
| Name | Required | Description | Default |
|---|---|---|---|
| captionId | Yes | The ID of the caption track to permanently delete. | |
| confirm | No | Must be true to authorize the deletion. Defaults to false as a safety guard. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true, but the description adds critical context: the action is irreversible, requires a confirm flag, and lists possible error codes (403, 404). This goes beyond the annotations without contradiction.
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 well-structured with sections for warning, args, returns, examples, and errors. It is front-loaded with the purpose and safety warning, and every section adds value without unnecessary verbosity.
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?
Given the destructive nature and lack of output schema, the description covers purpose, safety, parameters, errors, and usage examples. It effectively compensates for missing output schema by showing the return string. Minor omission: no explicit mention of rate limits.
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 100%, so baseline is 3. The description adds examples and clarifies the confirm flag's role, but the schema already provides adequate descriptions for both parameters.
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 explicitly states 'Permanently delete a caption track from a YouTube video,' which is a specific verb+resource. This clearly distinguishes it from sibling tools like youtube_upload_caption or youtube_delete_video.
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 clear context for when to use the tool (to delete a caption track) and highlights prerequisites (own channel, need for confirm flag). However, it does not explicitly mention when not to use it or suggest alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_delete_commentDelete CommentADestructiveIdempotent
Permanently deletes a comment owned by the authenticated channel. This action is irreversible.
Args
commentId(string, required) — ID of the comment to delete.confirm(boolean, default false) — Must be explicitly set totrueto proceed. Safety guard against accidental deletion.
Returns A short confirmation message and the deleted comment ID:
{ "deleted": true, "commentId": "string" }Examples
Delete a comment:
{ "commentId": "UgxABC123", "confirm": true }
Errors
Refused if
confirmis nottrue.403 if the comment does not belong to the authenticated channel, or quota is exceeded.
404 if the comment does not exist.
| Name | Required | Description | Default |
|---|---|---|---|
| commentId | Yes | ID of the comment to permanently delete. | |
| confirm | No | Must be true to proceed with the destructive deletion. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds value beyond annotations: details irreversibility, confirmation requirement, and error scenarios, fully disclosing behavioral traits.
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?
Well-structured with clear sections (Args, Returns, Examples, Errors), concise and front-loaded with essential info.
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?
Complete for a simple delete operation: covers purpose, parameters, return value, errors, and safety mechanisms.
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 100%; description adds example and error context for confirm parameter, enhancing clarity.
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?
Description clearly states the action (permanently deletes), resource (comment), and ownership condition (owned by authenticated channel), distinguishing it from siblings like update or mark as spam.
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 notes irreversibility, confirm flag as safety guard, and error conditions (403 if not owned, 404 if not exist), guiding appropriate use. Lacks direct comparison to alternatives like spam marking.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_delete_playlistDelete PlaylistADestructive
Permanently delete a playlist. This is irreversible.
Args
playlistId(string, required): Playlist ID to delete.confirm(boolean, default false): Must betrueto execute the deletion.
Returns Confirmation text on success.
Examples
youtube_delete_playlist({ playlistId: "PL...", confirm: true })
Errors
404 → playlist not found.
403 → not your playlist or scope missing.
Not passing
confirm: true→ refused with instructions to re-call.
| Name | Required | Description | Default |
|---|---|---|---|
| playlistId | Yes | Playlist ID to delete permanently. | |
| confirm | No | Must be true to confirm the irreversible deletion. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true. Description adds detail: it's irreversible, requires explicit confirmation, and lists potential errors (404, 403). This goes beyond annotations without contradicting them.
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?
Description is well-structured with separate sections for Args, Returns, Examples, and Errors. It is concise yet comprehensive, with key information 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?
Given the tool's simplicity and lack of output schema, the description covers all necessary aspects: what it does, how to use it (with confirm), error handling, and return value. No gaps.
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 covers both parameters fully. Description adds practical context: the confirm parameter must be true to execute, else the tool will refuse. This adds value beyond the schema definitions.
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?
Description clearly states 'Permanently delete a playlist. This is irreversible.' The verb (delete) and resource (playlist) are explicit, and the scope is well-defined, distinguishing it from sibling tools like youtube_delete_video or youtube_update_playlist.
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?
Description provides clear context: it's for permanent deletion and requires confirm=true. It also lists error conditions. However, it does not explicitly compare with alternatives or state when not to use it, leaving room for improvement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_delete_videoDelete VideoADestructive
Permanently delete a video from the authenticated channel.
This action is irreversible. You must pass confirm:true to proceed.
Args
videoId (string, required): ID of the video to delete
confirm (boolean, required): must be true to proceed — safety guard
Returns Short confirmation that the video was deleted.
Examples
Delete:
{ "videoId": "abc123", "confirm": true }
Errors
403: video is not owned by the authenticated account
404: video not found
| Name | Required | Description | Default |
|---|---|---|---|
| videoId | Yes | ID of the video to permanently delete. | |
| confirm | No | Must be set to true to confirm this irreversible deletion. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide destructiveHint=true, but description adds crucial detail: irreversible action, required confirm flag, and specific error conditions. This provides rich behavioral context beyond annotations.
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?
Description is well-structured with sections for summary, warning, args, returns, examples, and errors. Every sentence is informative and earns its place.
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 delete operation, the description covers irreversibility, required parameters, example usage, and error conditions. No output schema needed; 'Short confirmation' is sufficient.
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 100%, but description adds value by describing 'confirm' as a safety guard and specifying that it must be true. However, videoId parameter receives no additional detail beyond schema.
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?
Description explicitly states 'Permanently delete a video from the authenticated channel,' clearly specifying verb and resource. It distinguishes from sibling tools like youtube_delete_playlist or youtube_delete_caption.
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 clearly implies usage when deleting a video, with warnings about irreversibility. It mentions error conditions for not-owned videos, but does not explicitly state alternatives or when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_download_captionDownload Caption TrackARead-onlyIdempotent
Download the raw content of a caption track by its ID.
If outPath is provided the content is written to that local file path and
a confirmation message is returned. Otherwise the caption text is returned
directly (truncated to the character limit if necessary).
Args
captionId(string, required): The caption track ID to download.format("srt" | "vtt" | "sbv", optional): Subtitle format. Defaults to the track's native format when omitted.tlang(string, optional): ISO 639-1 language code for auto-translated output (e.g. "fr", "de").outPath(string, optional): Absolute local path to write the caption file to.
Returns
Without
outPath: the raw caption file content as a text string.With
outPath: a confirmation string"Written N bytes to <path>".
JSON shape (structured) when content returned inline:
{ "captionId": "string", "format": "string|null", "tlang": "string|null", "content": "string" }Examples
Download as SRT:
captionId="AYtvM...", format="srt"Translate to French and save:
captionId="AYtvM...", tlang="fr", outPath="/tmp/fr.vtt"
Errors
403: Captions can only be downloaded for videos on your own channel. Check scopes (
youtube.force-ssl).404: Caption track not found.
| Name | Required | Description | Default |
|---|---|---|---|
| captionId | Yes | The caption track ID to download. | |
| format | No | Subtitle format: "srt", "vtt", or "sbv". Omit to use the track's native format. | |
| tlang | No | ISO 639-1 language code for auto-translated output (e.g. "fr"). | |
| outPath | No | Absolute local file path to write the caption content to. When provided, returns a confirmation instead of the content. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses truncation behavior, write-to-file vs inline return, error codes (403, 404), and aligns perfectly with annotations (readOnly, idempotent).
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?
Well-structured with clear sections, front-loaded purpose, and efficient use of space.
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?
Covers all aspects: input, output, error handling, examples. No gaps given the complexity and schema richness.
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?
Adds significant value beyond schema: default format behavior, return types, examples. Schema coverage is 100% but the description enriches each 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 verb 'download' and resource 'caption track', distinguishing it from sibling tools like 'list', 'delete', and 'update'.
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 on when to use (with caption ID) and constraints (own channel, scopes), though does not explicitly mention when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_geographyGeography AnalyticsARead-onlyIdempotent
Break down views, watch time, and average view duration by country for the authenticated channel.
Args:
startDate(optional): Inclusive start date inYYYY-MM-DDformat. Defaults to 28 days ago.endDate(optional): Inclusive end date inYYYY-MM-DDformat. Defaults to today.maxResults(optional): Number of countries to return (1–50, default 25).response_format(optional):"markdown"(default) or"json".
Returns (JSON shape):
{
"columns": ["country", "views", "estimatedMinutesWatched", "averageViewDuration"],
"rows": [["US", 10000, 45000, 270], ["IN", 8000, 30000, 225], ...]
}Examples:
"Where are my viewers located?" → call with no arguments.
"Top 10 countries by views this month" →
maxResults: 10with appropriate dates.
Errors:
403: insufficient scope — re-run
npm run auth.
| Name | Required | Description | Default |
|---|---|---|---|
| startDate | No | Inclusive start date in YYYY-MM-DD format. Defaults to 28 days ago. | |
| endDate | No | Inclusive end date in YYYY-MM-DD format. Defaults to today. | |
| maxResults | No | Number of countries to return (1–50). Defaults to 25. | |
| response_format | No | Output format: "markdown" (default) for a human-readable table, "json" for the structured payload. | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false. The description adds behavioral context beyond annotations: mentions a possible 403 error (insufficient scope) and provides default date ranges, enhancing transparency without contradiction.
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 well-structured with a concise intro, bullet-pointed arguments, a formal return shape, and example usage. Every sentence adds value, no fluff.
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 read-only analytics tool with no output schema, the description provides complete context: purpose, parameters with defaults, return format, examples, and error handling. It is self-contained and sufficient for an agent to use correctly.
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?
Although schema coverage is 100%, the description adds significant meaning beyond schema by including the default value for startDate (28 days ago), the return shape with columns and rows, and a clear example. This fully compensates for the lack of an output schema.
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 it breaks down views, watch time, and average view duration by country. The verb "break down" and resource "by country" are specific and distinguish it from sibling tools like youtube_top_videos (top videos) or youtube_traffic_sources (traffic sources).
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 clear context for when to use the tool (geographic analytics for the channel) and includes examples like "Where are my viewers located?" but does not explicitly mention when not to use it or directly compare to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_get_channelGet ChannelARead-onlyIdempotent
Retrieve public details for any YouTube channel by one of three identifiers: channel ID, @handle, or legacy username. Exactly one of channelId, handle, or username must be supplied.
Args:
channelId(optional): The channel's unique ID, e.g."UCxxxxxxxx".handle(optional): The channel's @handle. The leading@is stripped automatically, e.g."@MrBeast"or"MrBeast".username(optional): A legacy YouTube username (deprecated by YouTube but still supported), e.g."PewDiePie".response_format(optional):"markdown"(default) or"json".
Returns (JSON shape):
{
"id": "UCxxxxxxxx",
"snippet": { "title", "description", "customUrl", "publishedAt", "country", "thumbnails" },
"statistics": { "subscriberCount", "videoCount", "viewCount", "commentCount" },
"brandingSettings": { "channel": { "title", "description", "keywords" } },
"contentDetails": { "relatedPlaylists": { "uploads" } }
}Examples:
"Look up channel UCxxxxxxxx" → pass
channelId: "UCxxxxxxxx"."Get info on @MrBeast" → pass
handle: "@MrBeast"."Find channel for username PewDiePie" → pass
username: "PewDiePie".
Errors:
400: none of the three identifiers was provided.
404: channel not found or not publicly accessible.
| Name | Required | Description | Default |
|---|---|---|---|
| channelId | No | YouTube channel ID, e.g. UCxxxxxxxx. Provide exactly one of channelId, handle, or username. | |
| handle | No | Channel @handle, e.g. "@MrBeast" or "MrBeast". The leading @ is stripped automatically. | |
| username | No | Legacy YouTube username (deprecated). Provide exactly one of channelId, handle, or username. | |
| response_format | No | Output format: "markdown" (default) for a human-readable summary, "json" for the raw API object. | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate idempotent, read-only, non-destructive behavior. The description adds that it retrieves only public details and accepts three identifier types, with automatic @-stripping, providing behavioral context beyond annotations.
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 structured into clear sections (Args, Returns, Examples, Errors) and is comprehensive without being overly verbose. Some redundancy exists but overall it's 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?
Combined with the schema and annotations, the description provides thorough context: return shape, error handling, examples, and identifier usage. It is fully complete for a read-only lookup tool with no output 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?
All parameters are well-documented in the schema, and the description adds examples, error scenarios, and clarifies the relationship between the three optional identifiers, significantly enhancing understanding.
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 it retrieves public details for a YouTube channel by three specific identifiers, distinguishing it from sibling tools like youtube_get_my_channel.
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 specifies exactly when to use the tool (retrieve channel by ID/handle/username) and provides error conditions. It could explicitly contrast with similar tools like youtube_channel_summary, but overall it provides clear usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_get_my_channelGet My ChannelARead-onlyIdempotent
Retrieve full details for the authenticated user's own YouTube channel.
Args:
response_format(optional):"markdown"(default) for a concise human-readable summary or"json"for the raw API payload.
Returns (JSON shape):
{
"id": "UCxxxxxxxx",
"snippet": { "title", "description", "customUrl", "publishedAt", "country", "defaultLanguage", "thumbnails" },
"statistics": { "subscriberCount", "videoCount", "viewCount", "commentCount" },
"status": { "privacyStatus", "madeForKids", ... },
"brandingSettings": { "channel": { "title", "description", "keywords", "country", "defaultLanguage", "unsubscribedTrailer" } },
"contentDetails": { "relatedPlaylists": { "uploads", "watchHistory", "watchLater" } },
"topicDetails": { "topicCategories": [...] }
}Examples:
"Show me my channel info" → call with no arguments.
"Give me the full JSON for my channel" → pass
response_format: "json".
Errors:
401 / 403: credentials missing or expired — re-run
npm run auth.404: no YouTube channel associated with this Google account.
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | Output format: "markdown" (default) for a human-readable summary, "json" for the raw API object. | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already imply safety (readOnlyHint, idempotent). The description adds explicit error codes (401/403, 404) and detailed return schema, providing rich behavioral context well beyond annotations.
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?
Compact, well-organized sections (Args, Returns, Examples, Errors). No wasted words; every sentence adds value. Front-loaded with the primary purpose.
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?
Despite no output schema, the description fully documents the return shape with a JSON block, error handling, and usage examples. An agent has complete information to invoke the tool correctly.
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 100% (one parameter fully described). The description adds usage examples and context ('markdown' vs 'json'), providing value beyond the schema's enum and default.
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 'Retrieve full details for the authenticated user's own YouTube channel,' specifying both the verb (retrieve) and the resource (own channel). This distinguishes it from sibling 'youtube_get_channel' which gets other users' channels.
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 explicit guidance on when to use this tool vs alternatives like 'youtube_get_channel.' The description only states what it does, without context on when not to use it or which sibling to prefer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_get_playlistGet Playlist DetailsARead-onlyIdempotent
Fetch full details for a single playlist by its ID.
Args
playlistId(string, required): The YouTube playlist ID (e.g.PLrEnWoR732-B...).response_format("markdown" | "json", default "markdown"): Output format.
Returns JSON shape:
{
"id": "PL...",
"title": "My Playlist",
"description": "...",
"privacyStatus": "public",
"itemCount": 12,
"publishedAt": "2024-01-01T00:00:00Z",
"defaultLanguage": "en",
"channelId": "UC...",
"channelTitle": "My Channel"
}Examples
youtube_get_playlist({ playlistId: "PLrEnWoR732-B..." })
Errors
404 → playlist not found or not accessible.
403 → insufficient permission.
| Name | Required | Description | Default |
|---|---|---|---|
| playlistId | Yes | The YouTube playlist ID to retrieve. | |
| response_format | No | Output format: "markdown" (default) or "json". | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, openWorldHint=true. The description adds valuable behavioral context: the return JSON shape, error codes (404, 403), and output format flexibility. No contradiction with annotations.
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 well-organized into Args, Returns, Examples, Errors sections. Every sentence is informative and necessary. No extraneous content. The structure aids 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?
Given the tool has no output schema, the description provides a detailed JSON shape. It covers purpose, parameters (with examples), return values, and error handling. For a simple 2-parameter read tool, this is fully 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 description coverage is 100% for both parameters. The description adds value beyond the schema by providing an example playlistId format and default value for response_format. However, the schema already adequately describes each 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 'Fetch full details for a single playlist by its ID.' It uses a specific verb ('Fetch'), a specific resource ('playlist'), and distinguishes from siblings like youtube_list_playlists (which lists multiple playlists) and youtube_get_video (different resource).
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 includes examples, error codes, and output format options, but does not explicitly state when to use this tool vs alternatives like youtube_list_playlists. However, the purpose is clear enough that an agent would infer the appropriate usage scenario.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_get_videoGet Video DetailsARead-onlyIdempotent
Fetch full metadata for a single video by ID.
Calls videos.list with parts: snippet, statistics, status, contentDetails, topicDetails, player, and liveStreamingDetails.
Args
videoId (string, required): the YouTube video ID (e.g. "dQw4w9WgXcQ")
response_format: "markdown" (default) or "json"
Returns JSON shape:
{
"id": "dQw4w9WgXcQ",
"title": "Never Gonna Give You Up",
"description": "...",
"publishedAt": "2009-10-25T06:57:33Z",
"channelTitle": "Rick Astley",
"categoryId": "10",
"tags": ["rick astley", "pop"],
"duration": "PT3M32S",
"viewCount": "1400000000",
"likeCount": "15000000",
"commentCount": "2000000",
"privacyStatus": "public",
"embeddable": true,
"madeForKids": false,
"thumbnails": { ... },
"statistics": { ... },
"contentDetails": { ... }
}Examples
Get video:
{ "videoId": "dQw4w9WgXcQ" }JSON output:
{ "videoId": "dQw4w9WgXcQ", "response_format": "json" }
Errors
404: video does not exist or is private/deleted
403: insufficient permissions to view this video
| Name | Required | Description | Default |
|---|---|---|---|
| videoId | Yes | YouTube video ID (e.g. dQw4w9WgXcQ). | |
| response_format | No | Output format: "markdown" (default) or "json". | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly, destructive, idempotent, and openWorld hints. The description adds significant value by detailing the underlying API call (videos.list with specific parts), the return JSON shape, and error handling, providing complete behavioral 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 well-structured with sections (Args, Returns, Examples, Errors). It is front-loaded with the purpose, and every sentence adds value without redundancy. Appropriate length for the tool's complexity.
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 all essential aspects: purpose, parameters, return format (including full JSON shape), examples, and error handling. Since there is no output schema, the return description is crucial and well-provided.
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?
Input schema has 100% coverage, so baseline is 3. The description adds example values and clarifies the response_format, but this is only marginal beyond the schema's descriptions. The schema already provides necessary semantics.
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 'Fetch full metadata for a single video by ID,' using a specific verb and resource. It distinguishes from sibling tools like youtube_search (which lists multiple videos) and youtube_get_channel (which fetches channel details) by focusing on a single video's comprehensive metadata.
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 error conditions (404, 403) that help determine when the tool can be used. However, it does not explicitly state when not to use it or suggest alternative tools for scenarios like fetching multiple videos or searching.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_list_captionsList Caption TracksARead-onlyIdempotent
List all caption tracks available for a YouTube video.
Args
videoId(string, required): The YouTube video ID whose captions to list.response_format("markdown" | "json", default "markdown"): Output format.
Returns JSON shape:
{
"videoId": "string",
"items": [
{
"id": "string",
"language": "string",
"name": "string",
"trackKind": "standard|asr|forced",
"isDraft": boolean,
"isAutoSynced": boolean,
"status": "string"
}
],
"totalCount": number
}Examples
List captions for video "dQw4w9WgXcQ":
videoId="dQw4w9WgXcQ"Get JSON output:
videoId="dQw4w9WgXcQ", response_format="json"
Errors
403: Forbidden — you can only list captions for videos on your own channel, or you lack the
youtube.force-sslscope.404: Video not found or not accessible with current credentials.
| Name | Required | Description | Default |
|---|---|---|---|
| videoId | Yes | The YouTube video ID whose caption tracks to list. | |
| response_format | No | Output format: "markdown" for human-readable text, "json" for raw structured data. | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds context about required scopes (youtube.force-ssl) and error scenarios, which goes beyond the annotations.
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 well-organized with clear sections for Args, Returns, Examples, and Errors. It is concise yet comprehensive, with no unnecessary information.
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?
Given the tool has only 2 parameters and no output schema, the description provides a complete JSON shape for returns, covers errors, and gives examples. This fully equips an AI agent to use the tool correctly.
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 100% with descriptions for both parameters. The description adds examples and explains the default for response_format, providing additional meaning beyond the schema.
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 'List all caption tracks available for a YouTube video', providing a specific verb (list) and resource (caption tracks). This distinguishes it from sibling tools like download, upload, update, or delete caption.
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 includes arguments, examples, and error conditions (403 Forbidden, 404 Not Found) that guide when the tool can be used. It does not explicitly name alternative tools but provides enough context for correct usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_list_channel_sectionsList Channel SectionsARead-onlyIdempotent
List all sections on the authenticated user's YouTube channel home page (e.g. Featured Playlists, Single Playlist, Popular Uploads, etc.).
Args:
response_format(optional):"markdown"(default) for a readable table or"json"for the full API payload array.
Returns (JSON shape):
[
{
"id": "CS_ID",
"snippet": {
"type": "singlePlaylist",
"title": "Section title",
"position": 0,
"channelId": "UCxxxxxxxx"
},
"contentDetails": {
"playlists": ["PLxxxxxxxx"],
"channels": []
}
}
]Examples:
"What sections are on my channel page?" → call with no arguments.
"Give me the raw JSON of my channel sections" → pass
response_format: "json".
Errors:
401 / 403: credentials expired or missing scope — re-run
npm run auth.404: authenticated account has no YouTube channel.
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | Output format: "markdown" (default) for a readable list, "json" for the raw API array. | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds significant behavioral context: explains the return shape, response_format options, and common errors. No contradiction with annotations.
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 well-structured with clear sections (Args, Returns, Examples, Errors). It is concise, using bullet points and a JSON example, with no redundant information.
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?
Given the low complexity (1 optional param) and the presence of comprehensive annotations, the description is complete. It covers return values via the JSON shape, error handling, and usage examples. No output schema is needed because the JSON shape is provided.
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 single parameter (response_format) is fully documented in the schema (100% coverage). The description enriches it by explaining the default and the difference between 'markdown' (readable table) and 'json' (raw API array), going beyond the enum values.
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 lists all sections on the authenticated user's YouTube channel home page, with examples of section types. This distinguishes it from sibling list tools like youtube_list_playlists or youtube_list_subscriptions by specifying the unique resource.
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 examples of when to call the tool and includes an Errors section with troubleshooting steps (e.g., re-running auth). However, it does not explicitly state when not to use this tool or mention alternative tools for similar tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_list_comment_repliesList Comment RepliesARead-onlyIdempotent
Retrieves a page of replies to a specific top-level comment thread.
Args
parentId(string, required) — ID of the parent comment thread (top-level comment ID).maxResults(1–50, default 25) — Number of replies per page.pageToken(string, optional) — Cursor from a previous response to fetch the next page.response_format("markdown" | "json", default "markdown") — Output format.
Returns
{
"replies": [
{
"id": "string",
"parentId": "string",
"authorDisplayName": "string",
"text": "string",
"likeCount": 0,
"publishedAt": "ISO-8601",
"updatedAt": "ISO-8601"
}
],
"nextPageToken": "string | null"
}Examples
Fetch replies for a comment thread:
{ "parentId": "UgxABC123_replies", "maxResults": 10 }
Errors
404 if the parent comment does not exist.
403 if the video's comments are disabled or quota is exceeded.
| Name | Required | Description | Default |
|---|---|---|---|
| parentId | Yes | ID of the top-level comment thread whose replies to list. | |
| maxResults | No | Number of replies per page (1–50, default 25). | |
| pageToken | No | Pagination cursor from a previous response's nextPageToken. | |
| response_format | No | Output format: "markdown" (default) or "json". | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond annotations by detailing pagination behavior, the exact return structure (including fields like id, authorDisplayName, text, etc.), error conditions (404, 403), and default values. Annotations already indicate read-only, non-destructive, idempotent, and open-world, so the description adds significant context on how the tool behaves.
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 well-structured with clear sections (Args, Returns, Examples, Errors). It is concise, using only necessary information without redundancy. Every sentence serves a purpose.
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?
Despite having no output schema in structured form, the description provides a detailed JSON return schema, pagination details, error handling, and a usage example. This fully compensates for the lack of formal output schema and makes the tool's behavior completely transparent.
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?
All four parameters are fully described in the input schema (100% coverage). The description reiterates the same information with added context like defaults and an example, but does not provide new meaning beyond what the schema already conveys. Baseline of 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 clearly states 'Retrieves a page of replies to a specific top-level comment thread,' specifying the verb, resource, and scope. It distinguishes from siblings like 'youtube_list_comment_threads' (which lists top-level threads) and 'youtube_reply_to_comment' (which creates replies).
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 clear context for when to use the tool (when you have a parent comment ID and want replies) and includes examples and error cases. However, it does not explicitly state when not to use it or directly contrast with sibling tools, though this is implied by the name and sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_list_comment_threadsList Comment ThreadsARead-onlyIdempotent
Retrieves a page of top-level comment threads for a YouTube video or channel.
Args
videoId(string, optional) — ID of the video whose comment threads to list.channelId(string, optional) — Channel ID; lists all threads related to that channel (includes video comments and channel comments).Exactly one of
videoId/channelIdmust be supplied.order("time" | "relevance", default "time") — Sort order.searchTerms(string, optional) — Filter threads containing this text.maxResults(1–50, default 25) — Number of threads per page.pageToken(string, optional) — Cursor returned from a previous call to fetch the next page.response_format("markdown" | "json", default "markdown") — Output format.
Returns
{
"threads": [
{
"id": "string",
"authorDisplayName": "string",
"text": "string",
"likeCount": 0,
"publishedAt": "ISO-8601",
"updatedAt": "ISO-8601",
"totalReplyCount": 0,
"replies": [ { "id": "string", "authorDisplayName": "string", "text": "string" } ]
}
],
"nextPageToken": "string | null"
}Examples
List the first 10 comment threads on a video:
{ "videoId": "dQw4w9WgXcQ", "maxResults": 10 }Page through channel comments:
{ "channelId": "UCxxxxxxx", "pageToken": "CAUQAA" }
Errors
400 if neither or both of
videoId/channelIdare provided.403 if comments are disabled on the video or quota is exceeded.
404 if the video or channel does not exist.
| Name | Required | Description | Default |
|---|---|---|---|
| videoId | No | Video ID whose comment threads to list. Exactly one of videoId/channelId required. | |
| channelId | No | Channel ID; lists all threads related to the channel. Exactly one of videoId/channelId required. | |
| order | No | Sort order: "time" (newest first) or "relevance". | time |
| searchTerms | No | Optional text filter; only threads containing this string are returned. | |
| maxResults | No | Number of threads per page (1–50, default 25). | |
| pageToken | No | Pagination cursor from a previous response's nextPageToken. | |
| response_format | No | Output format: "markdown" (default) or "json". | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false. The description adds useful behavioral insights beyond annotations, such as error conditions (400 if neither/both IDs, 403 if comments disabled or quota exceeded, 404 if resource not found) and the return structure. This provides sufficient transparency for safe agent behavior.
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 well-structured with clear sections (Args, Returns, Examples, Errors) and is front-loaded with a concise summary. Every sentence adds value; there is no repetition or fluff. It's appropriately sized for the tool's complexity.
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?
Given the tool has 7 parameters (none required), 100% schema coverage, and no output schema, the description covers all essential aspects: usage constraints, parameter details, return format with example, and common errors. It is comprehensive enough for an agent to correctly invoke and interpret results.
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 100%, so the schema documents all parameters. The description adds value by clarifying the mutual exclusivity requirement for videoId and channelId, listing the default for order, and providing a full JSON example of the return structure (not in schema). This goes beyond the schema's 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 states it retrieves a page of top-level comment threads for a YouTube video or channel, explicitly mentioning the two mutually exclusive IDs (videoId, channelId). This distinguishes it from siblings like youtube_list_comment_replies (which gets replies for a specific thread) and youtube_create_comment_thread (which creates).
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 clear instructions on how to use the tool: exactly one of videoId or channelId must be supplied, with explanations of what each does. It includes examples for listing by video and paging through channel comments. However, it does not explicitly mention when not to use this tool or suggest alternatives like youtube_list_comment_replies for replies.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_list_my_videosList My VideosARead-onlyIdempotent
List videos uploaded to the authenticated channel.
Fetches the channel's uploads playlist ID via channels.list(mine=true), then pages through playlistItems.list to return video metadata.
Args
maxResults (integer 1–50, default 25): number of items per page
pageToken (string, optional): cursor token returned in a previous response
response_format: "markdown" (default) or "json"
Returns JSON shape:
{
"items": [
{
"videoId": "abc123",
"title": "My Video",
"description": "...",
"publishedAt": "2024-01-01T00:00:00Z",
"thumbnailUrl": "https://..."
}
],
"nextPageToken": "CAUQAA",
"totalResults": 42
}Examples
List first 10 videos:
{ "maxResults": 10 }Get next page:
{ "maxResults": 10, "pageToken": "CAUQAA" }
Errors
401/403: credentials expired or missing upload scope — re-run
npm run auth404: channel has no uploads playlist (newly created channel?)
| Name | Required | Description | Default |
|---|---|---|---|
| maxResults | No | Number of videos to return per page (1–50, default 25). | |
| pageToken | No | Pagination cursor from a previous response's nextPageToken. | |
| response_format | No | Output format: "markdown" (default) or "json". | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and idempotentHint=true. The description adds significant behavioral details: it explains the internal process (fetches uploads playlist ID, pages through playlistItems), provides the exact JSON return shape, lists possible errors (401/403, 404), and gives usage examples. No contradiction with annotations.
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 well-structured with sections (Args, Returns, Examples, Errors) and front-loaded with the core purpose. Every sentence adds value, no fluff. It is appropriately sized for the tool's complexity.
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 has 3 parameters, no output schema, but the description provides a full JSON shape for the return value, lists error conditions, and includes examples. Combined with annotations, this is complete and leaves no ambiguity for an AI agent.
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 100%, but the description adds substantial meaning: it explains maxResults as 'items per page', pageToken as 'cursor token', and response_format options. It also provides default values and examples for parameter usage. This goes beyond the schema's own 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 states 'List videos uploaded to the authenticated channel,' indicating a specific verb (list) and resource (videos of the authenticated user). It distinguishes from siblings like youtube_search (which searches all videos) and youtube_get_video (single video).
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 context that this tool fetches the user's own uploads via channel list and playlistItems. It includes examples and error handling, but does not explicitly state when to use it over alternatives like youtube_search or youtube_list_playlist_items. Still, the purpose is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_list_playlist_itemsList Playlist ItemsARead-onlyIdempotent
List the videos inside a playlist, with pagination support.
Args
playlistId(string, required): Playlist ID to list items from.maxResults(integer 1–50, default 25): Items per page.pageToken(string, optional): Pagination cursor from a previous call'snextPageToken.response_format("markdown" | "json", default "markdown"): Output format.
Returns JSON shape:
{
"playlistId": "PL...",
"items": [
{
"playlistItemId": "PLitem...",
"position": 0,
"videoId": "dQw4w9WgXcQ",
"title": "Video Title",
"description": "...",
"publishedAt": "2024-01-01T00:00:00Z",
"videoOwnerChannelTitle": "Channel Name"
}
],
"nextPageToken": "...",
"totalResults": 50
}Examples
youtube_list_playlist_items({ playlistId: "PL..." })Next page:
youtube_list_playlist_items({ playlistId: "PL...", pageToken: "..." })
Errors
404 → playlist not found.
403 → no access.
| Name | Required | Description | Default |
|---|---|---|---|
| playlistId | Yes | Playlist ID whose items to list. | |
| maxResults | No | Items per page (1–50, default 25). | |
| pageToken | No | Pagination cursor from a previous call. | |
| response_format | No | Output format: "markdown" (default) or "json". | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds pagination details, output shape, and error codes beyond annotations (readOnlyHint, etc.). No contradiction.
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?
Well-organized with sections (Args, Returns, Examples, Errors). 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?
Complete for a listing tool: covers all parameters, pagination, errors, output format. No missing context.
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 covers all 4 params; description adds usage examples and output format, enhancing meaning beyond schema.
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?
Clearly states 'List the videos inside a playlist, with pagination support.' Distinguishes from sibling tools like youtube_list_playlists by specifying playlist items.
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?
Implicitly conveys when to use (listing playlist items) with examples and error handling, but could explicitly differentiate from add/remove operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_list_playlistsList My PlaylistsARead-onlyIdempotent
List all playlists belonging to the authenticated channel.
Args
maxResults(integer 1–50, default 25): Number of playlists to return per page.pageToken(string, optional): Pagination cursor from a previous call'snextPageToken.response_format("markdown" | "json", default "markdown"): Output format.
Returns JSON shape:
{
"playlists": [
{
"id": "PL...",
"title": "My Playlist",
"description": "...",
"privacyStatus": "public" | "private" | "unlisted",
"itemCount": 12,
"publishedAt": "2024-01-01T00:00:00Z"
}
],
"nextPageToken": "...",
"totalResults": 42
}Examples
List first page:
youtube_list_playlists()Page 2:
youtube_list_playlists({ pageToken: "..." })
Errors
401/403 → re-run
npm run auth; check OAuth scopes.
| Name | Required | Description | Default |
|---|---|---|---|
| maxResults | No | Number of playlists to return (1–50, default 25). | |
| pageToken | No | Pagination cursor returned from a previous call. | |
| response_format | No | Output format: "markdown" (default) or "json". | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, non-destructive, idempotent behavior. The description adds valuable context: authentication requirement, pagination details, output format, and specific error codes (401/403). No contradictions.
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 well-organized with clear sections (Args, Returns, Examples, Errors). It is concise, each sentence adds value, and it avoids unnecessary details.
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?
Despite lacking an output schema in the tool definition, the description provides a complete JSON shape of the return value. It includes examples, error handling, and covers all parameters. The tool is fully documented for an agent to use correctly.
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 100%, so baseline is 3. The description's parameter explanations largely repeat the schema (e.g., 'Number of playlists to return per page'), adding little beyond the schema's definitions. No new semantic information is provided.
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 'List all playlists belonging to the authenticated channel,' which is a specific verb and resource. It distinguishes from siblings like youtube_get_playlist (single playlist) and youtube_create_playlist (create).
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 clear context for when to use the tool: listing all playlists of the authenticated user. It does not explicitly mention alternatives, but the scope and examples imply appropriate use. Error handling hints at prerequisites (authentication).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_list_subscriptionsList SubscriptionsARead-onlyIdempotent
List all channels that the authenticated user is subscribed to, using the YouTube Data API v3 subscriptions.list endpoint with mine:true.
Args:
order— Sort order for the returned list. One of:relevance(default) — YouTube's relevance ranking.unread— Channels with new activity appear first.alphabetical— Alphabetical by channel title.
maxResults— Number of subscriptions to return per page (1–50, default 25).pageToken— Pagination cursor. Pass thenextPageTokenfrom a previous response to retrieve the next page. Optional.response_format—"markdown"(default, human-readable summary) or"json"(full structured data).
Returns (JSON shape):
{
"nextPageToken": "string | null",
"pageInfo": { "totalResults": 142, "resultsPerPage": 25 },
"items": [
{
"id": "subscription-resource-id",
"snippet": {
"publishedAt": "2021-03-10T08:00:00Z",
"title": "Channel Title",
"description": "Channel description...",
"resourceId": { "kind": "youtube#channel", "channelId": "UCxxxxxx" },
"thumbnails": { "default": { "url": "https://..." } }
},
"contentDetails": {
"totalItemCount": 312,
"newItemCount": 5,
"activityType": "all"
}
}
]
}Examples:
List first 25 subscriptions alphabetically:
{ "order": "alphabetical" }Find channels with new videos:
{ "order": "unread", "maxResults": 10 }Paginate to the next page:
{ "pageToken": "<nextPageToken from previous call>" }
Common Errors:
401 / 403 authError— Credentials missing or expired; re-runnpm run auth.403 forbidden— The authenticated account does not have permission to list its own subscriptions; check scopes includehttps://www.googleapis.com/auth/youtube.
| Name | Required | Description | Default |
|---|---|---|---|
| order | No | Sort order: "relevance" (default), "unread" (new activity first), or "alphabetical". | relevance |
| maxResults | No | Number of subscriptions to return per page (1–50). Default: 25. | |
| pageToken | No | Pagination cursor. Pass the nextPageToken from a previous response to get the next page. | |
| response_format | No | Output format: "markdown" (default, human-readable) or "json" (full structured data). | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, and open-world behavior. The description adds valuable context about the API endpoint, common errors (auth errors, permissions), and pagination, enhancing transparency beyond annotations.
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 well-structured with sections (Args, Returns, Examples, Common Errors), front-loaded with the core purpose, and every sentence is meaningful. No redundant or wasteful content.
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?
Given no output schema, the description provides a complete JSON return shape. It covers all parameters, pagination, error handling, and examples. The tool's complexity is fully addressed.
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 100% with descriptions, but the description adds extra value by explaining effects of each parameter (e.g., order meanings), providing examples, and detailing return shape. This goes beyond the schema's basic 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 states the tool lists all channels the authenticated user is subscribed to, using a specific verb and resource ("List all channels"). It distinguishes from sibling tools, as no other tool lists subscriptions.
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 clear context on how to use the tool (e.g., pagination, parameter examples) but does not explicitly state when to use this tool vs alternatives. However, the purpose is unique among siblings, so the lack of exclusions is acceptable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_list_video_categoriesList Video CategoriesARead-onlyIdempotent
List available YouTube video categories for a region.
Calls videoCategories.list with the given regionCode. The returned category IDs can be used as the categoryId field in youtube_upload_video and youtube_update_video.
Args
regionCode (string, optional): ISO 3166-1 alpha-2 region code, default "US"
response_format: "markdown" (default) or "json"
Returns JSON shape:
{
"regionCode": "US",
"categories": [
{ "id": "10", "title": "Music", "assignable": true },
{ "id": "22", "title": "People & Blogs", "assignable": true }
]
}Examples
US categories:
{}GB categories:
{ "regionCode": "GB" }
Errors
400: invalid regionCode
| Name | Required | Description | Default |
|---|---|---|---|
| regionCode | No | ISO 3166-1 alpha-2 region code (e.g. "US", "GB"). Default: "US". | US |
| response_format | No | Output format: "markdown" (default) or "json". | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, idempotentHint. The description adds context by naming the API method, possible error (400), and return structure. No contradiction with annotations.
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 well-structured with clear sections (Args, Returns, Examples, Errors) but is somewhat lengthy. Every sentence adds value, but it could be slightly more concise.
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 2-parameter tool with annotations, the description fully covers purpose, usage, return format (via JSON example), and error handling. No output schema, but the provided return structure suffices.
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 covers 100% of parameters with descriptions. The description adds value by providing examples, explaining the default 'US', and mentioning error conditions for regionCode. This goes beyond the schema.
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 lists available YouTube video categories for a region, specifying the API call (videoCategories.list) and the purpose of IDs for other tools. It is specific and distinguishes from siblings like youtube_upload_video.
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 explains when to use the tool (to obtain category IDs for uploads/updates) and provides examples. However, it does not explicitly state when not to use it or contrast with alternatives among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_mark_comment_as_spamMark Comment as SpamAIdempotent
Marks a comment as spam, flagging it for review by YouTube's moderation systems.
Args
commentId(string, required) — ID of the comment to mark as spam.
Returns
{ "markedAsSpam": true, "commentId": "string" }Examples
Flag a spam comment:
{ "commentId": "UgxABC123" }
Errors
403 if you do not have permission to moderate this comment, or quota is exceeded.
404 if the comment does not exist.
| Name | Required | Description | Default |
|---|---|---|---|
| commentId | Yes | ID of the comment to mark as spam. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate non-destructive and idempotent behavior. The description adds value by specifying the return format, error codes (403, 404), and the effect on the comment, enhancing transparency beyond annotations.
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 extremely concise with clear sections (Args, Returns, Examples, Errors). Every sentence adds value, no fluff, and it is front-loaded with the core purpose.
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 with no output schema, the description covers the action, usage, errors, and example sufficiently. No gaps are apparent given the tool's complexity.
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 100% schema description coverage, the description adds only an example and error context, which is baseline. No additional semantic nuance beyond the schema is provided.
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: 'Marks a comment as spam, flagging it for review.' This is a specific verb+resource that distinguishes it from siblings like delete_comment or set_comment_moderation.
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 an example and error conditions, but does not explicitly guide when to use this tool versus alternative moderation tools like youtube_set_comment_moderation. Usage context is implied but not direct.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_rate_videoRate VideoAIdempotent
Like, dislike, or remove your rating from a video.
Calls videos.rate. The rating applies to the authenticated user's account.
Args
videoId (string, required): video to rate
rating ("like"|"dislike"|"none", required): the rating to apply
Returns Short confirmation of the rating applied.
Examples
Like:
{ "videoId": "dQw4w9WgXcQ", "rating": "like" }Remove rating:
{ "videoId": "dQw4w9WgXcQ", "rating": "none" }
Errors
400: invalid rating value
403: scope missing or video not accessible
| Name | Required | Description | Default |
|---|---|---|---|
| videoId | Yes | ID of the video to rate. | |
| rating | Yes | Rating to apply: "like", "dislike", or "none" (removes existing rating). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond annotations by disclosing the underlying API call (videos.rate), the behavior of applying or removing ratings, and error conditions. Annotations indicate idempotent and non-destructive behavior, which is consistent. The description adds clarity on the return value and authentication context.
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 well-structured with sections for description, args, returns, examples, and errors. It is informative but could be slightly more concise. The most important information is 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 tool with two parameters and no output schema, the description covers all necessary aspects: inputs, behavior, return value, examples, and errors. No information gaps remain.
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 100%, so the schema already documents the parameters. The description adds value with an 'Args' section restating parameters, examples showing concrete usage, and clarifying that 'none' removes the rating. This reinforces understanding beyond the schema.
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 purpose: to like, dislike, or remove a rating from a video. The title 'Rate Video' aligns with this. Among many sibling tools for various YouTube actions, this is the only one for rating, so it is well-distinguished.
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 indicates the rating applies to the authenticated user's account, providing context. However, it does not explicitly state when to use this tool versus alternatives, nor when not to use it. The examples help clarify usage but lack explicit usage boundaries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_remove_playlist_itemRemove Playlist ItemADestructive
Remove a video from a playlist (deletes the playlist item). This is irreversible.
Use youtube_list_playlist_items to find the playlistItemId.
Args
playlistItemId(string, required): The playlist item ID to remove.confirm(boolean, default false): Must betrueto execute the removal.
Returns Confirmation text on success.
Examples
youtube_remove_playlist_item({ playlistItemId: "...", confirm: true })
Errors
404 → item not found.
403 → not your playlist.
Not passing
confirm: true→ refused with instructions to re-call.
| Name | Required | Description | Default |
|---|---|---|---|
| playlistItemId | Yes | Playlist item ID to remove from its playlist. | |
| confirm | No | Must be true to confirm the irreversible removal. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and readOnlyHint=false; the description confirms irreversibility and details the confirm parameter requirement. No contradictions, and it adds clarity on the destructive action.
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 well-organized with sections for Args, Returns, Examples, and Errors. Every sentence adds value, and it is concise without 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?
The tool is simple with two parameters. The description covers purpose, parameter details, return value, error cases, and provides an example. It is complete 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 coverage is 100%. The description adds meaning by stating the confirm parameter must be true to execute, and explains the error behavior if omitted. It also notes the irreversible nature of the action.
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 'Remove a video from a playlist (deletes the playlist item).' It uses a specific verb and resource, distinguishing it from sibling tools like youtube_delete_playlist or youtube_update_playlist_item.
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 advises using youtube_list_playlist_items to find the playlistItemId and provides error scenarios. It lacks explicit when-not-to-use but gives sufficient context for correct invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_reply_to_commentReply to CommentA
Posts a reply to an existing top-level comment thread on behalf of the authenticated channel.
Args
parentId(string, required) — ID of the top-level comment thread to reply to.text(string, required) — Text of the reply (supports basic HTML entities).
Returns The newly created comment resource:
{
"id": "string",
"parentId": "string",
"authorDisplayName": "string",
"text": "string",
"publishedAt": "ISO-8601"
}Examples
Reply to a comment:
{ "parentId": "UgxABC123", "text": "Thank you for watching!" }
Errors
400 if
textis empty orparentIdis invalid.403 if the video has comments disabled or quota is exceeded.
404 if the parent comment does not exist.
| Name | Required | Description | Default |
|---|---|---|---|
| parentId | Yes | ID of the top-level comment thread to reply to. | |
| text | Yes | Text content of the reply. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false, destructiveHint=false, idempotentHint=false. The description adds context: it operates on behalf of the authenticated channel, supports basic HTML entities in text, and lists specific error codes (400, 403, 404), which are beyond the annotations.
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 well-structured with sections (Args, Returns, Example, Errors). Each part serves a purpose, though it could be slightly more concise. It is efficiently organized for an AI agent.
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?
Given no output schema, the description provides a return schema example. It covers parameters, errors, and the action. It does not explain authentication beyond 'authenticated channel,' but that is sufficient. Overall, it is complete for the tool's usage.
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 100% with descriptions. The description adds value by noting that text supports basic HTML entities and providing an example (parentId example). This extra semantic detail justifies a 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 clearly states it posts a reply to an existing top-level comment thread, which is a specific verb+resource. It distinguishes itself from sibling tools like youtube_create_comment_thread (creates a new thread) and youtube_update_comment (edits a reply).
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 implicitly indicates when to use (to reply to a comment) but does not explicitly mention when not to use or compare with alternatives. It lacks guidance like 'use this for replying, use youtube_create_comment_thread for new top-level comments'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_revenueRevenue AnalyticsARead-onlyIdempotent
Retrieve revenue and monetization metrics for the authenticated channel, including estimated revenue, CPM, monetized playbacks, and ad impressions. Optionally break down by day or month.
IMPORTANT: This tool requires:
The
yt-analytics-monetary.readonlyOAuth scope (included if you rannpm run authwith the default SCOPES).The channel must be enrolled in the YouTube Partner Program (monetized). If either condition is not met, the API returns HTTP 403.
Args:
startDate(optional): Inclusive start date inYYYY-MM-DDformat. Defaults to 28 days ago.endDate(optional): Inclusive end date inYYYY-MM-DDformat. Defaults to today.dimension(optional):"none"(default, aggregate),"day", or"month".currency(optional): ISO 4217 three-letter currency code, e.g."EUR". Defaults to"USD".response_format(optional):"markdown"(default) or"json".
Returns (JSON shape):
{
"columns": ["estimatedRevenue", "estimatedAdRevenue", "grossRevenue", "cpm",
"playbackBasedCpm", "monetizedPlaybacks", "adImpressions"],
"rows": [[1234.56, 1100.00, 1300.00, 5.20, 4.80, 240000, 1500000]]
}When dimension is "day" or "month", the first column is the date string.
Examples:
"How much revenue did I make this month?" → pass appropriate date range.
"Daily revenue breakdown in EUR" →
dimension: "day", currency: "EUR".
Errors:
403: channel is not in the YouTube Partner Program, the
yt-analytics-monetary.readonlyscope was not granted, or YouTube Partner status is missing. Re-runnpm run authand ensure your channel is monetized.
| Name | Required | Description | Default |
|---|---|---|---|
| startDate | No | Inclusive start date in YYYY-MM-DD format. Defaults to 28 days ago. | |
| endDate | No | Inclusive end date in YYYY-MM-DD format. Defaults to today. | |
| dimension | No | Time grouping: "none" (default) for aggregate totals, "day" for per-day rows, "month" for per-month rows. | none |
| currency | No | ISO 4217 three-letter currency code for revenue figures, e.g. "USD" (default), "EUR", "GBP". | |
| response_format | No | Output format: "markdown" (default) for a human-readable table, "json" for the structured payload. | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, non-destructive, idempotent behavior. The description adds authentication prerequisites, YPP requirement, error conditions, default date ranges, and effect of dimension parameter on output. No contradictions; adds substantial behavioral context.
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 well-structured with clear sections: introduction, important notes, args, returns, examples, errors. Every sentence provides value; no redundancy. It is detailed yet concise, and front-loaded with key purpose and requirements.
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?
Given no output schema, the description provides the JSON shape with columns and rows, explains dimension effects, covers errors, and includes examples. All necessary information for an AI agent to use the tool correctly is present.
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 100%, and the description enriches each parameter with defaults, allowed values, format requirements (e.g., ISO 4217 for currency), and examples. It clarifies the dimension parameter behavior and response_format options, adding beyond the schema.
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 explicitly states it retrieves revenue and monetization metrics for the authenticated channel, listing specific metrics like estimated revenue, CPM, etc. It clearly identifies the resource (channel) and the action (retrieve), making the 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?
The description includes critical usage requirements: OAuth scope and YPP enrollment, with a clear note about 403 errors. It provides examples and default behaviors. However, it lacks explicit comparison to sibling tools like 'youtube_video_performance' or 'youtube_run_analytics_query', which could help agents choose the right tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_run_analytics_queryRun Analytics QueryARead-onlyIdempotent
Execute a flexible YouTube Analytics API query against the authenticated channel. Supports any combination of metrics, dimensions, filters, and sort orders supported by the YouTube Analytics API v2. startDate and endDate default to the last 28 days when omitted.
Args:
metrics(required): Comma-separated metric names, e.g."views,estimatedMinutesWatched,likes".startDate(optional): Inclusive start date inYYYY-MM-DDformat. Defaults to 28 days ago.endDate(optional): Inclusive end date inYYYY-MM-DDformat. Defaults to today.dimensions(optional): Comma-separated dimension names, e.g."day","video","country".filters(optional): Semicolon-separated filter expressions, e.g."video==VIDEO_ID".sort(optional): Comma-separated sort keys. Prefix with-for descending, e.g."-views".maxResults(optional): Maximum rows to return (1–200).currency(optional): ISO 4217 currency code for monetary metrics, e.g."EUR". Defaults to"USD".response_format(optional):"markdown"(default) or"json".
Returns (JSON shape):
{
"columns": ["day", "views", "estimatedMinutesWatched"],
"rows": [["2025-01-01", 1234, 5678], ...]
}Examples:
"Show me daily views for the last 7 days" →
metrics: "views", dimensions: "day", startDate: "2025-01-01", endDate: "2025-01-07"."Top traffic sources by watch time" →
metrics: "views,estimatedMinutesWatched", dimensions: "insightTrafficSourceType", sort: "-estimatedMinutesWatched".
Errors:
400: invalid metric/dimension combination — check the Analytics API docs for valid pairings.
403: missing scope or channel not accessible — re-run
npm run auth.
| Name | Required | Description | Default |
|---|---|---|---|
| metrics | Yes | Comma-separated metric names required by the Analytics API, e.g. "views,estimatedMinutesWatched,likes". | |
| startDate | No | Inclusive start date in YYYY-MM-DD format. Defaults to 28 days ago when omitted. | |
| endDate | No | Inclusive end date in YYYY-MM-DD format. Defaults to today when omitted. | |
| dimensions | No | Comma-separated dimension names, e.g. "day", "video", "country". Optional. | |
| filters | No | Semicolon-separated filter expressions, e.g. "video==VIDEO_ID;country==US". | |
| sort | No | Comma-separated sort keys. Prefix with "-" for descending order, e.g. "-views". | |
| maxResults | No | Maximum number of rows to return (1–200). | |
| currency | No | ISO 4217 three-letter currency code for financial metrics, e.g. "USD" (default), "EUR". | |
| response_format | No | Output format: "markdown" (default) for a human-readable table, "json" for the raw structured payload. | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnly, destructive, idempotent, and openWorld hints. The description adds valuable context: return shape (columns and rows), default date range, error codes, and example queries. No contradictions.
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 well-structured: purpose, defaults, parameter list, return format, examples, errors. Every section is necessary and no redundant information. Front-loaded with key purpose.
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 complex tool with 9 parameters and no output schema, the description covers all aspects: parameter details, defaults, return shape, error handling, and usage examples. It fully equips an agent to use the tool correctly.
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 has 100% coverage, so baseline is 3. The description adds value with concrete examples, error scenarios, and format details (e.g., default currency, markdown vs json) that go beyond the schema 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 states it executes a YouTube Analytics API query against the authenticated channel, distinguishing it from sibling tools that handle videos, playlists, comments, etc. Specific verb 'Execute' and resource 'Analytics API query' provide high clarity.
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 explains flexible query support, defaults, and provides examples, but does not explicitly contrast with sibling analytics tools like `youtube_audience_demographics` or `youtube_revenue`, leaving some ambiguity about when to use this generic query vs specialized tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_searchSearch YouTubeARead-onlyIdempotent
Search YouTube for videos, channels, and/or playlists using the YouTube Data API v3 search.list endpoint.
IMPORTANT — Quota cost: Every call to this tool costs 100 quota units (vs. 1 for most other tools). Use it sparingly and narrow the query as much as possible before calling.
Args:
query(required) — Free-text search query (e.g., "typescript tutorial 2024").type— Comma-separated list of resource types to return. Allowed values:video,channel,playlist. Default:"video".channelId— Restrict results to a specific channel's content. Optional.order— Sort order:relevance(default),date,rating,title,viewCount.maxResults— Number of results to return (1–50, default 25).pageToken— Pagination cursor from a previous response'snextPageToken. Optional.publishedAfter— Only return results published after this RFC 3339 datetime (e.g.,"2024-01-01T00:00:00Z"). Optional.publishedBefore— Only return results published before this RFC 3339 datetime. Optional.regionCode— ISO 3166-1 alpha-2 code to bias results (e.g.,"US"). Defaults to server default.relevanceLanguage— ISO 639-1 language code to bias relevance (e.g.,"en"). Optional.forMine— Whentrue, restricts results to the authenticated user's own videos. Requirestypeto include only"video". Optional.response_format—"markdown"(default) or"json".
Returns (JSON shape):
{
"nextPageToken": "string | null",
"pageInfo": { "totalResults": 1234, "resultsPerPage": 25 },
"items": [
{
"kind": "youtube#searchResult",
"id": { "kind": "youtube#video", "videoId": "abc123" },
"snippet": {
"publishedAt": "2024-01-15T12:00:00Z",
"channelId": "UCxxx",
"title": "Result title",
"description": "Short description...",
"thumbnails": { "default": { "url": "..." } },
"channelTitle": "Channel Name",
"liveBroadcastContent": "none"
}
}
]
}Examples:
Search for recent TypeScript videos:
{ "query": "typescript tutorial", "order": "date", "maxResults": 10 }Search own channel for a topic:
{ "query": "react hooks", "forMine": true, "type": "video" }Paginate to the next page:
{ "query": "nodejs", "pageToken": "<nextPageToken from previous call>" }
Common Errors:
403 quotaExceeded— Daily quota exhausted (each call costs 100 units). Try again after midnight Pacific time.400 invalidSearchFilter— Conflicting filters, e.g.forMine:truewithtypecontaining non-video values.401 / 403 authError— Credentials missing or expired; re-runnpm run auth.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Free-text search query string. | |
| type | No | Comma-separated list of resource types: video, channel, playlist. Default: "video". | video |
| channelId | No | Restrict results to a specific channel ID. | |
| order | No | Sort order for results. One of: relevance (default), date, rating, title, viewCount. | relevance |
| maxResults | No | Number of results to return (1–50). Default: 25. | |
| pageToken | No | Pagination cursor. Pass the nextPageToken from a previous response to get the next page. | |
| publishedAfter | No | RFC 3339 datetime — only return results published after this time (e.g. 2024-01-01T00:00:00Z). | |
| publishedBefore | No | RFC 3339 datetime — only return results published before this time. | |
| regionCode | No | ISO 3166-1 alpha-2 region code to bias results (e.g. "US"). Defaults to US. | |
| relevanceLanguage | No | ISO 639-1 language code to bias relevance ranking (e.g. "en"). | |
| forMine | No | When true, restricts search to the authenticated user's own videos. Requires type to be "video" only. | |
| response_format | No | Output format: "markdown" (default, human-readable) or "json" (full structured data). | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint=true, destructiveHint=false), the description adds critical behavioral details: quota cost per call, endpoint used (search.list), and common errors (e.g., quotaExceeded). No contradictions.
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 well-structured with clear sections (warning, args, returns, examples, errors), is front-loaded with the important quota warning, and every sentence adds value without 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?
Given 12 parameters, 100% schema coverage, and no output schema, the description provides return JSON shape, examples, and common errors, making it fully complete 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?
With 100% schema description coverage, the description adds even more: default values, allowed enums, constraints (e.g., forMine requires type=video), examples, and a full JSON return shape.
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 ('Search') and identifies the resource ('YouTube for videos, channels, and/or playlists'), clearly differentiating it from sibling tools like youtube_get_video or youtube_list_playlists.
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 warns about high quota cost (100 units per call) and advises to use sparingly and narrow queries. However, it does not explicitly state when to use alternatives like youtube_get_video for single videos.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_set_comment_moderationSet Comment Moderation StatusAIdempotent
Sets the moderation status of one or more comments. Can optionally ban the comment author(s).
Args
commentId(string, required) — ID of the comment to moderate. Accepts a comma-separated list of IDs to moderate multiple comments in one call (e.g."id1,id2,id3").moderationStatus("published" | "heldForReview" | "rejected", required) — Target moderation state:published: approve and make public.heldForReview: hold for manual review.rejected: reject (hide) the comment.
banAuthor(boolean, default false) — Iftrue, bans the author(s) from commenting on the channel.
Returns
{ "moderated": true, "commentIds": ["string"], "moderationStatus": "string", "banAuthor": false }Examples
Approve a comment:
{ "commentId": "UgxABC123", "moderationStatus": "published" }Reject and ban:
{ "commentId": "UgxXYZ,UgxFOO", "moderationStatus": "rejected", "banAuthor": true }
Errors
400 if
moderationStatusis invalid.403 if the comment(s) do not belong to the authenticated channel's videos, or quota is exceeded.
404 if a comment ID does not exist.
| Name | Required | Description | Default |
|---|---|---|---|
| commentId | Yes | ID of the comment to moderate. Comma-separate multiple IDs to moderate in bulk. | |
| moderationStatus | Yes | "published" to approve, "heldForReview" to hold, "rejected" to reject/hide. | |
| banAuthor | No | If true, bans the comment author(s) from the channel. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate idempotent and non-destructive. Description adds substantial behavioral details: bulk moderation via comma-separated IDs, specific moderation statuses, optional author banning, return format, and error codes. No contradiction with annotations.
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?
Well-structured with separate Arg/Returns/Examples/Errors sections. Comprehensive but not overly verbose. A minor redundancy with schema parameter descriptions, but overall 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?
Complete coverage: explains all parameters, return value JSON, error codes, and multiple examples. Lacks output schema but the description provides full return type. Sufficient for agent to use correctly.
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 details are 100% covered, but the description adds deeper meaning: explains comma-separated IDs for bulk, enumerates moderation statuses with descriptions, clarifies default for banAuthor, and provides concrete examples. Goes well beyond the schema.
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 it sets the moderation status of comments, with optional author banning. It distinguishes from sibling tools like youtube_delete_comment and youtube_mark_comment_as_spam, which handle related but distinct actions.
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 usage context with examples and error cases, but does not explicitly state when not to use this tool or mention alternatives beyond the sibling list. Slightly lacking exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_set_thumbnailSet Video ThumbnailA
Upload and set a custom thumbnail for a video.
The image is streamed from a local file. The MIME type is inferred from the file extension (.png, .jpg/.jpeg, .gif, .bmp).
Args
videoId (string, required): video to update the thumbnail for
imagePath (string, required): absolute path to the local image file
Returns Short confirmation + thumbnail resource with URLs for all size variants.
Examples
Set thumbnail:
{ "videoId": "abc123", "imagePath": "/tmp/thumb.jpg" }
Errors
400: file not found, unsupported format, or image too large (max 2 MB)
403: thumbnails require a verified channel or custom thumbnail permission
| Name | Required | Description | Default |
|---|---|---|---|
| videoId | Yes | ID of the video to set the thumbnail for. | |
| imagePath | Yes | Absolute path to the local image file (.png, .jpg, .jpeg, .gif, .bmp). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses file streaming behavior, MIME type inference, allowed formats, max file size (2 MB), and error conditions. Annotations already indicate non-destructive nature, but the description adds operational details beyond annotations.
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 well-structured with clear sections (Args, Returns, Examples, Errors). It is concise, with every sentence adding value—no redundancy or irrelevant content.
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 2 parameters and no output schema, the description covers purpose, usage, parameters, return format (confirmation + thumbnail resource with URLs), examples, and error conditions. It meets the needs of an AI agent selecting and invoking the tool.
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 descriptions already cover both parameters. The description adds context (e.g., absolute path requirement, file extensions) and ties parameters to error conditions (file not found, unsupported format). Schema coverage is 100%, so baseline is 3; the extra context pushes it to 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 clearly states 'Upload and set a custom thumbnail for a video,' which is a specific verb and resource. It distinguishes from sibling tools like youtube_upload_video (uploads video) and youtube_update_video (updates video metadata) by focusing on thumbnail operations.
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 context through examples and error conditions, but does not explicitly state when to use this tool over alternatives. It is clear for the intended use case, but lacks explicit when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_subscribeSubscribe to a ChannelA
Subscribe the authenticated user to a YouTube channel, using the YouTube Data API v3 subscriptions.insert endpoint.
Args:
channelId(required) — The YouTube channel ID to subscribe to (e.g.,"UCxxxxxx"). This is the channel's resource ID, not a handle or name. You can obtain it fromyoutube_search(type: channel) oryoutube_list_subscriptions.
Returns (JSON shape):
{
"id": "new-subscription-resource-id",
"snippet": {
"publishedAt": "2024-06-03T10:00:00Z",
"title": "Subscribed Channel Title",
"description": "Channel description...",
"resourceId": { "kind": "youtube#channel", "channelId": "UCxxxxxx" },
"thumbnails": { "default": { "url": "https://..." } }
},
"contentDetails": {
"totalItemCount": 0,
"newItemCount": 0,
"activityType": "all"
}
}Examples:
Subscribe to a channel:
{ "channelId": "UC_x5XG1OV2P6uZZ5FSM9Ttw" }
Common Errors:
400 subscriptionDuplicate— The authenticated user is already subscribed to this channel.400 invalidChannelId— The providedchannelIddoes not correspond to an existing channel.401 / 403 authError— Credentials missing or expired; re-runnpm run auth.403 forbidden— The authenticated account cannot subscribe (e.g., cannot subscribe to own channel, or missing scopehttps://www.googleapis.com/auth/youtube).
| Name | Required | Description | Default |
|---|---|---|---|
| channelId | Yes | The YouTube channel ID to subscribe to (e.g. "UCxxxxxx"). Obtain from youtube_search or youtube_list_subscriptions. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (mutation, not destructive), the description details the return JSON shape, common errors, and authentication requirements. This is extensive and helpful for the agent to understand all behavioral aspects.
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 well-structured with clear sections (Args, Returns, Examples, Common Errors). It is concise yet comprehensive, with no unnecessary words.
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?
Given no output schema, the description includes a full JSON shape. It covers errors, examples, and parameter details. Everything needed for correct invocation is present.
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 100%, but the description adds crucial context: channelId is a resource ID not a handle, and how to obtain it. This exceeds the schema description and fully clarifies 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 ('Subscribe the authenticated user to a YouTube channel') and the endpoint used (youtube#subscriptions.insert). It distinguishes itself from siblings like youtube_unsubscribe and youtube_search by specifying the exact 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?
The description provides context on how to obtain the channelId (from youtube_search or youtube_list_subscriptions) and lists common errors (duplicate subscription, invalid channelId, auth issues). It doesn't explicitly contrast with alternatives but offers enough guidance for correct usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_top_videosTop Videos by ViewsARead-onlyIdempotent
Return the top-performing videos on the authenticated channel ranked by views, enriched with video titles fetched from the YouTube Data API.
Args:
startDate(optional): Inclusive start date inYYYY-MM-DDformat. Defaults to 28 days ago.endDate(optional): Inclusive end date inYYYY-MM-DDformat. Defaults to today.maxResults(optional): Number of top videos to return (1–50, default 10).response_format(optional):"markdown"(default) or"json".
Returns (JSON shape):
{
"columns": ["video", "title", "views", "estimatedMinutesWatched", "averageViewDuration",
"averageViewPercentage", "subscribersGained", "likes"],
"rows": [["VIDEO_ID", "Video Title", 5000, 12000, 144, 55.3, 80, 200], ...]
}Examples:
"What are my top 5 videos this month?" →
maxResults: 5with appropriate dates."Best performing videos over the past 90 days" →
startDate90 days ago.
Errors:
403: insufficient scope — re-run
npm run auth.400: invalid date range.
| Name | Required | Description | Default |
|---|---|---|---|
| startDate | No | Inclusive start date in YYYY-MM-DD format. Defaults to 28 days ago. | |
| endDate | No | Inclusive end date in YYYY-MM-DD format. Defaults to today. | |
| maxResults | No | Number of top videos to return (1–50). Defaults to 10. | |
| response_format | No | Output format: "markdown" (default) for a human-readable table, "json" for the structured payload. | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, openWorldHint=true. The description adds significant behavioral details: it 'returns enriched' data, cites specific error codes (403 scope, 400 invalid date), and describes the exact JSON output shape. No contradictions with annotations.
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 well-structured with clear sections (Args, Returns, Examples, Errors). The first sentence is direct. However, it is somewhat verbose (e.g., 'enriched with video titles fetched from the YouTube Data API' is partially redundant given the return shape). Could be slightly trimmed without losing 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?
Given no output schema, the description provides a detailed JSON shape showing columns and rows. It covers all parameters, default values, range constraints, example usage, and common error messages. Includes the authenticated channel scope. No obvious gaps for a query tool.
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 100%, so the schema already documents all four parameters. The description repeats the same parameter descriptions and adds a response_format explanation with enum values. However, it does not add meaning beyond what the schema provides, such as example values or constraints beyond the schema's min/max. 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 clearly states the tool returns 'top-performing videos on the authenticated channel ranked by views, enriched with video titles.' This is a specific verb+resource combination that distinguishes it from siblings like youtube_list_my_videos (which lists all videos) and youtube_video_performance (which focuses on specific video metrics).
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 example queries (e.g., 'What are my top 5 videos this month?') that imply when to use the tool, but it lacks explicit guidance on when not to use it or which alternative tools to consider. The examples help but the absence of exclusions or sibling references leaves some ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_traffic_sourcesTraffic Sources AnalyticsARead-onlyIdempotent
Show how viewers find the channel's videos, broken down by traffic source type (e.g. YouTube search, suggested videos, external, direct, playlists, etc.).
Args:
startDate(optional): Inclusive start date inYYYY-MM-DDformat. Defaults to 28 days ago.endDate(optional): Inclusive end date inYYYY-MM-DDformat. Defaults to today.response_format(optional):"markdown"(default) or"json".
Returns (JSON shape):
{
"columns": ["insightTrafficSourceType", "views", "estimatedMinutesWatched"],
"rows": [["YT_SEARCH", 5000, 12000], ["SUGGESTED_VIDEO", 3000, 8000], ...]
}Examples:
"Where do my viewers come from?" → call with no arguments.
"Traffic sources for the last 7 days" → pass matching
startDate/endDate.
Errors:
403: insufficient scope — re-run
npm run auth.
| Name | Required | Description | Default |
|---|---|---|---|
| startDate | No | Inclusive start date in YYYY-MM-DD format. Defaults to 28 days ago. | |
| endDate | No | Inclusive end date in YYYY-MM-DD format. Defaults to today. | |
| response_format | No | Output format: "markdown" (default) for a human-readable table, "json" for the structured payload. | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, openWorldHint=true. The description adds valuable behavioral context: the JSON return shape, possible error (403 with resolution), and that response_format can be markdown (default) or json. No contradictions with annotations.
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 well-organized with clear sections: purpose, args, returns, examples, errors. Every sentence adds value, and the structure is easy to scan. It is appropriately sized for the tool's complexity.
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?
With no output schema, the description compensates by providing the exact JSON structure, column names, and example rows. It covers all parameters, error handling, and usage examples. This makes the description fully complete for an AI agent to invoke the tool correctly.
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 100%, so baseline is 3. The description adds extra meaning by showing default values (e.g., 'Defaults to 28 days ago'), providing examples, and clarifying the response_format enum. This enhances understanding beyond the schema 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 clearly states the tool's purpose: 'Show how viewers find the channel's videos, broken down by traffic source type' and lists example sources. This is a specific verb+resource combination that distinguishes it from sibling analytics tools like youtube_top_videos or youtube_video_performance.
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 example use cases ('Where do my viewers come from?') and demonstrates custom date usage. While it does not explicitly state when not to use or compare to alternatives, the context of sibling tools and the specific focus on traffic sources gives clear usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_unsubscribeUnsubscribe from a ChannelADestructive
Remove a subscription for the authenticated user, using the YouTube Data API v3 subscriptions.delete endpoint.
IMPORTANT: This tool takes the subscription resource ID (the id field returned by youtube_list_subscriptions), not the channel's channelId. To find the correct ID, call youtube_list_subscriptions first and note the id field on each subscription item.
This action is destructive and irreversible — you must pass confirm: true to proceed. Without it the tool refuses and explains what would happen.
Args:
subscriptionId(required) — The subscription resource ID to delete (e.g.,"ABCDefgh1234…"). Obtained from theidfield of ayoutube_list_subscriptionsresult item.confirm— Must betrueto actually perform the deletion. Default:false(dry-run refusal).
Returns: A short confirmation message on success. The YouTube API returns HTTP 204 (no body) on success, so no structured resource is returned.
Examples:
Dry run (safe, returns an error explaining what would happen):
{ "subscriptionId": "ABCDefgh1234" }Actually unsubscribe:
{ "subscriptionId": "ABCDefgh1234", "confirm": true }
Common Errors:
404 subscriptionNotFound— No subscription with the given ID exists for the authenticated user. Confirm the ID comes fromyoutube_list_subscriptions, not a channel ID.403 forbidden— Insufficient permissions or the subscription belongs to a different account; check scopes.401 / 403 authError— Credentials missing or expired; re-runnpm run auth.
| Name | Required | Description | Default |
|---|---|---|---|
| subscriptionId | Yes | The subscription resource ID to delete. This is the "id" field from youtube_list_subscriptions — NOT a channelId. | |
| confirm | No | Must be true to execute the deletion. Default false causes a safe refusal explaining the action. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses destructive and irreversible nature, requiring confirm=true to execute. It explains dry-run behavior (refuses with explanation) and the 204 response on success. Annotations already set destructiveHint=true; description adds context about what gets destroyed and how to safely test.
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 well-structured with clear sections: overview, important note, args, returns, examples, common errors. Every sentence provides value, no redundancy. It's appropriately sized for the tool's complexity.
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 2-parameter tool with no output schema, the description fully covers behavior, returns (204 with confirmation message), and error handling. It anticipates common mistakes (wrong ID, auth issues) and provides resolution steps.
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?
Input schema has 2 parameters with detailed descriptions. The description adds meaning beyond schema: explains that subscriptionId is the 'id' field from list results (not channelId), and confirm default false is a safety. Examples illustrate usage. Schema coverage is 100%, but description adds critical context.
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 ('Remove a subscription') and the resource ('for the authenticated user') using the YouTube Data API v3 subscriptions.delete endpoint. It distinguishes from sibling tools like youtube_subscribe by specifying it's for unsubscribing and requiring a subscription resource ID, not a channel ID.
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 explicit when-to-use instructions (must have subscription ID from youtube_list_subscriptions, not channel ID), when-not-to-use (wrong ID leads to 404), and alternatives (call youtube_list_subscriptions first). It includes important prerequisites, dry-run behavior, and common errors.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_update_captionUpdate Caption TrackA
Update an existing caption track's draft status and/or replace its content.
When filePath is supplied the caption file is replaced by streaming the new
file from disk. When only isDraft is supplied only the metadata is updated
(no file replacement).
Args
captionId(string, required): The ID of the caption track to update.isDraft(boolean, optional): New draft state. Omit to leave unchanged.filePath(string, optional): Absolute local path to a replacement caption file. When provided, the track content is replaced.
Returns
{
"id": "string",
"language": "string",
"name": "string",
"trackKind": "string",
"isDraft": boolean
}Examples
Publish a draft track:
captionId="AYtvM...", isDraft=falseReplace content:
captionId="AYtvM...", filePath="/updated/en.vtt"Replace and publish:
captionId="AYtvM...", isDraft=false, filePath="/updated/en.vtt"
Errors
403: You can only update captions on your own channel. Check scopes (
youtube.force-ssl).404: Caption track not found.
| Name | Required | Description | Default |
|---|---|---|---|
| captionId | Yes | The ID of the caption track to update. | |
| isDraft | No | New draft state. Omit to leave the current value unchanged. | |
| filePath | No | Absolute local path to a replacement caption file. When provided, replaces the track's content. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=false, consistent with the update operation. The description adds that file replacement happens via streaming from disk, and that updating only isDraft is a metadata-only change. No contradictions; the description adds useful behavioral context beyond annotations.
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 well-structured: a concise summary, detailed explanation, separate Args/Returns/Examples/Errors sections. Every sentence adds value, and the most important information is 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?
Despite no output schema, the description provides a JSON example of the return value. It covers all 3 parameters, includes error handling, and gives examples covering key use cases. An agent can confidently use the tool based 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?
Input schema coverage is 100%, so baseline is 3. The description adds value by explaining the behavioral implications of using isDraft vs filePath, and includes examples. This goes beyond repeating schema 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 states the action: update an existing caption track's draft status and/or replace its content. It specifies the resource (caption track) and distinct actions, distinguishing it from siblings like upload_caption (create) and delete_caption (delete).
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 clear context on when to use filePath vs isDraft, and includes examples for different scenarios. It also lists error codes (403, 404) indicating prerequisites, but does not explicitly contrast with sibling tools like upload or delete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_update_channel_brandingUpdate Channel BrandingA
Update one or more branding fields on the authenticated user's YouTube channel. At least one field must be supplied. The current branding is fetched first and merged, so omitted fields are preserved.
Args (all optional, but at least one required):
description(optional): Channel description text (max ~1000 chars visible in branding settings).keywords(optional): Space-separated or quoted keywords for the channel, e.g."coding tutorial javascript".country(optional): ISO 3166-1 alpha-2 country code, e.g."US","GB".defaultLanguage(optional): BCP-47 language code, e.g."en","fr".unsubscribedTrailer(optional): Video ID to use as the channel trailer for unsubscribed visitors.
Returns (JSON shape):
{
"id": "UCxxxxxxxx",
"brandingSettings": {
"channel": { "description", "keywords", "country", "defaultLanguage", "unsubscribedTrailer" }
}
}Examples:
"Set my channel country to GB and keywords to 'gaming commentary'" → pass
country: "GB", keywords: "gaming commentary"."Change my trailer video to dQw4w9WgXcQ" → pass
unsubscribedTrailer: "dQw4w9WgXcQ".
Errors:
400: invalid field value (e.g. unsupported country code or language tag).
401 / 403: insufficient scope or expired credentials — re-run
npm run auth.
| Name | Required | Description | Default |
|---|---|---|---|
| description | No | Channel description displayed in branding settings. | |
| keywords | No | Space-separated or quoted keywords for the channel, e.g. "coding tutorial javascript". | |
| country | No | ISO 3166-1 alpha-2 country code, e.g. "US", "GB", "DE". | |
| defaultLanguage | No | BCP-47 language code for the channel's primary language, e.g. "en", "fr". | |
| unsubscribedTrailer | No | Video ID to show as the trailer to unsubscribed visitors. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes merge behavior (fetches current branding, merges, omitted fields preserved). Lists error codes (400, 401/403). No contradiction with annotations (readOnlyHint false, destructiveHint false). Adds significant value beyond annotations.
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?
Well-structured with summary, parameter list, return shape, examples, errors. Every sentence is useful. Slightly long but justified by thoroughness.
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?
Covers all aspects: purpose, parameters, merge behavior, return shape, examples, errors. No output schema but return shape provided. Complete for a mutation tool with 5 optional params.
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 100%, but description adds usage details for each parameter (e.g., max chars for description, format for keywords, examples). Adds meaning beyond schema.
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?
Clearly states 'Update one or more branding fields on the authenticated user's YouTube channel'. The verb 'update' and resource 'channel branding' are explicit. Distinguishes from sibling tools which focus on videos, playlists, comments, etc.
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?
States that at least one field must be supplied and explains merge behavior. No explicit 'when not to use' but the tool name and sibling context make the scope clear. Adequate guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_update_commentUpdate CommentA
Updates the text of an existing comment owned by the authenticated channel.
Args
commentId(string, required) — ID of the comment to update.text(string, required) — New text content for the comment.
Returns The updated comment resource:
{
"id": "string",
"parentId": "string",
"authorDisplayName": "string",
"text": "string",
"updatedAt": "ISO-8601"
}Examples
Fix a typo in a comment:
{ "commentId": "UgxABC123_reply", "text": "Corrected text here." }
Errors
400 if
textis empty or thecommentIdis invalid.403 if the comment does not belong to the authenticated channel, or quota is exceeded.
404 if the comment does not exist.
| Name | Required | Description | Default |
|---|---|---|---|
| commentId | Yes | ID of the comment to update. | |
| text | Yes | New text content for the comment. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate a write operation (readOnlyHint=false) and non-destructive (destructiveHint=false). The description adds behavioral details: updates text, requires ownership, and lists error conditions (400, 403, 404). No contradiction with annotations.
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 concise and well-structured with clear sections (Args, Returns, Examples, Errors). Every sentence adds value, and the purpose is 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?
Despite lacking a formal output schema in structured fields, the description provides a JSON example of the return value. It covers parameters, errors, and ownership constraint, making the tool fully understandable for a simple update operation.
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 100% with descriptions for both parameters. The description repeats them but adds an example ('Fix a typo') that provides semantic usage context beyond the schema, justifying a slight improvement over baseline.
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 it updates the text of an existing comment owned by the authenticated channel. It distinguishes from sibling tools like youtube_delete_comment or youtube_mark_comment_as_spam by specifying the action and ownership requirement.
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 when to use (to update your own comment's text) through ownership language and error codes (403 if not owned). It does not explicitly state when not to use or name alternatives, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_update_playlistUpdate PlaylistA
Update metadata of an existing playlist. Fetches the current playlist first and merges
only the provided fields, so omitted fields are preserved. snippet.title is always
required by the API — the existing title is kept when not supplied.
Args
playlistId(string, required): Playlist ID to update.title(string, optional): New title. If omitted, existing title is preserved.description(string, optional): New description.privacyStatus("public" | "private" | "unlisted", optional): New visibility.
Returns Confirmation Markdown + structured updated playlist resource.
Examples
youtube_update_playlist({ playlistId: "PL...", title: "Best of 2024" })youtube_update_playlist({ playlistId: "PL...", privacyStatus: "public" })
Errors
404 → playlist not found.
403 → not your playlist or scope missing.
| Name | Required | Description | Default |
|---|---|---|---|
| playlistId | Yes | Playlist ID to update. | |
| title | No | New playlist title. Preserves existing if omitted. | |
| description | No | New playlist description. Preserves existing if omitted. | |
| privacyStatus | No | New privacy status. Preserves existing if omitted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds the important merge behavior (fetch current, merge fields) beyond annotations. Annotations already indicate it's not read-only, not destructive, not idempotent. The description provides additional context on error codes and preservation of omitted fields.
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 well-structured with clear sections (Args, Returns, Examples, Errors). It is concise, with no unnecessary words, and front-loads the main action.
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?
Given the tool's complexity, the description covers behavior, parameters, examples, errors, and return format. No output schema exists, but the return description is sufficient.
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 100% coverage, and the description adds value by explaining the preservation behavior for each optional parameter (e.g., 'Preserves existing if omitted'). This goes beyond the schema's 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 states 'Update metadata of an existing playlist'. It uses specific verb+resource (update metadata) and distinguishes from sibling tools like create_playlist and delete_playlist.
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 explains the merge behavior and error conditions, and provides examples. However, it does not explicitly guide when to use this tool versus alternatives like youtube_update_playlist_item, but the context is clear for metadata updates.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_update_playlist_itemUpdate Playlist ItemA
Update the position or video reference of an existing playlist item. All four arguments are required by the YouTube API.
Args
playlistItemId(string, required): The playlist item ID to update.playlistId(string, required): The playlist this item belongs to.videoId(string, required): The video ID for this item.position(integer ≥ 0, required): New zero-based position in the playlist.
Returns Confirmation Markdown + structured updated playlist item resource:
{
"playlistItemId": "...",
"playlistId": "PL...",
"videoId": "...",
"position": 2
}Examples
Move to position 0:
youtube_update_playlist_item({ playlistItemId: "...", playlistId: "PL...", videoId: "...", position: 0 })
Errors
404 → item not found.
403 → not your playlist.
| Name | Required | Description | Default |
|---|---|---|---|
| playlistItemId | Yes | Playlist item ID to update. | |
| playlistId | Yes | Playlist this item belongs to. | |
| videoId | Yes | Video ID for this playlist item. | |
| position | Yes | New zero-based position in the playlist. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond annotations: it specifies the update effect, required parameters, error codes (404, 403), and return format. Annotations indicate readOnlyHint=false, which aligns with the update action. No contradictions.
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 well-structured with sections: main action, Args, Returns, Examples, Errors. It is front-loaded with the purpose. Could be slightly more concise, but the structure aids readability.
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 update tool with no output schema, the description covers purpose, all parameters, error scenarios, and an example. It also describes the return format (Markdown + JSON). This is sufficiently complete 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 coverage is 100%, so the description adds minimal value beyond the schema. It restates parameter types and required status, and provides an example, but the schema already documents each parameter with descriptions. 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 clearly states 'Update the position or video reference of an existing playlist item.' This specific verb+resource combination distinguishes it from siblings like `youtube_add_video_to_playlist` and `youtube_remove_playlist_item`.
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 mentions all four arguments are required, which gives context but does not explicitly state when to use vs alternatives. It implies usage for updating existing items, but lacks explicit when-not or alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_update_videoUpdate Video MetadataA
Update the metadata of an existing video.
Fetches the current video (snippet + status) first, merges your provided fields, then calls videos.update. This ensures snippet.title and snippet.categoryId (both required by the API) are always present even if you only change one field.
Args
videoId (string, required): video to update
title (string, optional): new title
description (string, optional): new description
tags (string[], optional): full replacement tag list
categoryId (string, optional): numeric category ID (use youtube_list_video_categories)
privacyStatus ("public"|"unlisted"|"private", optional)
madeForKids (boolean, optional): sets status.selfDeclaredMadeForKids
embeddable (boolean, optional)
publicStatsViewable (boolean, optional)
defaultLanguage (string, optional): BCP-47 language code
Returns Short confirmation markdown + full updated video resource as structuredContent.
Examples
Update title:
{ "videoId": "abc123", "title": "New Title" }Make private:
{ "videoId": "abc123", "privacyStatus": "private" }
Errors
400: required fields invalid
403: not your video or scope missing
404: video not found
| Name | Required | Description | Default |
|---|---|---|---|
| videoId | Yes | ID of the video to update. | |
| title | No | New video title. | |
| description | No | New video description. | |
| tags | No | Full replacement tag list (replaces all existing tags). | |
| categoryId | No | Numeric video category ID (see youtube_list_video_categories). | |
| privacyStatus | No | New privacy status. | |
| madeForKids | No | Mark video as made for kids (sets selfDeclaredMadeForKids). | |
| embeddable | No | Allow embedding on external sites. | |
| publicStatsViewable | No | Allow public to see extended stats. | |
| defaultLanguage | No | BCP-47 default language code (e.g. 'en'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are consistent; description details the fetch-then-merge behavior, ensuring required fields are always present, which adds value beyond annotations.
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?
Well-structured with clear sections (description, args, returns, examples, errors). Information is front-loaded and every sentence is useful.
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?
Covers all aspects: parameters, return format, error codes, and cross-reference. Adequate for a complex tool without output 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?
Input schema covers all parameters (100%), but description adds context like merge behavior, cross-reference to categories tool, and examples, enhancing understanding.
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 'Update the metadata of an existing video' with specific verb and resource. It distinguishes from siblings like upload_video, delete_video, etc.
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 explains the merge process, required fields, and gives examples, but does not explicitly state when not to use this tool (e.g., use youtube_get_video to read).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_upload_captionUpload Caption TrackA
Upload a new caption track to a YouTube video from a local file.
The file is streamed directly from disk via fs.createReadStream. The MIME type
is inferred from the file extension (.vtt → text/vtt, .srt → application/x-subrip,
.sbv → text/x-google-video-subtitle, .ttml → application/ttml+xml).
Args
videoId(string, required): The video ID to attach the caption track to.language(string, required): BCP-47 language tag for the track (e.g. "en", "fr-CA").name(string, required): A human-readable display name for the track (e.g. "English (CC)").filePath(string, required): Absolute local path to the caption file (.vtt, .srt, .sbv, .ttml).isDraft(boolean, default false): Whether to upload the track as a draft (not publicly visible).
Returns
{
"id": "string",
"videoId": "string",
"language": "string",
"name": "string",
"trackKind": "string",
"isDraft": boolean
}Examples
Upload an English SRT:
videoId="dQw4w9WgXcQ", language="en", name="English", filePath="/captions/en.srt"Upload as draft:
videoId="dQw4w9WgXcQ", language="es", name="Spanish", filePath="/captions/es.vtt", isDraft=true
Errors
400: Invalid language tag or file format not supported.
403: You can only add captions to videos on your own channel. Check scopes (
youtube.force-ssl).404: Video not found.
| Name | Required | Description | Default |
|---|---|---|---|
| videoId | Yes | The video ID to attach the new caption track to. | |
| language | Yes | BCP-47 language tag for the track (e.g. "en", "fr-CA"). | |
| name | Yes | Human-readable display name for the track (e.g. "English (CC)"). | |
| filePath | Yes | Absolute local path to the caption file (.vtt, .srt, .sbv, .ttml). | |
| isDraft | No | Upload the track as a draft (not publicly visible). Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral details beyond annotations: file streamed via fs.createReadStream, MIME type inference from extension, and error conditions (400, 403, 404). No contradiction with annotations.
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?
Well-structured with headings (Args, Returns, Examples, Errors). Front-loaded with purpose. Every sentence adds value, 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?
Given no output schema, the description includes a JSON return example, error conditions, and examples. Covers action, params, return format, and errors completely for a file-upload caption tool.
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 100% with good descriptions. The description adds extra value: MIME type mapping for filePath, example argument values, and streaming detail. This exceeds the baseline of 3.
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 'Upload a new caption track to a YouTube video from a local file.' It specifies the action (upload), resource (caption track), and source (local file), distinguishing it from siblings like youtube_list_captions, youtube_download_caption, and youtube_delete_caption.
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 lists errors (e.g., 403 for permissions) that imply prerequisites (must own video, need youtube.force-ssl scope), but does not explicitly state when to use this tool vs alternatives or provide when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_upload_videoUpload VideoA
Upload a local video file to YouTube.
Calls videos.insert with a resumable media upload. The file is streamed from disk via fs.createReadStream so large files are handled without loading them fully into memory.
Note: This operation costs approximately 1600 quota units.
Args
filePath (string, required): absolute path to the local video file
title (string, required): video title (shown on YouTube)
description (string, optional): video description
tags (string[], optional): tags / keywords
categoryId (string, optional): numeric category ID, default "22" (People & Blogs)
privacyStatus ("public"|"unlisted"|"private", optional, default "private")
madeForKids (boolean, optional, default false)
Returns
Short confirmation markdown + the new video resource as structuredContent
(includes the new video ID at structured.video.id).
Examples
Upload privately:
{ "filePath": "/tmp/myvideo.mp4", "title": "Test" }Upload publicly:
{ "filePath": "/tmp/myvideo.mp4", "title": "Launch", "privacyStatus": "public" }
Errors
400: file not found or unreadable, or required title missing
403: upload scope missing — re-run
npm run auth429: quota exceeded (upload costs ~1600 units)
| Name | Required | Description | Default |
|---|---|---|---|
| filePath | Yes | Absolute path to the local video file to upload. | |
| title | Yes | Video title (required by YouTube). | |
| description | No | Video description. | |
| tags | No | Tags / keywords for the video. | |
| categoryId | No | Numeric category ID (default "22" = People & Blogs). | 22 |
| privacyStatus | No | Privacy status (default "private"). | private |
| madeForKids | No | Declare video as made for kids (default false). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate it is not read-only (modifies state) and not idempotent; the description openly states it calls videos.insert with resumable upload, streams from disk, and costs quota. No contradictions.
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 well-structured with sections (Args, Returns, Examples, Errors) and front-loaded with purpose. While slightly verbose, every sentence contributes useful information for an agent.
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?
Given 7 parameters and no output schema, the description fully explains return format (structured content with video ID) and error scenarios. Examples cover both minimal and full usage, ensuring an agent can invoke the tool correctly.
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 100%, yet the description adds value by explaining filePath as absolute path, title as shown on YouTube, categoryId default mapping, and provides examples that illustrate parameter usage beyond schema constraints.
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 starts with 'Upload a local video file to YouTube,' which is a clear verb and resource. The title 'Upload Video' and sibling tools (e.g., youtube_update_video) further distinguish its purpose.
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 includes cost (1600 quota units), prerequisites (auth scope), and error conditions. While it does not explicitly contrast with alternatives, the context and sibling names make the usage case clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_video_performanceVideo Performance AnalyticsARead-onlyIdempotent
Retrieve detailed analytics for a single YouTube video, including views, watch time, retention, subscriber impact, engagement, and more. Optionally break down by day.
Args:
videoId(required): The YouTube video ID, e.g."dQw4w9WgXcQ".startDate(optional): Inclusive start date inYYYY-MM-DDformat. Defaults to 28 days ago.endDate(optional): Inclusive end date inYYYY-MM-DDformat. Defaults to today.dimension(optional):"none"(default, aggregate) or"day"(per-day breakdown).response_format(optional):"markdown"(default) or"json".
Returns (JSON shape):
{
"columns": ["views", "estimatedMinutesWatched", "averageViewDuration", "averageViewPercentage",
"subscribersGained", "subscribersLost", "likes", "dislikes", "comments", "shares"],
"rows": [[5000, 12000, 144, 55.3, 30, 2, 200, 5, 40, 15]]
}When dimension is "day", the first column is the date string.
Examples:
"How did video dQw4w9WgXcQ perform last month?" →
videoId: "dQw4w9WgXcQ"with date args."Day-by-day views for my latest video" →
videoId: "...", dimension: "day".
Errors:
400: invalid video ID format or unsupported metric/dimension pair.
403: insufficient scope — re-run
npm run auth.
| Name | Required | Description | Default |
|---|---|---|---|
| videoId | Yes | YouTube video ID to analyze, e.g. "dQw4w9WgXcQ". | |
| startDate | No | Inclusive start date in YYYY-MM-DD format. Defaults to 28 days ago. | |
| endDate | No | Inclusive end date in YYYY-MM-DD format. Defaults to today. | |
| dimension | No | Time grouping: "none" (default) for aggregate totals, "day" for per-day rows. | none |
| response_format | No | Output format: "markdown" (default) for a human-readable table, "json" for the structured payload. | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, idempotentHint, and openWorldHint. The description adds error behavior (400, 403 with re-auth suggestion) and return format details, which are not in annotations. No contradictions with annotations.
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 well-structured with sections (Args, Returns, Examples, Errors), front-loads the purpose, and every sentence adds value without redundancy. It is appropriately sized for a 5-parameter tool.
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?
Given the complexity (5 parameters, 1 required, enums) and no output schema, the description provides thorough context: parameter defaults, return shape, examples, and error handling. Only minor omission is explicit permission scope details, but 'insufficient scope' error covers 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?
Schema description coverage is 100%, but the description enriches parameters with examples (e.g., videoId 'dQw4w9WgXcQ'), defaults, and format constraints. The included return JSON shape clarifies expected output beyond schema.
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 ('Retrieve') and resource ('detailed analytics for a single YouTube video'), clearly stating the tool's function. It lists specific metrics (views, watch time, etc.) and distinguishes from siblings like youtube_channel_summary by targeting a single video.
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?
Examples show concrete use cases ('How did video dQw4w9WgXcQ perform last month?'), and the description implies usage through example inputs. However, it does not explicitly state when not to use this tool versus alternatives, such as channel-level or custom analytics queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Most tools have clear distinct purposes, but there is some overlap among analytics tools (e.g., youtube_channel_summary, youtube_top_videos, youtube_video_performance, etc.) that share similar metrics and could cause confusion. However, detailed descriptions help differentiate them.
All tool names follow a consistent 'youtube_verb_noun' pattern (e.g., youtube_create_playlist, youtube_delete_video, youtube_list_playlists). No mixing of conventions or unclear verbs, making it easy for an agent to predict tool names.
With 46 tools, the set is extensive but each tool serves a specific purpose within YouTube's API. While some tools could be consolidated (e.g., separate caption upload/download/update/list), the count is reasonable for a full-featured server covering videos, playlists, comments, analytics, and subscriptions.
The tool surface covers CRUD operations for videos, playlists, comments, captions, subscriptions, and channel branding, plus analytics. Minor gaps include no tool for live stream management or detailed subscriber list (though subscriptions.list is present). Overall, core workflows are well-supported.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Hosted MCP for YouTube Studio: uploads, metadata, playlists, comments, analytics, captions.
MCP server for QPost — lets AI agents publish video and image posts to YouTube, TikTok, Instagram.
MCP server for Clipkit — gives AI agents a video toolbox via the Clipkit schema.
An MCP server that gives any LLM or agent clean YouTube transcripts on demand: a single video, a whole channel, or a playlist, plus AI cleanup of auto-generated captions. API-key auth, credit-based, same backend as the public v1 API. Get a free API key with 25 free credits at youtubetranscriptdownload.com/account.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn MCP server that allows Claude and other AI assistants to interact with the YouTube API, providing tools to search videos/channels and retrieve detailed information about them.571MIT
- FlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that provides Claude with tools to interact with YouTube, built on the mcp-framework.
- FlicenseAqualityDmaintenanceA Model Context Protocol server that enables Claude to interact with YouTube data and functionality through the Claude Desktop application.111
- AlicenseAqualityCmaintenanceA comprehensive MCP server that provides Claude AI with full access to YouTube content, including searchable transcripts, metadata, comments, and playlists. It uniquely supports capturing video screenshots and extracting audio clips for analysis across both local and remote platforms.5273MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/tuitamogamer-gpt/youtube-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server