Skip to main content
Glama

SubDownload MCP Server

SubDownload exposes YouTube as an MCP-native data source. Connect once via OAuth and your AI agent gets tools to summarize videos, fetch full transcripts (including videos without captions, via AI ASR), search channels and playlists, and save everything into a per-user knowledge base for cross-session recall.

The recommended setup is to point your MCP client directly at the hosted endpoint above and authenticate via OAuth — see "Quick connect" below. This repo also ships a thin stdio proxy (Node + Docker) for environments that prefer a local subprocess.

Auth

OAuth 2.1 with Dynamic Client Registration (RFC 7591). No pre-shared client_id or client_secret — your MCP client registers itself on first connect.

Discovery (RFC 9728):

  1. POST to /mcp without a token returns 401 plus a WWW-Authenticate header pointing to /.well-known/oauth-protected-resource

  2. That document points to the authorization server (https://api.subdownload.com)

  3. The MCP client follows the standard authorize → callback → token flow with PKCE

API-key alternative: every account at https://subdownload.com/account exposes a Bearer token for clients that don't support OAuth.

Related MCP server: YouTube Transcript MCP Server

Tools

Tool

What it does

search_youtube

Keyword search across YouTube

fetch_video_info

Video metadata (title, channel, duration, view count)

fetch_transcript

Full transcript with timestamps

transcribe_video

Generate a transcript with AI ASR for videos that have no captions

get_asr_task

Poll an in-progress AI transcription job

resolve_channel

Look up a channel by handle, URL, or ID

list_channel_videos

List videos on a channel

get_channel_latest_videos

Latest videos for a channel

search_channel_videos

Search within a single channel

list_playlist_videos

List the contents of a playlist

save_to_library

Save a video summary or transcript to your personal knowledge base

list_library

Browse your saved knowledge base

get_library_item

Fetch a single saved item

Quick connect

Claude Desktop / Cursor / Windsurf / any OAuth-capable MCP client

{
  "mcpServers": {
    "subdownload": {
      "url": "https://api.subdownload.com/mcp"
    }
  }
}

The first time you use it, the client triggers OAuth and you sign in with Google or LINUX DO. Free credits on signup — no card required.

Bearer-token clients

{
  "mcpServers": {
    "subdownload": {
      "url": "https://api.subdownload.com/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_KEY"
      }
    }
  }
}

Grab your API key from your account page.

Local stdio proxy (Docker / npm)

For clients that prefer a subprocess transport, this repo ships a thin Node proxy that forwards tools/call to the hosted endpoint with your API key.

# Docker
docker build -t subdownload-mcp .
docker run --rm -i -e SUBDOWNLOAD_API_KEY=YOUR_API_KEY subdownload-mcp

# Or via Node directly
npm install
SUBDOWNLOAD_API_KEY=YOUR_API_KEY npm start

Client config example:

{
  "mcpServers": {
    "subdownload": {
      "command": "docker",
      "args": ["run", "--rm", "-i", "-e", "SUBDOWNLOAD_API_KEY", "subdownload-mcp"],
      "env": { "SUBDOWNLOAD_API_KEY": "YOUR_API_KEY" }
    }
  }
}

Tool schemas are declared inline so introspection (initialize, tools/list) works without credentials; tools/call requires SUBDOWNLOAD_API_KEY.

Pricing

Free credits on signup. Pro: 5,000 credits per month. See https://subdownload.com/pricing.

Support

License

