youtube-mcp
It's a YouTube MCP server that lets Claude read video transcripts and, optionally with Google credentials, search YouTube and access your own account data.
Transcripts (no sign-in, no quota):
get_transcriptfetches subtitles for any public video as text, timestamped lines, SRT, VTT or JSON — with language choice, translation, time-range slicing, char limits and metadata;list_transcript_languagesshows available caption tracks.Video metadata (no sign-in):
get_video_inforeturns title, channel, duration, description, view count and caption availability.Channel & playlist browsing (API key or sign-in):
list_channel_uploads(1 quota unit, complete uploads, filter by date) andget_playlist_itemsfor public or private playlists.Search (API key or sign-in):
search_videosfor full-text search at 100 quota units, auto-routed to the cheap uploads path when onlychannel_idis given.Your account (sign-in required):
get_subscription_feedfor a cached newest-first feed across subscriptions,list_my_subscriptions,list_my_playlists,list_my_uploads.Your own captions (sign-in + ownership):
list_my_video_captions(including drafts) anddownload_my_captionas SRT or VTT.Diagnostics:
get_auth_statusreports sign-in state and currently available capabilities.Common flow: find or list videos, then pipe them into
get_transcriptto summarize, translate or quote — including a whole playlist or your subscription feed.
Provides tools for retrieving YouTube video transcripts and caption tracks, listing available caption languages, fetching video metadata, browsing channel uploads, subscription feeds, search results, playlist items, and accessing the signed-in user's own subscriptions, playlists, uploads, and caption tracks.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@youtube-mcpsummarize the transcript of this video: https://www.youtube.com/watch?v=dQw4w9WgXcQ"
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
MCP server that gives Claude Desktop access to YouTube transcripts and your own YouTube account data.
Built for the case "let Claude read/summarize this video": get_transcript pulls the subtitle
track of any public video and hands it over as plain text, so Claude can summarize, translate or
quote it without you watching the video.
What you need
Most of what people install this for needs no Google account at all. The three tiers:
You want | You need |
Transcripts, caption languages, video metadata | Nothing. Clone, |
Full-text search, a channel's uploads, public playlists | A Google account, a Cloud project and an API key — no OAuth, no consent screen |
Your own subscription feed, playlists, uploads and captions | The above plus the OAuth sign-in in step 3 |
Transcripts come from the InnerTube endpoint the YouTube player itself uses, not from the YouTube Data API, which is why the first tier needs no credentials and consumes no quota. If summarising videos is all you are after, do step 1, then jump straight to step 4 — steps 2 and 3 do not apply to you.
Related MCP server: YouTube MCP
Capabilities
Tool | Needs sign-in | Purpose |
| no | Transcript of any public video, as text / timestamps / SRT / VTT / JSON |
| no | Which caption tracks exist, auto vs human, translatable |
| no | Title, channel, duration, description, view count |
| API key or sign-in | Recent uploads of any channel (ID, |
| yes | Merged newest-first feed across all your subscriptions |
| API key or sign-in | Full-text search — 100 quota units |
| public: API key | Videos in a playlist |
| no | What the server can currently do |
| yes | Channels you follow |
| yes | Your own playlists |
| yes | Videos you uploaded |
| yes | Official caption tracks of your own videos, incl. drafts |
| yes | Download an official caption track you own |
Transcripts do not consume YouTube Data API quota — they come from the caption endpoint the player itself uses. Only the tools marked as using quota do.
Quota
The daily budget is 10 000 units, and search.list costs 100 of them per call — 100 calls a day.
Listing a channel's videos does not need search at all: every channel has an auto-maintained
uploads playlist whose ID is the channel ID with UC swapped for UU, and playlistItems.list
on it costs 1 unit while returning uploads completely rather than best-effort.
get_subscription_feed uses that: a feed over 120 subscriptions costs roughly 123 units instead of
the 12 000 the search route would need — which would not fit in a day at all. Results are cached on
disk (subscriptions 24 h, uploads 12 min), so a repeated feed call usually costs nothing, and dead
channels are cached as failures so they are not re-requested on every call.
search_videos stays for genuine full-text search. Calling it with channel_id but no query is
routed to the cheap path automatically.
Setup
1. Install and build
git clone https://github.com/ChristophLanganke/youtube-mcp.git
cd youtube-mcp
npm install
npm run buildAt this point transcripts already work — skip to step 4 and register the server with your MCP client. Steps 2 and 3 exist only for the Data API tools, and you need them only if you want search or your own account data.
2. Google Cloud credentials (optional — for search and account access)
The old "OAuth consent screen" page is gone — Google replaced it with the Google Auth Platform section. German console labels are given in parentheses.
Open the Google Cloud Console and create a project.
APIs & Services → Library (Bibliothek) → enable YouTube Data API v3.
Google Auth Platform → Get started (Erste Schritte). The wizard asks for an app name, your support email, the audience — choose External (Extern) — and a contact email. The app name must not contain a Google trademark: anything with YouTube, Google or Gmail in it is rejected, because the name would imply a partnership. The wizard still accepts such a name, but every later attempt to save the branding form fails with "Name der Anwendung entspricht nicht den Anforderungen von Google". Pick a neutral name up front — the reference deployment of this server is registered as Langanke Media MCP.
Google Auth Platform → Audience (Zielgruppe) → Test users (Testnutzer): add your own Google address. Without this, sign-in fails with
access_denied.Google Auth Platform → Data access (Datenzugriff) → Add or remove scopes: add
.../auth/youtube.readonlyand.../auth/youtube.force-ssl, then save.Google Auth Platform → Clients → Create client (Client erstellen) → application type Desktop app (Desktop-App).
Copy the client ID and secret into
.env:
cp .env.example .envGOOGLE_CLIENT_ID=...apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=...Optionally add YOUTUBE_API_KEY so search works without signing in.
Two things to expect, both normal for a personal project:
The consent screen warns that the app is not verified. Click Advanced (Erweitert) → Go to … (unsafe). Verification only matters for apps offered to other people.
While the app's publishing status is Testing, the refresh token expires after 7 days, so you have to re-run
npm run authweekly. Setting the status to In production (In Produktion) under Google Auth Platform → Audience removes that limit; the unverified warning stays.
Publishing to production is not just a button, though. Audience → Publish app stays greyed out until the Branding page is complete, and for scopes Google classes as sensitive — both YouTube scopes are — that means four fields that need real, reachable URLs on a domain you control:
Field | Example |
Authorized domain (Autorisierte Domain) |
|
Application home page |
|
Privacy policy link |
|
Terms of service link |
|
localhost and file paths are rejected, and so is a bare github.io — that one is on the Public
Suffix List, so the authorized domain has to be the full host including your user name.
The cheapest way to get those URLs is to fork this repository: docs/ already contains a
home page, a privacy policy and terms of service. Enable Settings → Pages → Deploy from a branch
→ main → /docs on your fork, wait for the first build, then adjust the operator name, the contact
address and the app name in those three files to your own. Publishing to production also makes the
test-user list irrelevant: anyone with a Google account can then consent — though only if they have
your client ID and secret, which stay in your local .env.
3. Sign in once (optional — only for your own account data)
An API key from step 2 already covers search and public playlists. Sign in only if you want the tools that read your own subscriptions, playlists, uploads or captions.
npm run authThis opens a browser, asks for consent, and stores the token at ~/.youtube-mcp/token.json
(mode 0600). The server refreshes it automatically afterwards.
Sign out again with:
npm run auth -- --logout4. Register with your MCP client
Requires Node 20 or newer. For Claude Desktop, add the server to
~/Library/Application Support/Claude/claude_desktop_config.json on macOS, or to
%APPDATA%\Claude\claude_desktop_config.json on Windows:
{
"mcpServers": {
"youtube": {
"command": "node",
"args": ["/absolute/path/to/youtube-mcp/dist/index.js"]
}
}
}The path must be absolute and must point at the built dist/index.js, not at src/. On Windows,
write the path with escaped backslashes (C:\\Users\\you\\youtube-mcp\\dist\\index.js) or with
forward slashes. Then restart Claude Desktop.
Any other MCP client works the same way — the server speaks MCP over stdio and is started with
node dist/index.js. In Claude Code, for example:
claude mcp add youtube -- node /absolute/path/to/youtube-mcp/dist/index.jsUsage examples
Fasse mir dieses Video zusammen: https://www.youtube.com/watch?v=...
Welche Untertitelsprachen hat das Video? Hol das deutsche Transkript.
Was wird zwischen Minute 12 und 18 gesagt? — uses
start_seconds/end_seconds
Zeig mir die letzten 10 Videos meiner Abos und fasse das neueste zusammen.
For long videos the transcript is capped at max_chars (default 100 000). The response says so
explicitly; ask for a later start_seconds to continue, or set max_chars: 0 to lift the cap.
Authentication design
Sign-in uses Google OAuth 2.0 for installed apps (loopback redirect + PKCE), not your YouTube password. Reasons:
Your password is never handled or stored — only a revocable token is.
Revoke access any time at myaccount.google.com/permissions.
Automating a password login would violate YouTube's Terms of Service and break on every login-flow change.
Scopes requested: youtube.readonly and youtube.force-ssl (the latter is required by
captions.download). The server never writes to your account — no tool uploads, edits or deletes.
How transcripts are fetched
The YouTube WEB InnerTube client stopped returning caption tracks to unauthenticated callers, so
src/innertube.ts tries the ANDROID client, then IOS, then falls back to
scraping ytInitialPlayerResponse from the watch page. The first transport that returns caption
tracks wins. Cues are requested in json3 format and parsed in
src/transcript.ts.
If all three fail, the video is usually private, age-restricted, region-blocked or deleted.
Limitations
Videos without captions (many live streams, some uploads) yield nothing — there is no speech-to-text fallback.
captions.downloadworks only for videos owned by the signed-in account; that is a YouTube restriction. Useget_transcriptfor third-party videos.YouTube rate-limits the caption endpoint (HTTP 429) if hit rapidly in a loop.
Search and playlist tools share the default 10 000 units/day API quota; a search costs 100.
License
ISC — see LICENSE. The transcripts and video metadata this server retrieves are not covered by it; they belong to the rights holders of the respective videos.
Available Tools
13 toolsdownload_my_captionA
Download an official caption track as SRT or VTT. Only works for videos owned by the signed-in account — use get_transcript for anything else.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | srt | |
| caption_id | Yes | Caption ID from list_my_video_captions |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It discloses a critical restriction (only works for owned videos) and indicates the output format. It does not detail failure modes or the exact response envelope, but for a simple download tool this is adequate and goes beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no fluff. The core action is front-loaded, the ownership constraint is stated clearly, and the alternative tool is referenced in the second half. Every word 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?
With one required parameter, a format enum, and no output schema, the description provides enough: purpose, scope limitation, output formats, and the correct alternative when the ownership condition fails. An agent can invoke this tool correctly without needing more 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 description coverage is 50%; only caption_id is described in the schema, while format has an enum and default. The description mentions SRT/VTT, mirroring the enum, but adds no new parameter-level meaning beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Download'), a resource ('official caption track'), and the output formats ('SRT or VTT'). It also explicitly distinguishes itself from get_transcript by naming the ownership restriction, making the tool's purpose unmistakable.
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 says exactly when to use this tool versus the alternative: 'Only works for videos owned by the signed-in account — use get_transcript for anything else.' This is an explicit conditional with a named sibling, leaving no ambiguity for an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_auth_statusA
Report whether the server is signed in to a Google account and which capabilities are available.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It explicitly frames this as a reporting/status operation, implying a non-mutating read. It could add detail about whether the status check triggers network calls, but for such a simple status tool the transparency is reasonable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence with no filler. It front-loads the purpose and uses concise wording that conveys both the resource and the output.
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 a zero-parameter tool, no output schema, and a simple boolean/capabilities status purpose, the description is complete enough for an agent to select 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?
The tool has zero parameters, so the baseline is 4. There are no parameter semantics to document, and the description correctly describes the tool's scope without pretending there are 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 states a specific action ('Report') on a specific resource (server Google account authentication) and the exact content (signed-in status and available capabilities). It is clearly distinct from the sibling tools, which all perform listing/search/transcript operations rather than status checks.
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?
There are no sibling tools with similar purpose, so no alternative routing is needed. The context is clear: use this when you need to know whether the server is authenticated and what it can do. It does not prescribe an explicit 'use before X' pattern, but for a status-reporting tool this is adequate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_playlist_itemsA
List the videos in a playlist. Public playlists work with an API key; private ones need sign-in. Combine with get_transcript to summarize a whole playlist.
| Name | Required | Description | Default |
|---|---|---|---|
| playlist | Yes | Playlist ID or a URL containing ?list= | |
| page_token | No | ||
| max_results | No | 1-50 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full behavioral burden. It does disclose an important auth behavior (API key for public, sign-in for private) beyond the schema. However, it does not reveal that results are paginated (page_token exists) or what items the call returns beyond 'videos', leaving some operational behavior implied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each earning its place: purpose first, then auth condition, then a cross-tool workflow hint. No filler, no restating of schema defaults, and the most decisive 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 3-param list tool with no annotations and no output schema, the description covers purpose, auth, and the transcript workflow, which covers the happy-path call. But pagination is unmentioned despite the page_token param being undocumented in the schema, leaving an agent to invent or miss paging behavior on long playlists.
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 67% and the description adds essentially no parameter meaning: it does not explain playable page_token pagination or how max_results relates to page size. The 'Playlist ID or URL with ?list=' guidance already lives in the schema, so the description only adds marginal value over the structured field text.
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 opens with 'List the videos in a playlist' — a specific verb and resource that an agent can act on. This clearly distinguishes the tool from its siblings such as list_channel_uploads (channel-scoped), search_videos, and get_transcript, without needing to open any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives practical usage context: public playlists work with an API key while private ones need sign-in, which tells the agent the authentication precondition. It also offers a workflow hint (combine with get_transcript to summarize a playlist). It does not explicitly name alternatives or state when-not-to-use, but the condition is reasonably clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_subscription_feedA
Merged newest-first feed of recent uploads across the signed-in account's subscriptions — the "what is new from the channels I follow" view. Requires sign-in. Results are cached, so repeated calls are nearly free. Combine with get_transcript to summarize what is new.
| Name | Required | Description | Default |
|---|---|---|---|
| since | No | ISO 8601 datetime; only videos published after this moment | |
| channels | No | Optional: restrict to these channels (IDs, @handles or URLs) instead of all subscriptions | |
| max_results | No | Videos in the merged result, 1-100 | |
| per_channel | No | Uploads fetched per channel before merging, 1-50 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It explicitly notes that sign-in is required and that results are cached (making repeated calls cheap), which materially affects how an agent plans calls. It stops short of explaining pagination, return format, or what happens with zero subscriptions, but covers the main operational 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?
Three short sentences carry the core purpose, the sign-in requirement, caching behavior, and a cross-tool suggestion. Information is front-loaded and every sentence 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?
Given that there is no output schema summary, the description conveys the operation's purpose fact. It also signals important operational context (sign-in required, cached results) that an agent needs for repeated calls. It does not spell out response shape or rate-limit implications of caching, and with four parameters all covered by the schema it is still fairly complete for a read-only feed tool. Minor gap around exactly how merged ordering/filtering is resolved, but the description is sufficient for an agent to select and call 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%, so all four parameters are already documented with types, defaults, and constraints. The description adds the 'merged' context and the cached behavior but doesn't need to repeat schema-level parameter details beyond that. Baseline 3 applies.
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 names a specific resource ('subscriptions' feed) and a specific action ('merged newest-first feed of recent uploads'), clearly distinguishing it from sibling tools like list_channel_uploads and search_videos. It also explains the user-facing concept ('what is new from the channels I follow'), leaving no ambiguity about what the tool returns.
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 states when to use the tool (after sign-in, to see new uploads from followed channels) and suggests composing it with get_transcript. It does not explicitly state when NOT to use it or list alternatives (e.g., search_videos for query-based discovery), but the context is clear enough for an agent to route correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_transcriptA
Fetch the transcript/subtitles of a YouTube video for reading, summarizing or quoting. Works for any public video without sign-in. Accepts a video ID or any YouTube URL. Long transcripts are truncated at max_chars — request a later start_seconds to continue.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Preferred caption language code, e.g. de or en. Defaults to the video's default track. | |
| video | Yes | Video ID or URL (watch, youtu.be, shorts, embed) | |
| format | No | text = plain prose (cheapest, best for summarizing); timestamped = [mm:ss] lines for citing moments | text |
| max_chars | No | Character budget for the transcript body. Set 0 for no limit. | |
| end_seconds | No | Only include cues at or before this timestamp | |
| translate_to | No | Machine-translate the track into this language code, e.g. de. Only for translatable tracks. | |
| prefer_manual | No | Prefer human-written captions over auto-generated ones when both exist | |
| start_seconds | No | Only include cues at or after this timestamp | |
| include_metadata | No | Prefix the output with title, channel, duration and track info |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It discloses the access requirement (no sign-in), the input formats accepted, and the critical truncation behavior: long transcripts are cut at max_chars and can be continued by requesting a later start_seconds. It does not mention error cases or rate limits, but covers the most agent-relevant behaviors.
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 four short sentences, each earning its place: purpose, access scope, accepted input shapes, and truncation behavior. It is front-loaded with the core purpose and contains no filler or repetition.
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 (9 parameters, no annotations, no output schema), the description is admirably complete for invocation purposes. It covers purpose, auth, input, and pagination behavior. It could go further by briefly describing the return shape or error cases, but the schema already documents all parameters and formats.
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 baseline is 3. The description adds value beyond the schema by explaining the interaction between max_chars and start_seconds for continuing truncated transcripts, and by clarifying that the tool works for any public video regardless of auth. This extra semantic context 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 uses a specific verb and resource: 'Fetch the transcript/subtitles of a YouTube video.' It states the intended uses (reading, summarizing, quoting) and the scope (any public video, no sign-in), which distinguishes it from siblings like list_transcript_languages and download_my_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 gives a clear context for use: works for any public video without sign-in, and accepts a video ID or any YouTube URL. It does not explicitly name sibling alternatives for edge cases like private videos or the user's own captions, so it falls short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_video_infoA
Get metadata for a video: title, channel, duration, description, view count and whether captions exist. Needs no sign-in and no API quota.
| Name | Required | Description | Default |
|---|---|---|---|
| video | Yes | Video ID or URL | |
| full_description | No | Return the whole description instead of the first 1000 characters |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses that no authentication and no API quota are required, which is meaningful access context. It does not cover error cases or invalid video behavior, but the read-only nature of metadata retrieval is reasonably clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The primary purpose and key fields are front-loaded, and the access requirement is stated efficiently in the second sentence.
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 two-parameter read tool with no output schema, the description lists the returned metadata fields and states access requirements. It is complete enough for an agent to invoke correctly, though it does not describe the exact response structure or error behavior.
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 explains both parameters. The description adds no extra meaning about the video parameter format or the full_description boolean beyond what the schema provides.
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 a specific verb ('Get metadata for a video') and enumerates the returned fields (title, channel, duration, description, view count, captions existence). It does not explicitly name sibling tools, but the metadata focus is semantically distinct from transcript and upload tools.
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 by stating it needs no sign-in and no API quota, which tells an agent when this public-access tool is appropriate. It does not explicitly state when not to use it or name alternatives, so it stops short of full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_channel_uploadsA
List a channel's most recent uploads, newest first. Prefer this over search_videos whenever you want "the latest videos from channel X" — it costs 1 quota unit instead of 100 and returns uploads completely, including videos whose title does not contain any particular word.
| Name | Required | Description | Default |
|---|---|---|---|
| channel | Yes | Channel ID (UC...), uploads playlist ID (UU...), @handle, or channel URL | |
| page_token | No | nextPageToken from a previous call | |
| max_results | No | 1-50 | |
| published_after | No | ISO 8601 datetime; only return videos published at or after this moment |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It adds meaningful context beyond the schema: quota cost, completeness of results, ordering, and a contrast with search_videos. It does not mention auth requirements or rate limits, but for a read-oriented list operation the disclosed behaviors are substantive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loads the action and ordering, and devotes the second sentence to high-value usage differentiation. Every clause earns its place with no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a relatively simple list tool with full schema coverage and no output schema, the description provides enough to call it correctly: resource, ordering, parameter semantics via schema, and a usage caveat. It could be more explicit about the exact response shape, but the behavior described is sufficient for correct invocation.
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 all four parameters are already documented in the input schema. The description reinforces that the 'channel' parameter refers to the channel whose uploads are listed, but does not add new parameter-level meaning beyond the schema. 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 starts with a specific verb and resource: 'List a channel's most recent uploads, newest first.' It clearly distinguishes itself from the sibling search_videos by positioning this as the channel-uploads listing tool, so an agent knows exactly what it does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to prefer this tool over search_videos when fetching 'the latest videos from channel X,' and gives concrete reasons: lower quota cost (1 vs 100 units) and complete upload coverage including videos whose titles don't match a keyword. This is direct when-to-use guidance with an alternative named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_my_playlistsB
List the signed-in account's own playlists. Requires sign-in.
| Name | Required | Description | Default |
|---|---|---|---|
| page_token | No | ||
| max_results | No | 1-50 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states 'Requires sign-in,' which is a minimal behavioral note. It does not disclose pagination behavior, whether the list is ordered, whether it includes only public playlists or also private ones, or any side effects. For a read-only listing tool, the lack of behavioral context beyond sign-in is a notable gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no wasted words. The core purpose is front-loaded, and the sign-in requirement is stated efficiently. It earns a 4 for being concise and clear, though it could add a bit more useful context without becoming bloated.
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 annotations, no output schema, and a partially documented parameter, the description is incomplete. An agent would not know what the response looks like, how pagination works, or what page_token means. For a simple listing tool, this is a moderate gap, but the lack of any return-format or pagination guidance makes it insufficient for confident invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50%: max_results has a description ('1-50') but page_token has none. The description does not add any parameter-level meaning beyond the schema. With 50% coverage, the description should compensate for the undocumented page_token, but it does not. Baseline 3 is appropriate because the schema covers half the parameters, but the gap remains.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List') and resource ('the signed-in account's own playlists'), which clearly distinguishes it from sibling tools like search_videos or get_playlist_items. It does not explicitly name a sibling, but the scope is clear enough to differentiate.
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 usage context: it requires sign-in and is for the signed-in account's own playlists. It does not explicitly state when to use this tool versus alternatives like get_playlist_items or list_my_subscriptions, nor does it mention exclusions. The sign-in requirement is a useful contextual cue but not a full usage guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_my_subscriptionsB
List the channels the signed-in account is subscribed to. Requires sign-in.
| Name | Required | Description | Default |
|---|---|---|---|
| page_token | No | nextPageToken from a previous call | |
| max_results | No | 1-50 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden of behavioral disclosure. It states the auth requirement and scoping, but omits pagination behavior, response shape, error semantics, and any explicit statement about read-only safety.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler; the main purpose is stated first and the auth prerequisite is front-loaded. Every word contributes to describing the 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?
This is a simple list operation, but with no output schema the description should provide more context about what the response contains and how pagination flows. The schema covers the page_token parameter, but the description alone leaves the return structure and retrieval pattern under-specified.
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%, with both page_token and max_results fully described in the input schema. The description adds no parameter-specific detail, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the verb ('List'), the resource ('channels the signed-in account is subscribed to'), and the auth context. It allows an agent to distinguish this from siblings like get_subscription_feed based on the channel focus, though it does not explicitly name any alternative.
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 only usage guidance is 'Requires sign-in,' which is a prerequisite but not a directive about when to select this tool versus alternatives such as get_subscription_feed or list_channel_uploads. No exclusions or condition-based routing is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_my_uploadsB
List videos uploaded by the signed-in account, newest first. Requires sign-in.
| Name | Required | Description | Default |
|---|---|---|---|
| page_token | No | ||
| max_results | No | 1-50 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the sign-in requirement and ordering, but does not mention pagination behavior, rate limits, or what happens if the user is not signed in. For a read-only list operation, the lack of explicit safety disclosure is a gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler. The core action and ordering are front-loaded, and the sign-in requirement is stated efficiently.
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 list tool with two optional parameters and no output schema, the description is mostly adequate. However, it lacks guidance on pagination behavior and error handling for the sign-in requirement, which an agent would need for robust invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50%: max_results has a description ('1-50') but page_token has none. The description adds the 'newest first' ordering context, which helps interpret pagination, but it does not explain page_token semantics beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List'), resource ('videos uploaded by the signed-in account'), and ordering ('newest first'). It clearly distinguishes from siblings like list_channel_uploads and search_videos, though it doesn't explicitly name them.
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 usage context: it is for the signed-in account's uploads, and it notes 'Requires sign-in.' It does not explicitly state when to use alternatives like list_channel_uploads or search_videos, but the scope is clear enough for an agent to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_my_video_captionsA
List the official caption tracks of a video owned by the signed-in account, including drafts that are not publicly served. Requires sign-in and video ownership.
| Name | Required | Description | Default |
|---|---|---|---|
| video | Yes | Video ID or URL of a video you own |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description takes on the full disclosure burden. It states the sign-in and ownership requirements and the non-public draft behavior, which are key behavioral traits. It does not detail error handling or return format, but for a simple read operation these are less critical.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences with no redundancy, front-loading the main purpose and adding the draft inclusion and auth requirements without filler. Every sentence 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 single-parameter list operation with no output schema, the description covers the essential usage: what it lists, ownership scope, and auth prerequisite. It doesn't specify the exact output structure, but an agent can infer it will return caption track metadata; the simplicity of the tool makes this 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%: the parameter 'video' is described as 'Video ID or URL of a video you own'. The description reiterates the ownership aspect but adds no new syntax or format details beyond the schema, so it sits at the baseline for high schema coverage.
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 (list), resource (official caption tracks), and ownership scope (video owned by the signed-in account). It also mentions the inclusion of drafts, which distinguishes it from siblings like get_transcript or download_my_caption, making the purpose precise.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for use: it is for owned videos and explicitly notes that it includes drafts not publicly served. It doesn't name alternatives explicitly, but the ownership requirement and draft inclusion indirectly differentiate it from other caption-related tools, so no exclusions are needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_transcript_languagesA
List the caption tracks available for a video (language, human-written vs auto-generated, translatable) plus the languages YouTube can machine-translate into. Use before get_transcript when unsure.
| Name | Required | Description | Default |
|---|---|---|---|
| video | Yes | Video ID or URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description helpfully enumerates the shape of what the tool returns: human-written vs auto-generated captions and translatable languages. It could add a note about read-only behavior or missing captions, but the single verb 'List' makes the non-mutating nature reasonably clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler. The first sentence front-loads the exact output categories, the second provides actionable selection guidance by referencing get_transcript.
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 listing/discovery tool, the description covers what data to expect and when to call it, which is enough for an agent to use it correctly. It does not specify auth requirements or behavior when no captions exist, but those are secondary for this 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?
The schema already describes the only parameter ('Video ID or URL') with 100% coverage, so the description does not need to add parameter-level detail. No extra semantic guidance is provided, which is acceptable at the 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 what the tool does: lists available caption tracks (language, human-written vs auto-generated, translatable) and the languages YouTube can machine-translate into. It is unambiguous and distinct from transcript-fetching or metadata tools.
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 tells the agent when to use this tool—'Use before get_transcript when unsure'—and names the relevant sibling tool, which is the main decision it needs to make.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_videosA
Full-text search across YouTube. Costs 100 quota units per call, so use list_channel_uploads instead when you just want a channel's recent videos. Requires sign-in or YOUTUBE_API_KEY. Passing channel_id without query is routed to the cheap uploads path automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| order | No | relevance | |
| query | No | Search terms. Optional if channel_id is given. | |
| channel_id | No | Restrict results to this channel | |
| max_results | No | 1-50 | |
| published_after | No | ISO 8601 datetime, e.g. 2026-01-01T00:00:00Z |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It goes beyond the basic read-only implication by disclosing the concrete quota cost, the sign-in/API-key requirement, and the surprising auto-routing behavior. These are exactly the kind of behavioral traits an agent needs to compare with alternatives before calling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no filler: purpose, cost-plus-alternative, auth, and routing. Each sentence earns its place and the most important differentiator (cost/alternative) comes first.
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 lack of annotations and output schema, the description covers the crucial facts: what it does, when not to use it, auth, cost, and a non-obvious parameter interaction. It doesn't spell out the exact return format, but the primary invocation requirements are 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?
With 80% schema description coverage, the baseline is 3. The description adds valuable inter-parameter behavior — query is optional when channel_id is present, and channel_id without query routes to the cheap uploads path. This goes beyond the schema's individual parameter descriptions and explains how parameters interact.
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 says 'Full-text search across YouTube' — a specific verb and resource. It distinguishes the tool from list_channel_uploads by drawing a sharp contrast: use that when you only want recent channel uploads. An agent can identify the tool's role without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs when to avoid this tool and use list_channel_uploads instead, states the auth requirements up front, and explains the automatic routing when channel_id is given without query. Nothing is left for the agent to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
13 tool updates
v1.0.0- First observed
download_my_caption - First observed
get_auth_status - First observed
get_playlist_items - First observed
get_subscription_feed - First observed
get_transcript - First observed
get_video_info - First observed
list_channel_uploads - First observed
list_my_playlists - First observed
list_my_subscriptions - First observed
list_my_uploads - First observed
list_my_video_captions - First observed
list_transcript_languages - First observed
search_videos
TDQS
Scored across 13 tools
Most tools are distinct (get_transcript, get_video_info, search_videos, playlists, etc.), but overlap exists: get_transcript vs download_my_caption both fetch captions, though ownership differs; list_my_uploads and list_channel_uploads are similar but differ by account vs channel. The distinctions are clear enough but require careful reading.
The naming follows a consistent verb_noun pattern: get_*, list_*, search_*, download_*. The pattern is consistent, with only a minor deviation in 'download_my_caption' vs 'get_transcript' where 'get' and 'download' both imply fetching, but still readable.
13 tools is well within the ideal range for a YouTube-focused server. Each tool serves a specific purpose (transcripts, video info, channel uploads, playlists, subscriptions, auth), and none seem redundant or unnecessary.
The server covers core YouTube interactions: searching, video metadata, transcripts, channel uploads, playlists, and subscriptions. Minor gaps include lack of tools for liking/disliking videos, commenting, or managing playlists (create/delete), but these are not essential for read-only and summarize use cases.
Maintenance
Related MCP Connectors
YouTube transcripts, search, channel/playlist listings and upload tracking for AI agents. No signup.
YouTube transcripts, search, channel browsing, and playlists for AI agents via MCP.
YouTube transcripts, search, channels, playlists and bulk transcript jobs for AI agents. 14 tools.
YouTube public video, comment, reply, channel, search, and speech-to-text transcript tools.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to search videos, read channels, browse playlists, fetch comments, and get transcripts from YouTube using the YouTube Data API v3 and InnerTube API for captions.2GPL 3.0
- AlicenseAqualityAmaintenanceConnect AI assistants to YouTube: search, transcripts, metadata, and more.19766MIT
- AlicenseAqualityDmaintenanceEnables AI tools to access YouTube content, including transcript extraction, video/channel info, and search.414MIT
- AlicenseAqualityBmaintenanceEnables AI agents to read transcripts of any public video, research channels, analyze performance, read comments, and manage multiple owned channels.1619MIT