Skip to main content
Glama

SubDownload MCP 服务器

SubDownload 将 YouTube 作为一个 MCP 原生数据源进行公开。通过 OAuth 连接一次,您的 AI 智能体即可获得总结视频、获取完整字幕(包括通过 AI ASR 获取无字幕视频的文本)、搜索频道和播放列表的工具,并将所有内容保存到用户个人的知识库中,以便跨会话调用。

推荐的设置是将您的 MCP 客户端直接指向上述托管端点,并通过 OAuth 进行身份验证——请参阅下方的“快速连接”。本仓库还提供了一个轻量级的 stdio 代理(Node + Docker),适用于偏好本地子进程的环境。

身份验证

使用动态客户端注册 (RFC 7591) 的 OAuth 2.1。无需预共享 client_idclient_secret —— 您的 MCP 客户端会在首次连接时自动注册。

发现机制 (RFC 9728):

  1. /mcp 发送不带令牌的 POST 请求会返回 401 以及指向 /.well-known/oauth-protected-resourceWWW-Authenticate 标头

  2. 该文档指向授权服务器 (https://api.subdownload.com)

  3. MCP 客户端遵循标准的授权 → 回调 → 令牌流程(使用 PKCE)

API 密钥替代方案https://subdownload.com/account 上的每个账户都为不支持 OAuth 的客户端提供了一个 Bearer 令牌。

Related MCP server: YouTube Transcript MCP Server

工具

工具

功能

search_youtube

在 YouTube 上进行关键词搜索

fetch_video_info

获取视频元数据(标题、频道、时长、观看次数)

fetch_transcript

获取带时间戳的完整字幕

transcribe_video

为没有字幕的视频生成 AI ASR 字幕

get_asr_task

轮询正在进行的 AI 转录任务

resolve_channel

通过句柄、URL 或 ID 查找频道

list_channel_videos

列出频道中的视频

get_channel_latest_videos

获取频道的最新视频

search_channel_videos

在单个频道内搜索

list_playlist_videos

列出播放列表的内容

save_to_library

将视频摘要或字幕保存到您的个人知识库

list_library

浏览您保存的知识库

get_library_item

获取单个已保存的项目

快速连接

Claude Desktop / Cursor / Windsurf / 任何支持 OAuth 的 MCP 客户端

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

首次使用时,客户端会触发 OAuth,您可以使用 Google 或 LINUX DO 登录。注册即送免费额度——无需绑定银行卡。

Bearer 令牌客户端

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

从您的 账户页面 获取您的 API 密钥。

本地 stdio 代理 (Docker / npm)

对于偏好子进程传输的客户端,本仓库提供了一个轻量级的 Node 代理,它将 tools/call 转发到带有您 API 密钥的托管端点。

# 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

客户端配置示例:

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

工具模式是内联声明的,因此内省(initializetools/list)无需凭据即可工作;tools/call 需要 SUBDOWNLOAD_API_KEY

定价

注册即送免费额度。专业版:每月 5,000 额度。请参阅 https://subdownload.com/pricing。

支持

许可证

MIT(适用于此文档仓库;SubDownload 服务本身是托管的 SaaS —— 请参阅 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.

  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.3/5.0

Scored across 13 tools

Disambiguation4/5

Most tools have clearly distinct purposes, but fetch_transcript vs transcribe_video and list_channel_videos vs get_channel_latest_videos overlap enough that users could initially pick the wrong one. The descriptions provide good disambiguation, so only a slight deduction.

Naming Consistency5/5

All tools follow a consistent verb_noun snake_case pattern: list_, get_, fetch_, search_, transcribe_, resolve_, save_. Minor variation between 'fetch' and 'get' is semantically negligible and does not break the pattern.

Tool Count5/5

13 tools is well within the ideal range for this domain, covering channel discovery, video search, transcript fetch/generation, ASR status polling, and library management without unnecessary bloat.

Completeness4/5

The toolset covers the main workflows of finding videos, fetching or generating transcripts, and saving/reading library items. Obvious gaps are the lack of a library delete/update tool and no way to list available caption tracks before requesting a transcript.

Maintenance

ActivityInactive
ResponsivenessNo issues

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
    21
    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
    37 PyPI
    6
    MIT