MIT (applies to this documentation repository; the SubDownload service itself is hosted SaaS — see https://subdownload.com/terms).

Available Tools

13 tools
fetch_transcriptA
Read-only

Fetch the existing official transcript (subtitles/captions) of a YouTube video, with per-segment timestamps and language detected. Errors with NO_CAPTIONS if the video has no captions — fall back to transcribe_video in that case to generate one with AI ASR. This call is free.

ParametersJSON Schema
NameRequiredDescriptionDefault
video_idYesYouTube video ID (e.g. 'dQw4w9WgXcQ') or full YouTube URL.
langNoISO 639-1 language code to select among multilingual captions (e.g. 'en', 'zh', 'ja'). Omit for the video's default language.
saveNoWhen true, also save the video to the user's Library in the same call. Bookmarks the meta row and flips has_asr when the transcript was produced by our ASR. Does NOT upload a summary — use save_to_library with kind='summary' or kind='both' for that.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate read-only and non-destructive behavior. The description adds context about the error case (NO_CAPTIONS), return data (segments, timestamps, language), and that it's free, 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is extremely concise with only 2-3 sentences, no redundancies, and front-loads the core purpose and fallback. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description outlines the expected return (segments, timestamps, language) and error behavior. It could be more detailed about the output structure, but is sufficient for a fetch operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for video_id, lang, and save. The description does not add new meaning to parameters beyond what the schema provides, meeting the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool fetches existing official transcript with timestamps and language detection. It distinguishes from sibling transcribe_video by explicitly identifying it as a fallback when no captions exist.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Description provides explicit guidance: use this tool for existing captions, and fall back to transcribe_video if a NO_CAPTIONS error occurs. Also mentions the call is free, aiding decision-making.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_video_infoA
Read-only

Fetch consolidated YouTube video metadata with numeric types — title, channel, duration, view count, publish date, thumbnail, description, captions availability. Does NOT include the transcript itself; call fetch_transcript or transcribe_video for that. Cheap, fast, free.

ParametersJSON Schema
NameRequiredDescriptionDefault
video_idYes11-char YouTube video ID (e.g. 'dQw4w9WgXcQ') or full URL (watch, youtu.be, shorts, embed, live).

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so agent knows it's a read-only operation. Description adds behavioral context: does NOT include transcript (preventing false expectations), and labels it 'cheap, fast, free' for cost/speed. 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with no wasted words. Front-loaded with the tool's main purpose and key return fields, then provides exclusion and efficiency notes. Perfectly sized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given single parameter and no output schema, description fully covers what the tool returns, what it excludes, and its cost profile (cheap, fast, free). No gaps for an agent to misinterpret.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has 100% coverage with a clear description of the video_id parameter (accepts 11-char ID or full URL). Description does not add additional parameter meaning beyond what the schema provides, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it fetches consolidated YouTube video metadata with specific fields listed (title, channel, duration, etc.). Distinguishes from sibling tools by explicitly stating it does not include transcript and redirects to fetch_transcript or transcribe_video.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to use this tool (for metadata) and when not to (for transcript). Names alternative siblings fetch_transcript and transcribe_video. Also notes it's cheap, fast, and free, guiding usage expectations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_asr_taskA
Read-only

Poll the status of an ASR task created by transcribe_video. Returns one of queued, downloading, transcribing, finalizing, done, or failed. When status is done, includes the full transcript with timestamps. Recommended polling interval: 3-5 seconds. Free — does not consume credits.

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idYesTask ID returned by transcribe_video.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true and destructiveHint=false. The description adds value by listing all possible status values ('queued', 'downloading', 'transcribing', 'finalizing', 'done', 'failed'), explaining that a full transcript with timestamps is included when status is 'done', and recommending a polling interval. It does not mention rate limits or idempotency, but overall it provides good 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences: first states purpose, second lists statuses, third gives polling interval and cost. No fluff, front-loaded with the key action. Each sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple polling tool with one parameter and no output schema, the description covers status outcomes, behavior when done, and polling interval. It lacks error handling details (e.g., what happens with invalid task_id), but overall it is sufficiently complete for an AI agent to use correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with the single parameter 'task_id' described as 'Task ID returned by transcribe_video.' The description does not add additional meaning beyond what the schema already provides. Baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Poll the status of an ASR task created by transcribe_video.' It specifies the verb (poll), resource (ASR task), and links to the creating tool. This differentiates it from siblings like fetch_transcript (which retrieves final transcripts) and transcribe_video (which creates tasks).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage guidance: it is for polling status, recommends a polling interval of 3-5 seconds, and notes it is free (no credit consumption). It implicitly indicates when to use (after transcribe_video) but does not explicitly state when not to use or cite alternatives. The cost disclosure is an added benefit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_channel_latest_videosA
Read-only

Get the most recent videos from a YouTube channel — convenience wrapper over list_channel_videos with no pagination. Best for 'what did this creator publish recently?' style queries.

ParametersJSON Schema
NameRequiredDescriptionDefault
channelYes@handle (e.g. '@mkbhd'), channel URL, or UC... channel ID.

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false; description adds no pagination and wrapper behavior but does not detail return limits or ordering. Adequate given annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences, front-loaded with the action, no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple 1-parameter read-only tool with no output schema, the description covers purpose, usage, and behavioral context sufficiently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has 100% description coverage for the single parameter; description adds no additional meaning beyond schema. Baseline score applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description uses specific verb ('Get') and resource ('most recent videos from a YouTube channel'), clearly distinguishing it from sibling `list_channel_videos` by stating it's a convenience wrapper without pagination.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'convenience wrapper over list_channel_videos with no pagination' and suggests a typical query style, implying when to use. Does not explicitly state when not to use, but the context is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_library_itemA
Read-only

Read a saved Library item with its transcript and AI summary inline (when available). Use after list_library to fetch the full content the user saved. Free.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesLibrary item id (returned by list_library or save_to_library).
localeNoSummary locale to fetch (e.g. 'en', 'zh'). Defaults to 'en'.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, so the description adds value by mentioning the inline transcript and AI summary. This goes beyond the annotation to specify what the read operation yields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the main action, and immediately followed by usage guidance. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema, the description explains the return content (transcript and summary) and usage context. It lacks error or permission details but is sufficient for basic usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema provides 100% coverage with descriptions for both parameters (id, locale). The description adds no extra parameter info beyond the schema, so baseline score is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool reads a saved Library item, including its transcript and AI summary. It distinguishes from list_library by specifying it fetches full content.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Use after list_library to fetch the full content,' providing clear usage context. It does not list exclusions or alternatives, but the guidance is direct.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_channel_videosA
Read-only

List all videos from a YouTube channel ordered by publish date (newest first), with pagination. Returns up to 30 per page plus a continuation token if more results exist. For just the most recent handful, prefer get_channel_latest_videos for simplicity.

ParametersJSON Schema
NameRequiredDescriptionDefault
channelNo@handle, channel URL, or UC... channel ID. Required for the first page; omit on subsequent pages and pass `continuation` instead.
continuationNoPagination token from a previous response's `continuation` field. Omit for the first page.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds behavioral context: returns up to 30 per page, uses a continuation token for pagination, and orders by publish date newest first. This goes beyond 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no wasted words. Front-loaded with the core action and key details (ordering, pagination, page size, alternative). Very efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description mentions the response includes up to 30 items and a continuation token. It covers purpose, usage, pagination, and alternatives. Lacks explicit mention of returned fields (e.g., video IDs, titles), but for a simple list tool this is adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with detailed parameter descriptions. The tool description adds usage guidance: when to omit 'channel' (on subsequent pages using continuation). This provides extra context beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('List'), the resource ('all videos from a YouTube channel'), the ordering ('newest first'), and pagination. It explicitly differentiates from the sibling tool 'get_channel_latest_videos' by noting that tool is simpler for a few recent videos.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly tells when not to use this tool ('for just the most recent handful, prefer get_channel_latest_videos') and implies when to use it (when you need all videos or pagination). This provides clear guidance on alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_libraryA
Read-only

List videos the user has saved to their Library (transcripts + summaries). Supports substring search on title/author, favorites filter, and pagination. Returns recently saved items first. Scoped to the calling user's data only.

ParametersJSON Schema
NameRequiredDescriptionDefault
favoriteNoWhen true, return only items the user has favorited.
qNoSubstring match on title and author.
limitNoMax items per page (1-100, default 20).
offsetNoPagination offset (number of items to skip).

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark readOnlyHint=true and destructiveHint=false, indicating safe reading. The description adds behavioral details: returns recently saved items first, supports substring search and favorites filter. This complements 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences: first states purpose and content type, second lists key features. It is front-loaded with the core action and avoids superfluous details, making it easy for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description explains ordering (recently saved first) and scope, but does not detail the structure of returned items beyond mentioning transcripts and summaries. It is reasonably complete for a list tool with well-documented parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 parameters. The description summarizes parameter behavior (substring search, favorites filter, pagination) but does not add significant new meaning beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states "List videos the user has saved to their Library" with specific verb (list) and resource (Library videos). It adds details like transcripts, summaries, and scoping, making it distinct from sibling tools such as list_channel_videos or search_youtube.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description specifies the scope ("Scoped to the calling user's data only") and lists supported features (substring search, favorites filter, pagination). It implicitly tells when to use this tool (for user's own library) but does not explicitly contrast with alternatives or state 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.

list_playlist_videosA
Read-only

List videos in a YouTube playlist in order, with pagination. Returns video metadata and position within the playlist. Works for any public or unlisted playlist exposed by its URL/ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
playlistNoPlaylist URL or ID (typically starts with 'PL', 'UU', 'LL', or 'FL'). Required for the first page.
continuationNoPagination token from a previous response's `continuation` field. Omit for the first page.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Description supplements annotations by disclosing pagination behavior, the order of returned videos, and that it works for public/unlisted playlists. This goes beyond the readOnlyHint and destructiveHint annotations, providing useful 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short, front-loaded sentences each add unique value: listing operation, pagination, return info, and scope. No extraneous content. Highly efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and moderate complexity, the description covers purpose, scope, and pagination adequately. It mentions returning 'video metadata and position' but is slightly vague on exact fields. Still sufficient for an AI to use effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema descriptions already cover both parameters (playlist and continuation) with full detail. The tool description adds no new information about parameter semantics beyond 'pagination' context, which is already implied by the schema. With 100% schema coverage, baseline is 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool lists videos in a YouTube playlist in order with pagination, and specifies it returns video metadata and position. The verb 'list' and resource 'videos in a YouTube playlist' are explicit, and it distinguishes itself from siblings like search_youtube and list_channel_videos.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description indicates when to use the tool: for any public or unlisted playlist identified by URL/ID. It implies that this is the relevant tool for playlist content, but does not explicitly discuss when not to use it or compare against alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

resolve_channelA
Read-only

Resolve a YouTube @handle, channel URL, video URL, or raw channel ID into canonical channel info (channel ID, name, handle, subscriber count, video count, avatar). Call this first when you only have a handle or URL but need a channel ID for the other channel-scoped tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYes@handle (e.g. '@MrBeast'), channel URL, video URL, or UC... channel ID. All common forms are accepted.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true, so the description doesn't need to restate safety. It adds value by detailing what the tool returns (channel ID, name, stats). 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two efficient sentences: first explains functionality and output, second gives usage guidance. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one parameter and no output schema, the description fully covers purpose, output, and usage context. Minor omissions (e.g., error handling) are acceptable given the tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter is fully described in the schema with examples. The tool description adds no additional meaning beyond the schema, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool resolves various input forms into canonical channel info, listing specific output fields. It distinguishes from sibling tools by focusing on resolution of handles/URLs to IDs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly instructs 'Call this first when you only have a handle or URL but need a channel ID for the other channel-scoped tools,' providing clear when-to-use and linking to alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

save_to_libraryA
Idempotent

Save a video to the authenticated user's Library. Three modes via kind: 'asr' bookmarks the video and flips has_asr (use after a successful transcribe_video → fetch_transcript flow); 'summary' uploads a summary blob; 'both' does both at once. Idempotent: saving the same video twice updates the existing entry.

ParametersJSON Schema
NameRequiredDescriptionDefault
video_idYesYouTube video ID (11 chars).
kindYes'asr' (bookmark + flip has_asr), 'summary' (upload summary text), or 'both'.
titleNoVideo title (for display in the user's Library list).
authorNoChannel / author name.
thumbnailNoThumbnail URL.
video_urlNoFull YouTube URL.
languageNoVideo language code (ISO 639-1).
textNoSummary text. REQUIRED when kind='summary' or kind='both'. Plain text or markdown — use the `format` param to declare which.
localeNoSummary locale (e.g. 'en', 'zh'). Used with kind='summary' or kind='both'.
formatNoSummary format: 'markdown' (default) or 'text'. Use 'markdown' if your text contains **bold**, bullets, headings, or code fences so the web UI renders it; use 'text' for plain prose.
modelNoOptional model identifier, e.g. 'claude-opus-4'.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations (idempotentHint=true, readOnlyHint=false), the description adds meaningful behavioral details: idempotent updates existing entry, effect of each mode (bookmarks, flips has_asr, uploads summary), and that 'text' is required for summary modes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences that front-load the main action, then elaborate modes and idempotency. Every sentence adds necessary information without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers modes, idempotency, and prerequisites for 'asr'. It lacks information about the response/return value (no output schema), but otherwise is adequate for a save operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema already provides 100% coverage with descriptions. The description adds value by explaining the `kind` values and their usage, and clarifying that `text` is required for 'summary'/'both' and giving guidance on `format`.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Save a video to the authenticated user's Library' with specific verb and resource. It distinguishes three modes via `kind`, making the purpose distinct from sibling tools like fetch_transcript or list_library.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use each mode, e.g., 'asr' after a transcribe_video -> fetch_transcript flow, and mentions idempotent behavior. It does not explicitly exclude alternatives or state when not to use, but provides clear context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_channel_videosA
Read-only

Search for specific videos within a single YouTube channel. Restricts results to the given channel. Use after resolve_channel if starting from a handle. Useful for 'find Karpathy's video about backpropagation' style queries.

ParametersJSON Schema
NameRequiredDescriptionDefault
channelYes@handle, channel URL, or UC... channel ID.
qYesSearch query (matched against video title and description within the channel).
limitNoMax results (1-50, default 30).

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already disclose read-only behavior (readOnlyHint: true) and non-destructive nature. The description adds the behavioral detail of restricting results to a single channel, but does not provide further behavioral context (e.g., rate limits, pagination). Since annotations cover safety, a score of 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise—two sentences that front-load the purpose and usage context. Every sentence adds value: the first states what it does, the second gives a practical example and workflow hint. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (3 scalar parameters, no output schema) and rich annotations (readOnly, idempotent, openWorld), the description is sufficiently complete. It mentions a legitimate use case and integration with resolve_channel, which is helpful. Slightly more detail on return format or error conditions would elevate it further, but it's already strong.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers all three parameters (channel, q, limit) with clear descriptions, achieving 100% coverage. The description adds no additional meaning beyond summarizing the channel restriction, so it meets the baseline expectation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool searches for specific videos within a single YouTube channel, using a specific verb ('Search') and resource ('videos within a single YouTube channel'). It distinguishes from sibling tools like search_youtube by emphasizing channel restriction and suggesting a use case (e.g., 'find Karpathy's video about backpropagation').

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit context: 'Use after resolve_channel if starting from a handle' and 'Restricts results to the given channel,' which guides the agent on when to use it. While it doesn't explicitly state alternatives or when not to use, the context is clear enough for correct selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_youtubeA
Read-only

Search YouTube globally for videos, channels, or playlists on any topic. Returns up to 50 results with metadata. Use this for topic-based discovery when the user has not specified a channel — for searching within a known channel use search_channel_videos instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
qYesSearch query (same syntax as YouTube's search bar, e.g. 'rust async tutorial', 'lex fridman dario amodei').
typeNoSearch type: 'video', 'channel', or 'playlist'. Default: 'video'.
limitNoMax results (1-50, default 20).

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds key behavioral detail (returns up to 50 results with metadata) beyond annotations which already indicate read-only and non-destructive nature. 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two focused sentences: first states purpose and constraints, second gives usage guidance. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the annotations (readOnlyHint true, etc.) and thorough schema, the description is complete. It covers result limits, metadata, and differentiates from sibling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers all 3 parameters with descriptions; the tool description does not add significant new meaning beyond the schema, so baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states 'Search YouTube globally' with specific resource types (videos, channels, playlists). Distinguishes from sibling search_channel_videos by noting global vs within-channel context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly advises when to use (topic-based discovery without channel) and when to use alternative (search_channel_videos for within a known channel).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

transcribe_videoA
Idempotent

Start an asynchronous AI ASR (Whisper) transcription of a YouTube video. Returns immediately with a task_id and estimated_wait_seconds; the actual transcription runs in the background. Poll status with get_asr_task. Use this when fetch_transcript returned NO_CAPTIONS or when the video has no captions. Costs 5 credits, debited only on successful completion.

ParametersJSON Schema
NameRequiredDescriptionDefault
video_urlYesYouTube URL (watch, youtu.be, shorts, or embed form). Full URL preferred.
langNoOptional language hint (ISO 639-1, e.g. 'en', 'zh'). Omit to auto-detect.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses async behavior (returns immediately with task_id and estimated_wait_seconds), background processing, need to poll with get_asr_task, and cost of 5 credits debited on success. These go beyond annotations which only provide hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each earning its place. First sentence states action and nature, second sentence tells what returns and follow-up, third sentence gives condition and cost. No waste, front-loaded with key information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers essential aspects: action, async nature, return values, next steps, usage condition, and cost. Missing some edge cases like error handling or timeouts, but overall sufficient for a tool with annotations and schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has 100% coverage with detailed descriptions for both parameters. The tool description adds no new parameter meaning beyond what the schema already provides, so baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states 'Start an asynchronous AI ASR (Whisper) transcription of a YouTube video.' Specifies verb, resource, and async nature. Distinguishes from siblings like fetch_transcript and get_asr_task.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'Use this when fetch_transcript returned NO_CAPTIONS or when the video has no captions.' Provides context on when to use versus alternatives, and instructs to poll with get_asr_task.

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. Dates show when Glama detected each change.

  1. 13 tool updatesv0.1.2
    • Changedfetch_transcript6 fields changed
      • addedInput schema / properties / lang
        Added value: +{
        +  "description": "ISO 639-1 language code to select among multilingual captions (e.g. 'en', 'zh', 'ja'). Omit for the video's default language.",
        +  "type": "string"
        +}
      • removedInput schema / properties / language
        Removed value: -{
        -  "description": "Optional ISO 639-1 language code to select among multilingual captions (e.g., 'en', 'zh', 'es', 'ja'). If omitted, the video's primary caption track is returned.",
        -  "type": "string"
        -}
      • addedInput schema / properties / save
        Added value: +{
        +  "description": "When true, also save the video to the user's Library in the same call. Bookmarks the meta row and flips has_asr when the transcript was produced by our ASR. Does NOT upload a summary — use save_to_library with kind='summary' or kind='both' for that.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / video_id
        Added value: +{
        +  "description": "YouTube video ID (e.g. 'dQw4w9WgXcQ') or full YouTube URL.",
        +  "minLength": 5,
        +  "type": "string"
        +}
      • removedInput schema / properties / video_id_or_url
        Removed value: -{
        -  "description": "YouTube video ID or any URL form (watch / youtu.be / shorts).",
        -  "minLength": 5,
        -  "type": "string"
        -}
      • changedInput schema / required
        Previous value: -[
        -  "video_id_or_url"
        -]New value: +[
        +  "video_id"
        +]
    • Changedfetch_video_info3 fields changed
      • addedInput schema / properties / video_id
        Added value: +{
        +  "description": "11-char YouTube video ID (e.g. 'dQw4w9WgXcQ') or full URL (watch, youtu.be, shorts, embed, live).",
        +  "minLength": 5,
        +  "type": "string"
        +}
      • removedInput schema / properties / video_id_or_url
        Removed value: -{
        -  "description": "YouTube video ID (e.g., 'dQw4w9WgXcQ') or any YouTube URL form (watch URL, youtu.be short link, or shorts URL). Both formats are accepted.",
        -  "minLength": 5,
        -  "type": "string"
        -}
      • changedInput schema / required
        Previous value: -[
        -  "video_id_or_url"
        -]New value: +[
        +  "video_id"
        +]
    • Changedget_asr_task1 field changed
      • changedInput schema / properties / task_id / description
        Previous value: -"Task ID returned from a previous transcribe_video call."New value: +"Task ID returned by transcribe_video."
    • Changedget_channel_latest_videos4 fields changed
      • addedInput schema / properties / channel
        Added value: +{
        +  "description": "@handle (e.g. '@mkbhd'), channel URL, or UC... channel ID.",
        +  "minLength": 1,
        +  "type": "string"
        +}
      • removedInput schema / properties / channel_id
        Removed value: -{
        -  "description": "Canonical channel ID starting with 'UC'.",
        -  "pattern": "^UC[A-Za-z0-9_-]+$",
        -  "type": "string"
        -}
      • removedInput schema / properties / limit
        Removed value: -{
        -  "description": "Max number of recent videos to return (default 10, max 50).",
        -  "maximum": 50,
        -  "minimum": 1,
        -  "type": "integer"
        -}
      • changedInput schema / required
        Previous value: -[
        -  "channel_id"
        -]New value: +[
        +  "channel"
        +]
    • Changedget_library_item4 fields changed
      • addedInput schema / properties / id
        Added value: +{
        +  "description": "Library item id (returned by list_library or save_to_library).",
        +  "type": "number"
        +}
      • removedInput schema / properties / item_id
        Removed value: -{
        -  "description": "Library item ID (returned by list_library or save_to_library).",
        -  "minLength": 1,
        -  "type": "string"
        -}
      • addedInput schema / properties / locale
        Added value: +{
        +  "description": "Summary locale to fetch (e.g. 'en', 'zh'). Defaults to 'en'.",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "item_id"
        -]New value: +[
        +  "id"
        +]
    • Changedlist_channel_videos5 fields changed
      • addedInput schema / properties / channel
        Added value: +{
        +  "description": "@handle, channel URL, or UC... channel ID. Required for the first page; omit on subsequent pages and pass `continuation` instead.",
        +  "type": "string"
        +}
      • removedInput schema / properties / channel_id
        Removed value: -{
        -  "description": "Canonical channel ID starting with 'UC' (use resolve_channel if you only have a handle).",
        -  "pattern": "^UC[A-Za-z0-9_-]+$",
        -  "type": "string"
        -}
      • addedInput schema / properties / continuation
        Added value: +{
        +  "description": "Pagination token from a previous response's `continuation` field. Omit for the first page.",
        +  "type": "string"
        +}
      • removedInput schema / properties / page_token
        Removed value: -{
        -  "description": "Opaque pagination cursor from a previous response's `next_page_token`. Omit for the first page.",
        -  "type": "string"
        -}
      • removedInput schema / required
        Removed value: -[
        -  "channel_id"
        -]
    • Changedlist_library7 fields changed
      • addedInput schema / properties / favorite
        Added value: +{
        +  "description": "When true, return only items the user has favorited.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / limit / description
        Previous value: -"Max items to return (default 20, max 100)."New value: +"Max items per page (1-100, default 20)."
      • changedInput schema / properties / limit / type
        Previous value: -"integer"New value: +"number"
      • addedInput schema / properties / offset
        Added value: +{
        +  "description": "Pagination offset (number of items to skip).",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / q
        Added value: +{
        +  "description": "Substring match on title and author.",
        +  "type": "string"
        +}
      • removedInput schema / properties / query
        Removed value: -{
        -  "description": "Optional free-text search; matched against item title, channel, and tags.",
        -  "type": "string"
        -}
      • removedInput schema / properties / tag
        Removed value: -{
        -  "description": "Optional exact-match tag filter (single tag).",
        -  "type": "string"
        -}
    • Changedlist_playlist_videos4 fields changed
      • addedInput schema / properties / continuation
        Added value: +{
        +  "description": "Pagination token from a previous response's `continuation` field. Omit for the first page.",
        +  "type": "string"
        +}
      • addedInput schema / properties / playlist
        Added value: +{
        +  "description": "Playlist URL or ID (typically starts with 'PL', 'UU', 'LL', or 'FL'). Required for the first page.",
        +  "type": "string"
        +}
      • removedInput schema / properties / playlist_id
        Removed value: -{
        -  "description": "YouTube playlist ID (typically starts with 'PL', 'UU', 'LL', or 'FL').",
        -  "minLength": 2,
        -  "type": "string"
        -}
      • removedInput schema / required
        Removed value: -[
        -  "playlist_id"
        -]
    • Changedresolve_channel3 fields changed
      • removedInput schema / properties / identifier
        Removed value: -{
        -  "description": "Channel identifier in any common form: handle (`@mkbhd`), vanity URL (`youtube.com/@mkbhd`), channel URL (`youtube.com/channel/UC...`), or raw channel ID (`UC...`).",
        -  "minLength": 1,
        -  "type": "string"
        -}
      • addedInput schema / properties / input
        Added value: +{
        +  "description": "@handle (e.g. '@MrBeast'), channel URL, video URL, or UC... channel ID. All common forms are accepted.",
        +  "minLength": 1,
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "identifier"
        -]New value: +[
        +  "input"
        +]
    • Changedsave_to_library14 fields changed
      • addedInput schema / properties / author
        Added value: +{
        +  "description": "Channel / author name.",
        +  "type": "string"
        +}
      • addedInput schema / properties / format
        Added value: +{
        +  "description": "Summary format: 'markdown' (default) or 'text'. Use 'markdown' if your text contains **bold**, bullets, headings, or code fences so the web UI renders it; use 'text' for plain prose.",
        +  "enum": [
        +    "markdown",
        +    "text"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / kind
        Added value: +{
        +  "description": "'asr' (bookmark + flip has_asr), 'summary' (upload summary text), or 'both'.",
        +  "enum": [
        +    "asr",
        +    "summary",
        +    "both"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / language
        Added value: +{
        +  "description": "Video language code (ISO 639-1).",
        +  "type": "string"
        +}
      • addedInput schema / properties / locale
        Added value: +{
        +  "description": "Summary locale (e.g. 'en', 'zh'). Used with kind='summary' or kind='both'.",
        +  "type": "string"
        +}
      • addedInput schema / properties / model
        Added value: +{
        +  "description": "Optional model identifier, e.g. 'claude-opus-4'.",
        +  "type": "string"
        +}
      • removedInput schema / properties / tags
        Removed value: -{
        -  "description": "Optional tags for organizing the saved item (e.g., ['ai', 'paper-review']).",
        -  "items": {
        -    "minLength": 1,
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • addedInput schema / properties / text
        Added value: +{
        +  "description": "Summary text. REQUIRED when kind='summary' or kind='both'. Plain text or markdown — use the `format` param to declare which.",
        +  "type": "string"
        +}
      • addedInput schema / properties / thumbnail
        Added value: +{
        +  "description": "Thumbnail URL.",
        +  "type": "string"
        +}
      • addedInput schema / properties / title
        Added value: +{
        +  "description": "Video title (for display in the user's Library list).",
        +  "type": "string"
        +}
      • addedInput schema / properties / video_id
        Added value: +{
        +  "description": "YouTube video ID (11 chars).",
        +  "minLength": 5,
        +  "type": "string"
        +}
      • removedInput schema / properties / video_id_or_url
        Removed value: -{
        -  "description": "YouTube video ID or any URL form for the video being saved.",
        -  "minLength": 5,
        -  "type": "string"
        -}
      • addedInput schema / properties / video_url
        Added value: +{
        +  "description": "Full YouTube URL.",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "video_id_or_url"
        -]New value: +[
        +  "video_id",
        +  "kind"
        +]
    • Changedsearch_channel_videos6 fields changed
      • addedInput schema / properties / channel
        Added value: +{
        +  "description": "@handle, channel URL, or UC... channel ID.",
        +  "minLength": 1,
        +  "type": "string"
        +}
      • removedInput schema / properties / channel_id
        Removed value: -{
        -  "description": "Canonical channel ID starting with 'UC'.",
        -  "pattern": "^UC[A-Za-z0-9_-]+$",
        -  "type": "string"
        -}
      • addedInput schema / properties / limit
        Added value: +{
        +  "description": "Max results (1-50, default 30).",
        +  "maximum": 50,
        +  "minimum": 1,
        +  "type": "number"
        +}
      • addedInput schema / properties / q
        Added value: +{
        +  "description": "Search query (matched against video title and description within the channel).",
        +  "minLength": 1,
        +  "type": "string"
        +}
      • removedInput schema / properties / query
        Removed value: -{
        -  "description": "Search keywords (matched against video title and description within the channel).",
        -  "minLength": 1,
        -  "type": "string"
        -}
      • changedInput schema / required
        Previous value: -[
        -  "channel_id",
        -  "query"
        -]New value: +[
        +  "channel",
        +  "q"
        +]
    • Changedsearch_youtube7 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of results to return (default 10, max 25)."New value: +"Max results (1-50, default 20)."
      • changedInput schema / properties / limit / maximum
        Previous value: -25New value: +50
      • changedInput schema / properties / limit / type
        Previous value: -"integer"New value: +"number"
      • addedInput schema / properties / q
        Added value: +{
        +  "description": "Search query (same syntax as YouTube's search bar, e.g. 'rust async tutorial', 'lex fridman dario amodei').",
        +  "minLength": 1,
        +  "type": "string"
        +}
      • removedInput schema / properties / query
        Removed value: -{
        -  "description": "Search keywords (e.g., 'rust async tutorial', 'lex fridman dario amodei'). Same syntax as YouTube's search bar.",
        -  "minLength": 1,
        -  "type": "string"
        -}
      • addedInput schema / properties / type
        Added value: +{
        +  "description": "Search type: 'video', 'channel', or 'playlist'. Default: 'video'.",
        +  "enum": [
        +    "video",
        +    "channel",
        +    "playlist"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "query"
        -]New value: +[
        +  "q"
        +]
    • Changedtranscribe_video4 fields changed
      • addedInput schema / properties / lang
        Added value: +{
        +  "description": "Optional language hint (ISO 639-1, e.g. 'en', 'zh'). Omit to auto-detect.",
        +  "type": "string"
        +}
      • removedInput schema / properties / video_id_or_url
        Removed value: -{
        -  "description": "YouTube video ID or any URL form. Caption-less videos benefit most from this tool.",
        -  "minLength": 5,
        -  "type": "string"
        -}
      • addedInput schema / properties / video_url
        Added value: +{
        +  "description": "YouTube URL (watch, youtu.be, shorts, or embed form). Full URL preferred.",
        +  "minLength": 5,
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "video_id_or_url"
        -]New value: +[
        +  "video_url"
        +]
  2. 13 tool updatesv0.1.1
    • Changedfetch_transcript3 fields changed
      • changedInput schema / properties / language / description
        Previous value: -"Optional language code (default: video's primary)"New value: +"Optional ISO 639-1 language code to select among multilingual captions (e.g., 'en', 'zh', 'es', 'ja'). If omitted, the video's primary caption track is returned."
      • addedInput schema / properties / video_id_or_url / description
        Added value: +"YouTube video ID or any URL form (watch / youtu.be / shorts)."
      • addedInput schema / properties / video_id_or_url / minLength
        Added value: +5
    • Changedfetch_video_info2 fields changed
      • changedInput schema / properties / video_id_or_url / description
        Previous value: -"YouTube video ID or full URL"New value: +"YouTube video ID (e.g., 'dQw4w9WgXcQ') or any YouTube URL form (watch URL, youtu.be short link, or shorts URL). Both formats are accepted."
      • addedInput schema / properties / video_id_or_url / minLength
        Added value: +5
    • Changedget_asr_task2 fields changed
      • addedInput schema / properties / task_id / description
        Added value: +"Task ID returned from a previous transcribe_video call."
      • addedInput schema / properties / task_id / minLength
        Added value: +1
    • Changedget_channel_latest_videos5 fields changed
      • addedInput schema / properties / channel_id / description
        Added value: +"Canonical channel ID starting with 'UC'."
      • addedInput schema / properties / channel_id / pattern
        Added value: +"^UC[A-Za-z0-9_-]+$"
      • changedInput schema / properties / limit / description
        Previous value: -"Max items (default 10)"New value: +"Max number of recent videos to return (default 10, max 50)."
      • addedInput schema / properties / limit / maximum
        Added value: +50
      • addedInput schema / properties / limit / minimum
        Added value: +1
    • Changedget_library_item2 fields changed
      • addedInput schema / properties / item_id / description
        Added value: +"Library item ID (returned by list_library or save_to_library)."
      • addedInput schema / properties / item_id / minLength
        Added value: +1
    • Changedlist_channel_videos3 fields changed
      • addedInput schema / properties / channel_id / description
        Added value: +"Canonical channel ID starting with 'UC' (use resolve_channel if you only have a handle)."
      • addedInput schema / properties / channel_id / pattern
        Added value: +"^UC[A-Za-z0-9_-]+$"
      • addedInput schema / properties / page_token / description
        Added value: +"Opaque pagination cursor from a previous response's `next_page_token`. Omit for the first page."
    • Changedlist_library5 fields changed
      • addedInput schema / properties / limit / description
        Added value: +"Max items to return (default 20, max 100)."
      • addedInput schema / properties / limit / maximum
        Added value: +100
      • addedInput schema / properties / limit / minimum
        Added value: +1
      • addedInput schema / properties / query / description
        Added value: +"Optional free-text search; matched against item title, channel, and tags."
      • addedInput schema / properties / tag / description
        Added value: +"Optional exact-match tag filter (single tag)."
    • Changedlist_playlist_videos2 fields changed
      • addedInput schema / properties / playlist_id / description
        Added value: +"YouTube playlist ID (typically starts with 'PL', 'UU', 'LL', or 'FL')."
      • addedInput schema / properties / playlist_id / minLength
        Added value: +2
    • Changedresolve_channel2 fields changed
      • changedInput schema / properties / identifier / description
        Previous value: -"Channel handle (@name), URL, or ID"New value: +"Channel identifier in any common form: handle (`@mkbhd`), vanity URL (`youtube.com/@mkbhd`), channel URL (`youtube.com/channel/UC...`), or raw channel ID (`UC...`)."
      • addedInput schema / properties / identifier / minLength
        Added value: +1
    • Changedsave_to_library4 fields changed
      • addedInput schema / properties / tags / description
        Added value: +"Optional tags for organizing the saved item (e.g., ['ai', 'paper-review'])."
      • addedInput schema / properties / tags / items / minLength
        Added value: +1
      • addedInput schema / properties / video_id_or_url / description
        Added value: +"YouTube video ID or any URL form for the video being saved."
      • addedInput schema / properties / video_id_or_url / minLength
        Added value: +5
    • Changedsearch_channel_videos4 fields changed
      • addedInput schema / properties / channel_id / description
        Added value: +"Canonical channel ID starting with 'UC'."
      • addedInput schema / properties / channel_id / pattern
        Added value: +"^UC[A-Za-z0-9_-]+$"
      • addedInput schema / properties / query / description
        Added value: +"Search keywords (matched against video title and description within the channel)."
      • addedInput schema / properties / query / minLength
        Added value: +1
    • Changedsearch_youtube3 fields changed
      • addedInput schema / properties / limit
        Added value: +{
        +  "description": "Maximum number of results to return (default 10, max 25).",
        +  "maximum": 25,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • changedInput schema / properties / query / description
        Previous value: -"Search query"New value: +"Search keywords (e.g., 'rust async tutorial', 'lex fridman dario amodei'). Same syntax as YouTube's search bar."
      • addedInput schema / properties / query / minLength
        Added value: +1
    • Changedtranscribe_video2 fields changed
      • addedInput schema / properties / video_id_or_url / description
        Added value: +"YouTube video ID or any URL form. Caption-less videos benefit most from this tool."
      • addedInput schema / properties / video_id_or_url / minLength
        Added value: +5
  3. 13 tool updatesv0.1.0
    • First observedfetch_transcript
    • First observedfetch_video_info
    • First observedget_asr_task
    • First observedget_channel_latest_videos
    • First observedget_library_item
    • First observedlist_channel_videos
    • First observedlist_library
    • First observedlist_playlist_videos
    • First observedresolve_channel
    • First observedsave_to_library
    • First observedsearch_channel_videos
    • First observedsearch_youtube
    • First observedtranscribe_video

TDQS

A4.4/5.0
Disambiguation5/5

Each tool has a clear, distinct purpose: fetching transcripts vs. metadata, searching globally vs. within a channel, library management, etc. Overlapping tools like list_channel_videos and get_channel_latest_videos are differentiated by convenience vs. full pagination.

Naming Consistency5/5

All tools follow a consistent verb_noun snake_case pattern (e.g., fetch_transcript, list_library, resolve_channel). No mixing of styles, making it easy to predict tool names.

Tool Count5/5

13 tools is well-scoped for a YouTube transcript and library management server. Each tool covers a specific operation without unnecessary bloat or missing essential functionality.

Completeness4/5

The set covers core workflows: fetching transcripts, generating via ASR, searching, listing channels/playlists, and library management. A minor gap is the lack of an explicit delete tool for library items, but idempotent saves mitigate this.

Maintenance

ActivityInactive
ResponsivenessNo issues

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

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    An MCP server (stdio + HTTP/SSE) that fetches video transcripts/subtitles via yt-dlp, with pagination for large responses. Supports YouTube, Twitter/X, Instagram, TikTok, Twitch, Vimeo, Facebook, Bilibili, VK, Dailymotion. Whisper fallback — transcribes audio when subtitles are unavailable (local or OpenAI API). Works with Cursor and other MCP host
    8
    19
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    MCP server that fetches YouTube video transcripts and optionally summarizes them. Supports multiple transcript formats (text, JSON, SRT, WebVTT), multi-language retrieval, and flexible YouTube URL parsing.
    6
    5
    MIT

Latest Blog Posts

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/SubDownload/subdownload-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server