YouTube Knowledge MCP
The YouTube Knowledge MCP server enables AI assistants to search, analyze, extract, and organize knowledge from YouTube videos and channels, with both local and remote deployment options.
Search & Discovery: Search for videos and channels by keyword; list videos from playlists or channels; retrieve detailed metadata for videos, channels, and playlists (title, duration, views, likes, tags, description, subscribers, video counts).
Transcripts & Content Analysis: Extract transcripts with timestamps, language support, and caching; search within transcripts to find exact moments with deep links; get chapter markers and top comments.
Media Extraction (local): Cut video/audio clips by time range or chapter; capture frames; export subtitles in SRT/VTT/TXT; download full videos with quality presets (best, 2160p–360p, audio-only) or a specific format ID; list available download formats.
Knowledge Library (local): Save, list, search, tag, and delete summaries and skill notes; rebuild the search index.
Channel Brains (local): Build a searchable corpus of timestamped passages from an entire channel; ask questions across a creator's content; measure channel statistics; save a profile.
Health & Diagnostics: Check availability and versions of yt-dlp and ffmpeg; provide actionable error codes; handle rate limiting and retries.
Deployment & Extensibility: Supports local stdio and remote HTTP transports; includes reusable prompts (e.g., summarize_video, create_brain) and resource URLs (e.g., youtube://transcript/{videoId}).
Provides tools for searching, analyzing, and extracting knowledge from YouTube videos including transcripts, chapters, comments, channel info, and video metadata.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@YouTube Knowledge MCPsearch for latest tech reviews"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
YouTube Knowledge MCP
A Model Context Protocol (MCP) server that gives AI assistants the ability to search, analyze, and extract knowledge from YouTube videos. Works with Claude Desktop, Claude Code, Claude.ai, Cursor and any MCP-compatible client.
Supports both local (stdio) and remote (Streamable HTTP) transports.
![]()
Features
Find and read
Search videos and channels by keyword
Fetch videos from a playlist or channel
Video, channel and playlist metadata, chapters, and top comments
Thumbnails: look at any video's thumbnail or a channel's avatar or banner as an image, or save every thumbnail of a channel to disk
Transcripts with timestamps, sliced by time range or chapter, and capped so a three-hour video cannot flood your context
Search inside a transcript and get back
?t=links that open the video at the exact momentBatch tools: transcripts for many videos at once, or a whole-playlist digest
Extract for editing
Clip a time range without downloading the whole video, cut precisely or on keyframes, by timestamp or chapter name
Audio clips in mp3, m4a, wav, flac or opus
Frame capture at any timestamp, without downloading the file
Subtitle export as SRT, WebVTT or plain text for Premiere, Resolve or CapCut
Full downloads with quality presets
Keep what you learn (local mode)
Save summaries and skill notes to a local library
Read them back, and search across all of them with full-text ranking
Tag, retag and delete
Extract exhaustively, and prove it (local mode)
Catalogue a whole channel across every tab — videos, shorts, streams, releases, podcasts — into a local SQLite store, resumably
Harvest comments with their replies, every field YouTube returns, and search them locally with full-text ranking and real pagination
A completeness receipt on every extraction:
completeis true only when the server can prove it holds everything in scope, so a partial harvest can never be mistaken for a full historyAsk what you actually have with
get_coverage, which never touches the network — cheap enough to call before every claimRemove what you hold, including one author's comments everywhere
Build a brain for a channel (local mode)
Read a whole channel into a searchable corpus of timestamped passages, in any caption language, resumable and safe to interrupt — a second run continues where it stopped and picks up new uploads
Ask what a creator has said about anything, across every video, and get back the moments themselves with links that open the video there
Measure the channel: how much was readable, its upload rhythm, its speaking rate, and the phrases it repeats across videos
Keep a written profile beside the corpus, grounded in passages you can cite
Study a channel's thumbnails (local mode)
Save every thumbnail of a channel, plus its avatar and banner, resumably, at the largest size YouTube serves, with each image's real pixel size recorded
Built to stay working
WebVTT parsed by the W3C reference implementation, not a hand-written matcher
Typed, actionable errors — "no captions in en, try: fr, es, de" rather than a wall of yt-dlp stderr
Timeouts, adaptive backoff and a concurrency limit on every yt-dlp call, with cooldowns and a circuit breaker so a long harvest survives being throttled
check_healthdiagnoses missing or outdated yt-dlp and ffmpegBearer auth, a loopback default bind, an allowlist on every URL and image host, and typed error codes on every failure
Structured output on every tool, plus MCP resources, prompts and completions
An end-to-end suite runs the built server against real yt-dlp over both transports every week
Related MCP server: YouTube Translate MCP
Prerequisites
Node.js 22.13+ — the version where
node:sqlite, which the harvest store uses, is available without a flagyt-dlp — required by every tool.
brew install yt-dlp(macOS) orpip install -U yt-dlpffmpeg — required for downloads, clip extraction and frame capture. Everything else works without it.
Run the check_health tool to confirm both are installed and current. An
outdated yt-dlp is the most common cause of unexplained failures, since YouTube
changes frequently; yt-dlp -U fixes most of them.
Installation
Via npm (Recommended)
npm install -g youtube-knowledge-mcpVia npx (no installation)
Configure directly with npx (see Configuration section).
From source
git clone https://github.com/teobouancheau/youtube-knowledge-mcp.git
cd youtube-knowledge-mcp
npm install
npm run buildConfiguration
Local (stdio) -- Claude Desktop, Claude Code, Cursor
Quick Start with npx
{
"mcpServers": {
"youtube-knowledge": {
"command": "npx",
"args": ["-y", "youtube-knowledge-mcp"]
}
}
}With Global Installation
npm install -g youtube-knowledge-mcp{
"mcpServers": {
"youtube-knowledge": {
"command": "youtube-knowledge-mcp"
}
}
}Configuration File Locations
Client | Path |
Claude Desktop (macOS) |
|
Claude Desktop (Windows) |
|
Claude Desktop (Linux) |
|
Claude Code |
|
Cursor |
|
Restart your client after updating configuration.
Remote (HTTP) -- Claude.ai, Claude Mobile, Custom Connectors
The server supports Streamable HTTP transport for remote access via Claude's official connectors.
Every remote setup is your own deployment. There is no shared instance to point a connector at, by design: every call shells out to yt-dlp, so a single host serving other people's traffic is a host YouTube rate-limits for all of them. The button below deploys this repository into your own Render account, in about two minutes and without cloning anything.
Self-hosted
npm run build
npm run start:httpThe server listens on 127.0.0.1:PORT (default 3000). To reach it from another
machine set MCP_BIND_HOST=0.0.0.0 together with MCP_AUTH_TOKEN; the server
refuses to start exposed and unauthenticated unless you also set
MCP_ALLOW_UNAUTHENTICATED=true. Behind a reverse proxy, set MCP_TRUST_PROXY
to the number of hops and MCP_PUBLIC_URL to the address clients use.
Docker
docker build -t youtube-knowledge-mcp .
TOKEN=$(openssl rand -hex 32) && echo "MCP_AUTH_TOKEN=$TOKEN"
docker run -p 3000:10000 -e MCP_AUTH_TOKEN="$TOKEN" youtube-knowledge-mcpThe token is printed because nothing else will print it: the server logs that a
token is required, never its value. Send it as Authorization: Bearer $TOKEN.
The image sets PORT=10000 and exposes it; publish it on whatever host port you
like. The build happens inside the image, so no local npm run build first.
Deploy to Render
The button opens Render's Blueprint flow against render.yaml in
this repository, which builds the Docker image, points the health check at
/health and generates an MCP_AUTH_TOKEN for you. No fork, no clone, no
settings to fill in — the service is yours, on your account.
Click the button and confirm. Render builds the image and deploys it.
Open the service's Environment tab and copy the generated
MCP_AUTH_TOKEN. The HTTP transport rejects every request without it, so a URL that leaks is not an open server.Add
https://<your-service>.onrender.com/mcpas a custom connector, withAuthorization: Bearer <token>.
Worth doing once the service exists: set MCP_ALLOWED_HOSTS to your service's
hostname (<your-service>.onrender.com). It cannot be filled in from the
Blueprint, since the hostname does not exist until the service does, and it
rejects requests arriving under any other name.
Your instance does not follow this repository. The Blueprint sets
autoDeployTrigger: off, because auto-deploying would run code pushed here
inside your account, under your token, without you reading it first. To take a
newer version, use Manual Deploy on the service.
The free plan sleeps after inactivity, so the first call after a pause waits for a cold start. Any paid plan removes that.
Connect via Claude.ai
Go to Settings > Connectors
Click Add custom connector
Enter your server URL (e.g.,
https://your-app.onrender.com/mcp)Add the
Authorization: Bearer <token>header if you setMCP_AUTH_TOKENClick Add
MCP Tools
44 tools. The 15 read-only ones work over both transports; the 29 that touch your filesystem are registered only in local (stdio) mode, so a remote deployment cannot reach the host's disk.
Every tool returns human-readable text and typed structured output, and
reports failures as an actionable message — [NO_CAPTIONS] No "en" captions are available for this video. Call get_transcript again with one of: fr, es, de.
Discovery — remote + local
Tool | Key parameters | Returns |
|
| Matching videos with durations, channels and view counts |
|
| Matching channels with subscriber counts |
|
| One page of a playlist or channel, with a cursor. |
|
| Title, channel, duration, views, likes, description, tags |
|
| Name, handle, subscriber count, description, avatar and banner |
|
| Title, channel, video count, last updated |
|
| Chapter titles with start/end times and deep links |
|
| Comments with replies and a completeness receipt saying how many of the video's comments this is |
|
| Available formats grouped by video+audio, video-only, audio-only |
|
| A video thumbnail, channel avatar or banner as an image, with its real size |
| — | yt-dlp and ffmpeg status, versions, staleness warnings, and which session options are set |
Transcripts — remote + local
Tool | Key parameters | Returns |
|
| Transcript as plain text, timestamped lines, or cues |
|
| Matches with timestamps and |
|
| Transcripts for many videos; failures reported per video |
|
| Per-video metadata, chapters and transcript stats |
format: "timestamped" prefixes each line with [MM:SS] — use it when you need
to cite or link to a moment. maxChars with offset reads a long transcript in
pieces instead of returning 100,000+ tokens at once.
Extraction for editing — local only
Tool | Key parameters | Returns |
|
| Path to the cut video |
|
| Path to the audio file |
|
| One file per range |
|
| Path to a PNG or JPG still |
|
| Path to the subtitle file |
|
| Path to the downloaded video |
Clips are cut with --download-sections, so only the byte range covering the
window is fetched rather than the whole file. preciseCuts (default true)
cuts exactly at the requested times; set it to false for a faster
keyframe-aligned cut. All of these require ffmpeg.
Knowledge library — local only
Tool | Key parameters | Returns |
|
| Path to the saved note |
|
| Saved items, newest first |
|
| The saved markdown and its metadata |
|
| Ranked matches with excerpts |
|
| The updated tags |
|
| What was deleted |
| — | Number of notes reindexed |
Exhaustive harvest — local only
Extraction that stores what it reads, and proves what it holds. Every tool here
returns a completeness receipt: complete is true only when the server can
prove it has everything in scope, and a consumer must not describe the data as a
full history while it is false.
Tool | Key parameters | Returns |
|
| Every video across all tabs, catalogued, with a receipt |
|
| Comments and replies stored locally, with a receipt |
|
| What the server can prove it holds, and what it cannot |
|
| Full-text search over stored comments, with real pagination |
|
| The catalogued videos, filtered and sorted |
|
| What was removed from the store |
|
| Moves a damaged store aside and starts a fresh one |
get_coverage never contacts YouTube, so it is cheap enough to call before
making any claim about the data. Check anyIncomplete first.
There is no cursor for comments: YouTube exposes none for a live read, so
harvest_comments cannot page. To get more, run it again with a larger
maxComments — rows are upserted on the comment id, so a re-run costs requests
and never data.
prune_harvest exists because the store holds personal data at scale: display
names, channel ids and free-text opinions from people who never used this tool.
The author filter is the per-person erasure path.
Channel brains — local only
Tool | Key parameters | Returns |
|
| What was read, what was ruled out, and the stats |
|
| Passages with timestamps and |
| — | Every brain built locally |
|
| Coverage, statistics and repeated phrases |
|
| Path to the saved profile |
|
| What was removed |
build_brain is the only one that touches the network. The rest resolve a
channel from what is already on disk, so they work offline and cost nothing to
call.
Channel thumbnails — local only
Tool | Key parameters | Returns |
|
| Every thumbnail saved to disk, plus the avatar and banner |
|
| Saved entries with paths and decoded sizes |
|
| What was removed |
One yt-dlp listing per tab, then the images from YouTube's image hosts
directly, so a five-hundred-video channel costs a handful of listings and not
five hundred extractions. For each video the fetch tries the largest image
YouTube serves (maxresdefault, 1280 wide where it exists) and keeps it only if
it decodes wider than the image the listing offered; otherwise it keeps the
listed image, and failing that the small hqdefault. Every width and height in
the manifest was decoded from the saved bytes, never read off a URL. Shorts are
listed with portrait thumbnails and saved under shorts/. The run is resumable:
interrupt it and call again, and only what is missing or truncated is fetched.
A brain holds one caption language; pass language to read another, and build a
separate brain per language.
since and minDurationSeconds describe the brain, not just the call that
passed them. They are re-applied every time, so narrowing one drops the passages
of the videos it excludes and widening it reads them back — which is why
build_brain is annotated as destructive. Whether a video qualifies is decided
from the date and length already recorded, so changing your mind costs no
requests until there is something new to fetch. Those values come from each
video's own metadata, never from a guess: a flat channel listing does not carry
a publication date at all.
build_brain also repairs. If the passage file is lost or truncated, the videos
it can no longer account for are read again on the next call rather than being
skipped forever as already done.
Prompts
Reusable workflows your client can invoke directly: summarize_video,
extract_skill, compare_videos, research_topic, channel_deep_dive,
clip_from_quote (find a phrase, then cut the clip around it),
study_thumbnails (save a channel's thumbnails, look at a sample, describe
what recurs), and — local only — review_library, create_brain (build a
channel's corpus, then write its profile from it) and ask_creator (answer a
question strictly from a brain, with citations).
Resources
youtube://transcript/{videoId}— a timestamped transcript, fetched and cached on first readyoutube://library/{videoId}/{summary|skill}— a saved note (local only, and enumerable)youtube://brain/{channelId}/{manifest|profile}— what a channel brain covers, or the profile written from it (local only, and enumerable)youtube://thumbnails/{channelId}/manifest— whatfetch_channel_thumbnailssaved for a channel (local only, and enumerable)
Error codes
Failures are reported inside the result so the model can read and recover from them, each prefixed with a code and followed by a next step.
Code | Meaning |
| The video cannot be accessed |
| yt-dlp reports the video needs a signed-in account |
| No captions in the requested language; the message lists the ones that exist |
| An upcoming stream, or one whose recording is still processing |
| Transient; retried automatically with backoff before surfacing |
| A tooling problem; the message says how to fix it |
| A bad argument, caught before any network call |
| YouTube asked this address to sign in; set the cookie settings below |
| An image could not be downloaded from YouTube's image hosts |
| The client cancelled the request |
Environment variables
All optional.
Variable | Default | Purpose |
| unset | Require this bearer token on the HTTP transport. Set this if you expose the server beyond localhost. |
| unset | Comma-separated Host allowlist; enables DNS-rebinding protection |
| unset | Comma-separated Origin allowlist |
|
| Interface to bind. The Docker image sets |
|
| Explicit consent to listen on a network interface with no token |
|
|
|
| unset | The URL clients reach the server at; used in the OAuth metadata it publishes instead of the request's Host |
|
| Largest request body accepted |
| unset |
|
|
| HTTP port. The Docker image sets |
|
| Requests per window, per client |
|
| Rate-limit window |
|
| Close HTTP sessions idle this long |
|
| Reject new sessions past this many |
|
| Concurrent yt-dlp processes |
| 30 days | Transcript cache lifetime |
| 1 day | Per-video stats cache lifetime |
| unset | Browser whose cookies yt-dlp should read: |
| unset | A Netscape-format cookies file inside your home directory, as an alternative to a browser |
| unset | An |
| unset | Seconds yt-dlp sleeps between its own requests, to stay under YouTube's limits |
Signed-in content
Some videos need a signed-in session — age-restricted, members-only, private
ones you have access to — and YouTube sometimes asks an address to prove it is
not a bot before serving any video at all. Those failures arrive as
LOGIN_REQUIRED, AGE_GATED or BOT_CHECK, and each names the fix: set
YOUTUBE_MCP_COOKIES_FROM_BROWSER to a browser you are signed in with, or
YOUTUBE_MCP_COOKIES_FILE to a cookies file, and restart the server.
Cookies are your account. Use them in local (stdio) mode, keep a cookies file readable by you alone, and know that content read this way may be personal. The server validates both settings at boot, never logs the file's path or contents, and never surfaces yt-dlp's output.
Library Storage
Content is stored in ~/.youtube-knowledge/:
~/.youtube-knowledge/
├── transcripts/ # Cached timestamped transcripts
│ └── {video_id}.{lang}.json
├── library/ # Saved notes
│ └── {video_id}/
│ ├── metadata.json
│ ├── summary.md
│ └── skill.md
├── brains/ # Channel brains
│ └── {channel_id}/
│ ├── manifest.json # What the brain covers, and where a build stopped
│ ├── chunks.json # The timestamped passages
│ └── profile.md # The written account, if one was saved
├── thumbnails/ # Saved channel thumbnails
│ └── {channel_id}/
│ ├── manifest.json # Every image, its decoded size, where it is
│ ├── channel/ # avatar.* and banner.*
│ ├── videos/ # {video_id}.jpg (or .png / .webp)
│ ├── shorts/
│ └── streams/
├── downloads/ # Full downloads
├── clips/ # Extracted clips
├── frames/ # Captured stills
├── subtitles/ # Exported SRT / VTT / TXT
├── index.json # Library index
└── search-index.json # Full-text search indexTranscripts are cached for 30 days by default; pass refresh: true to any
transcript tool to bypass the cache, or set YOUTUBE_MCP_TRANSCRIPT_TTL_MS.
Every tool that writes files confines its output to your home directory, and
outputDir is rejected if it points anywhere else.
Usage Examples
Find a moment and cite it
"Find where this video talks about rate limiting and give me the timestamp:
https://youtube.com/watch?v=..."search_transcript returns each match with a link that opens the video at that
second, so the claim can be checked rather than taken on trust.
Find a moment and clip it
"Find where she says 'the real bottleneck was the database' and cut me a
30-second clip around it"search_transcript locates the moment, extract_clip cuts it. Only the byte
range covering the clip is downloaded.
Read one section of a long video
"Summarize just the 'Benchmarks' chapter of this 3-hour podcast"get_chapters finds the section, then get_transcript with chapter: "Benchmarks" reads only that part instead of the whole thing.
Survey a playlist cheaply
"What does this 40-video course cover, and which three videos should I watch?"digest_playlist returns metadata and chapters for every video in one call.
Prepare footage for an edit
"Pull these four moments as separate clips and export the subtitles as SRT"extract_clips cuts all four in one call; export_subtitles writes a file your
editor can import.
Build and query a knowledge base
"Summarize this video and save it to my library tagged 'databases'"
"What have I saved about connection pooling?"save_to_library stores it; search_library searches across everything saved
with full-text ranking.
Build a brain for a creator
"Build a brain for @Fireship, then tell me everything they've said about Rust"build_brain reads the channel into timestamped passages — interrupt it and
call it again to continue. ask_brain then answers from what was actually
said, returning the moments themselves so every claim can be checked against
the video. Run build_brain again a month later and it reads only the new
uploads.
Testing
npm test # Run all tests
npm run test:watch # Watch mode
npm run test:coverage # Coverage report, with thresholds enforcedThe suite covers the pure logic directly, drives the real server through an MCP client over an in-memory transport, exercises the library against a real temporary filesystem, and snapshots the tool manifest so any change to the public surface shows up as a reviewable diff.
An end-to-end lane (E2E=1 npm run test:e2e) drives the built server through
real MCP clients over both transports against real yt-dlp and the real network,
in an isolated temporary home. It runs weekly in CI and on every release before
anything is published; see CONTRIBUTING.md.
Development
npm run dev # Watch mode
npm run build # Build for production
npm run rebuild # Clean and rebuild
npm start # Run server (stdio)
npm run start:http # Run server (HTTP)
npm run validate # Typecheck + lint + format check + testCI runs the same gate on Node 22.22, 22 and 24 for every push and pull request, then boots the built server as a real MCP client to verify the manifest.
Contributing
Contributions are welcome — see CONTRIBUTING.md for the project layout, coding standards, and how to add a tool.
Security
The HTTP transport binds loopback and refuses to listen on a network interface
without MCP_AUTH_TOKEN. Caller-supplied URLs must be on a YouTube host before
anything is handed to yt-dlp, every yt-dlp target follows a -- terminator, and
ids are validated before they become paths. See SECURITY.md for
the deployment checklist and how to report a vulnerability.
License
MIT License - see LICENSE for details.
Acknowledgments
Available Tools
13 toolsdownload_videoDownload YouTube VideoA
Download a YouTube video to local disk. Use the quality parameter for automatic format selection with smart fallbacks, or formatId for a specific format from list_formats. Returns the downloaded file path, title, and format details.
| Name | Required | Description | Default |
|---|---|---|---|
| video | Yes | YouTube video ID (e.g., dQw4w9WgXcQ) or full URL | |
| quality | No | Quality preset with smart fallback. "best" selects highest available. Specific resolutions fall back to next best if unavailable. "audio" extracts audio only. Default: best | |
| formatId | No | Specific format code from list_formats (e.g., "22", "137+140" for combined). Overrides quality when provided. | |
| outputDir | No | Output directory path. Default: ~/.youtube-knowledge/downloads/ |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly=false, so the write nature is known. The description adds that the write is to 'local disk' and discloses the return value (file path, title, format details), which annotations do not cover. However, it does not mention other behavioral traits such as overwriting behavior or error handling, so it offers minimal but non-redundant value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long and front-loads the core purpose, followed by parameter guidance and return value. No words are wasted, and it is well-structured for quick parsing by an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description appropriately summarizes the return values. It covers the key parameter choices and gives enough context to use the tool effectively. It does not address edge cases like failures or file conflicts, but the annotations and schema fill in most missing details for a download tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with each parameter fully described. The description adds a small cross-reference between quality and formatId, but largely repeats what the schema already states. Since the schema does the heavy lifting, a baseline score of 3 is appropriate with only marginal added meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Download') and the resource ('a YouTube video to local disk'), distinguishing it from sibling tools like get_video_info or list_formats. It also specifies the function's output (file path, title, format details), leaving no ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit internal guidance on when to use quality vs formatId, and references list_formats to obtain format codes. It does not explicitly state when to use this tool versus alternatives (e.g., when only metadata is needed), but the clear purpose and parameter guidance provide adequate context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetch_videosFetch YouTube VideosARead-onlyIdempotent
List videos from a YouTube playlist or channel. Returns video IDs, titles, durations, upload dates, and URLs. Sorted by playlist or channel order.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | YouTube playlist URL, channel URL, or channel handle (e.g., https://www.youtube.com/@channel) | |
| limit | No | Maximum number of videos to return (1-100, default: 20) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reveals useful behavioral details such as the returned video fields and the sort order (playlist/channel order). Annotations already cover the read-only, idempotent, and non-destructive nature, so the description adds value without needing to restate those.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loaded with the primary action, and includes only essential details about return values and sorting. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with two parameters and no output schema, the description adequately covers purpose, return data, and ordering. It could be slightly more complete by referencing alternative tools, but overall it is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides complete descriptions for both parameters (url and limit), so the description does not need to add param-specific meaning. It does echo the url parameter's source types but offers no additional semantic depth.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'List' and a clear resource ('videos from a YouTube playlist or channel'), and specifies the return fields (IDs, titles, durations, upload dates, URLs) and ordering. This distinguishes it from sibling tools like search_videos, which focuses on keyword search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for listing videos from a playlist or channel, but it does not explicitly mention when to use this tool versus search_videos or other alternatives. No exclusions or alternative guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_channel_infoGet YouTube Channel InfoARead-onlyIdempotent
Get metadata for a YouTube channel. Returns channel name, handle, subscriber count, description, and channel URL.
| Name | Required | Description | Default |
|---|---|---|---|
| channel | Yes | YouTube channel URL, handle (e.g., @Fireship), or channel name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is clear. The description adds the specific output fields (channel name, handle, subscriber count, description, URL), which is useful context beyond the annotations, but it does not disclose any error behavior or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that immediately states the function and lists the return fields. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read tool with strong annotations, the description sufficiently covers the purpose and output shape. The absence of an output schema is compensated by the explicit list of returned fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully describes the 'channel' parameter as a URL, handle, or name, so schema coverage is 100%. The description does not add any additional parameter semantics beyond what is in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Get' and clearly identifies the resource as 'metadata for a YouTube channel', listing the exact fields returned (name, handle, subscriber count, description, URL). This distinguishes it from sibling tools like get_video_info or search_channels.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for retrieving metadata for a specific known channel, but it does not explicitly state when to use it over alternatives like search_channels. There are no explicit exclusions or alternative recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_chaptersGet YouTube Video ChaptersARead-onlyIdempotent
Extract chapter markers and timestamps from a YouTube video. Returns chapter titles with start and end times. Not all videos have chapters. Returns empty list if none found.
| Name | Required | Description | Default |
|---|---|---|---|
| video | Yes | YouTube video ID (e.g., dQw4w9WgXcQ) or full URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds value beyond the annotations by disclosing the return contents (titles with start/end times) and the edge case behavior (empty list if no chapters). This informs the agent about expected output and failure mode, which annotations don't cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each conveying essential information without redundancy. The description is tightly written and free of fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-only tool, the description is complete: it states what it returns, when it might return nothing, and the input format (covered in schema). No critical information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already thoroughly describes the 'video' parameter (ID or full URL) at 100% coverage. The description adds no additional parameter semantics, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Extract chapter markers and timestamps from a YouTube video,' a specific verb+resource that clearly differentiates this tool from siblings like get_transcript or get_video_info. The additional details about chapter titles and timestamps reinforce the scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: it's for extracting chapters. It implies when to use it (when you need chapter markers) but does not explicitly name alternatives or exclusion criteria. The caveat about videos without chapters adds context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_commentsGet YouTube Video CommentsARead-onlyIdempotent
Get top comments from a YouTube video sorted by popularity. Returns author, text, like count, and pinned status. Only top-level comments, no replies.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of top-level comments to return (1-50, default: 20) | |
| video | Yes | YouTube video ID (e.g., dQw4w9WgXcQ) or full URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description need not restate safety. It adds valuable behavioral context: sorting by popularity, return fields (author, text, like count, pinned status), and the limitation to top-level comments, going beyond mere 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise at two sentences, with the main action front-loaded and every sentence carrying meaningful information. It avoids redundancy and unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with no output schema, the description adequately covers purpose, return values, and scope limitations. Combined with strong annotations and a well-documented schema, it provides a complete picture for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both video and limit fully described in the input schema. The tool description reinforces the 'top-level comments' aspect but does not add significant meaning beyond the schema, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (get top comments), the resource (YouTube video), and key details (sorted by popularity, top-level only, no replies). It distinguishes itself from sibling tools like get_video_info and get_transcript by specifying its focus on comments and the exact output fields.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear scope of use (top comments, sorted by popularity) and explicitly excludes replies, guiding when not to use it. However, it does not name an alternative tool for retrieving replies or other comment types, so it falls short of the highest bar for explicit alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_playlist_infoGet YouTube Playlist InfoARead-onlyIdempotent
Get metadata for a YouTube playlist. Returns title, channel, video count, last updated date, and description.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | YouTube playlist URL (e.g., https://www.youtube.com/playlist?list=PLlrATfBNZ98dudnM48yfGUldqGD0S4FFb) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is clear. The description adds the return fields but no additional behavioral context (e.g., whether private playlists are accessible, error behavior, or rate limits). This is adequate for a read-only operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one sentence, front-loaded with the action ('Get metadata for a YouTube playlist') followed by the return fields. Every word earns its place; no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple tool (one parameter, fully documented in schema) and robust annotations (read-only, idempotent, non-destructive), the description is complete. It clearly states the return fields, which is essential since there is no output schema. No significant gaps are apparent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the url parameter is fully described with an example in the schema. The tool description does not add any additional parameter semantics beyond what the schema already provides, so it meets the baseline for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear, specific action: 'Get metadata for a YouTube playlist.' It lists the exact fields returned (title, channel, video count, last updated date, description), which distinguishes it from sibling tools like get_video_info and get_channel_info.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage is implied by the name and description but never explicitly stated. It does not mention when to use this tool versus alternatives (e.g., for individual videos or channels), nor does it provide any exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_transcriptGet YouTube Video TranscriptARead-onlyIdempotent
Extract the full transcript from a YouTube video. Supports auto-generated and manual captions. Returns plain text with word count and detected language. Results are cached locally.
| Name | Required | Description | Default |
|---|---|---|---|
| video | Yes | YouTube video ID (e.g., dQw4w9WgXcQ) or full URL | |
| language | No | Preferred caption language as ISO 639-1 code (e.g., en, fr, es, de). Falls back to available language if unavailable. Default: en | en |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true. The description adds valuable behavior: it returns plain text with word count and detected language, and states results are cached locally. It also notes support for both auto-generated and manual captions. These details enrich understanding beyond the annotations, though it doesn't discuss error handling or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the main action ('Extract the full transcript from a YouTube video') and followed by concise details on caption types, output, and caching. Every sentence contributes meaningful information, with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with two parameters, robust annotations, and no output schema, the description sufficiently explains the return value (plain text with word count and detected language). It also covers key behavioral aspects like caching and caption support. Combined with the schema and annotations, the tool is fully specified for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with both parameters clearly documented: video accepts an ID or full URL, and language specifies ISO 639-1 code with fallback behavior and a default. The description adds no extra semantic meaning beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Extract the full transcript from a YouTube video' with a specific verb and resource. It distinguishes itself from sibling tools like get_video_info, get_chapters, or download_video, as no other sibling retrieves transcripts. The mention of supporting both auto-generated and manual captions further clarifies its scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage context is clear: use this tool when you need the transcript of a YouTube video. While it doesn't explicitly name alternatives or exclusions, the tool's unique function among the siblings makes the when-to-use obvious. No misleading guidance is present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_video_infoGet YouTube Video InfoARead-onlyIdempotent
Get detailed metadata for a single YouTube video. Returns title, channel, duration, upload date, view count, like count, comment count, description, tags, and thumbnail URL.
| Name | Required | Description | Default |
|---|---|---|---|
| video | Yes | YouTube video ID (e.g., dQw4w9WgXcQ) or full URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, covering the safety profile. The description adds the specific metadata fields returned, but does not disclose error behavior, rate limits, or prerequisites. With annotations present, the extra context is useful but not extensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that leads with the action and resource, followed by a clear list of return fields. Every word adds value, with no redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of explaining return values, which it does by enumerating all metadata fields (title, channel, duration, etc.). For a simple single-parameter, read-only tool with comprehensive annotations, this is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, fully explaining the 'video' parameter as either an ID or full URL. The description adds no additional parameter syntax or constraints beyond the schema, so score matches the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets detailed metadata for a single YouTube video, with a specific verb and resource. It lists the return fields, which distinguishes it from siblings like get_transcript and get_comments that fetch different aspects of a video.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool via 'single YouTube video', indicating it is for individual video metadata rather than search or channel-level info. However, it does not explicitly mention alternatives or exclusions, such as using fetch_videos for multiple videos.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_formatsList YouTube Video FormatsARead-onlyIdempotent
List all available download formats for a YouTube video. Returns format IDs, extensions, resolutions, FPS, codecs, and file sizes. Grouped by video+audio, video-only, and audio-only.
| Name | Required | Description | Default |
|---|---|---|---|
| video | Yes | YouTube video ID (e.g., dQw4w9WgXcQ) or full URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, open-world, idempotent, and non-destructive behavior. The description adds useful behavioral context beyond that, such as grouping by video+audio, video-only, and audio-only, which helps set expectations about the response structure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the verb and resource, and includes a concise list of return fields. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with one parameter, good annotations, and no output schema, the description provides sufficient detail about return values and groupings. It lacks explicit error handling details, but that's not critical here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'video' is already fully described in the schema (ID or URL, with examples). The description does not add additional meaning beyond the schema, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: listing all available download formats for a YouTube video, with specific details on what is returned. It distinguishes from siblings like download_video or get_video_info by focusing on format listing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context: when you need format IDs, resolutions, etc. for a video. It doesn't explicitly name alternatives or exclusions, but the context is clear enough for an agent to select appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_libraryList YouTube Knowledge LibraryARead-onlyIdempotent
List all saved items in the local YouTube knowledge library. Returns titles, channels, content types, tags, and save dates. Optionally filter by tag. Sorted by most recently saved.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Filter results by tag. Case-insensitive partial match (e.g., "ml" matches "machine-learning") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only and idempotent, so the description adds value by disclosing return fields, sorting order, and the optional tag filter. No contradictions found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the main action, and includes the necessary details without any fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given one optional parameter, no output schema, and good annotations, the description fully covers what is returned, the sorting behavior, and the filter option. It is complete for this simple listing tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema fully documents the tag parameter with a case-insensitive partial match description. The tool description merely repeats 'Optionally filter by tag' without adding new meaning, so baseline 3 applies given 100% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists all saved items in the local YouTube knowledge library, a specific verb+resource. It also names the returned fields, distinguishing it from siblings like search_videos or get_video_info.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: it is for listing saved library items, not for searching external videos. However, it does not explicitly mention alternatives or when not to use it, which would make it a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_to_librarySave to YouTube Knowledge LibraryAIdempotent
Save a summary or skill note to the local YouTube knowledge library. Overwrites existing content of the same type for the same video. Returns the saved file path.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Tags for categorization and filtering (e.g., ["machine-learning", "tutorial"]) | |
| title | Yes | Video title for library indexing | |
| channel | No | YouTube channel name for library indexing | |
| content | Yes | Content to save: summary, notes, or extracted skill in markdown format | |
| videoId | Yes | YouTube video ID (e.g., dQw4w9WgXcQ) | |
| contentType | No | Type of content: "summary" for video summaries, "skill" for extracted techniques or knowledge | summary |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses important behavioral beyond annotations: it overwrites existing content of the same type for the same video, and it returns the saved file path. This adds context not covered by the idempotentHint or destructiveHint annotations, which is valuable for the agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary purpose, and includes key behavioral facts without any fluff. Every sentence earns its place, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the 6-parameter schema and no output schema, the description adequately covers purpose, overwrite behavior, and return value. It does not explain the library concept or parameter relationships beyond that, but the schema fills in those details, leaving the description contextually complete for a straightforward save operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description does not add significant parameter-specific meaning; 'summary or skill note' aligns with the contentType enum but does not elaborate on parameter formats or values beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function with a specific verb and resource: 'Save a summary or skill note to the local YouTube knowledge library.' It also distinguishes itself from sibling tools by focusing on writing to the library, whereas most siblings are read-oriented.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly specify when to use this tool versus alternatives, but the context of sibling tools like list_library implies its role as the write counterpart. The overwrite note hints at usage constraints but lacks explicit exclusions or alternative tool references.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_channelsSearch YouTube ChannelsARead-onlyIdempotent
Search YouTube for channels by keyword or phrase. Returns channel names, handles, subscriber counts, descriptions, and URLs.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of channels to return (1-20, default: 5) | |
| query | Yes | Search query for YouTube channels (e.g., "web development", "machine learning") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds the returned data types (names, handles, subscriber counts) but no additional behavioral traits like pagination, rate limits, or result ordering, leaving room for more transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences, front-loaded with the action, and contains no filler or redundant info. Every word contributes to understanding the tool's purpose and output.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only search tool with a small parameter set and complete schema descriptions, the description is sufficient. It lists the return fields, compensating for the lack of an output schema, and provides enough context for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both 'query' and 'limit' fully described in the schema. The description adds little beyond the schema, only echoing 'keyword or phrase' which is already explicit in the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the exact action ('Search YouTube for channels by keyword or phrase') and lists the return fields, making it clear this tool is for channel discovery, distinct from siblings like search_videos. It is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for channel search but does not explicitly mention alternatives, when-not-to-use, or comparison with sibling tools such as search_videos. It provides context but lacks explicit exclusion or alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_videosSearch YouTube VideosARead-onlyIdempotent
Search YouTube for videos by keyword or phrase. Returns video IDs, titles, durations, channels, view counts, and URLs. Results sorted by relevance.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return (1-20, default: 5) | |
| query | Yes | Search query (e.g., "machine learning tutorial", "react hooks explained") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a read-only, idempotent, open-world operation. The description adds behavioral details beyond that: the specific output fields returned and the default relevance sort order. This gives the agent a clearer picture of what to expect, though it doesn't cover pagination or error handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short sentences, each earning its place: the search action, the returned data fields, and the sort order. It is front-loaded with the primary purpose and contains no redundant or vague phrasing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool (two params, no output schema, read-only annotations), the description covers the key aspects: what it searches, what it returns, and how results are ordered. It doesn't explicitly discuss edge cases like empty results or API limitations, but the annotations and schema fill in the safety profile and parameter constraints. A small gap is the lack of alternative guidance, but that's more relevant to usage guidelines.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage with descriptions for both 'query' and 'limit', so the baseline is 3. The description mentions 'keyword or phrase' which aligns with the query parameter but doesn't add additional parameter-specific detail beyond the schema. It doesn't explain the effect of the limit parameter beyond the schema's own description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Search YouTube'), the resource ('videos'), and the method ('by keyword or phrase'). It also enumerates the returned fields (IDs, titles, durations, channels, view counts, URLs), making it distinct from sibling tools like search_channels.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool: to find YouTube videos via keywords. It doesn't explicitly mention alternatives or exclusions, but the purpose is unambiguous, and sibling tool names (e.g., search_channels, get_video_info) imply the distinctions. The lack of explicit 'use this instead of...' prevents a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
13 tool updates
v1.1.1- First observed
download_video - First observed
fetch_videos - First observed
get_channel_info - First observed
get_chapters - First observed
get_comments - First observed
get_playlist_info - First observed
get_transcript - First observed
get_video_info - First observed
list_formats - First observed
list_library - First observed
save_to_library - First observed
search_channels - First observed
search_videos
TDQS
Scored across 13 tools
Each tool targets a distinct resource/action combination: searching vs fetching videos, retrieving metadata, transcripts, chapters, comments, channel info, playlist info, formats, downloading, and library operations. No two tools appear to do the same thing.
The vast majority use a consistent verb_noun pattern (get_video_info, search_channels, list_formats). The only deviation is 'save_to_library' which uses a preposition, but it's still clear and readable.
13 tools is well within the ideal 3-15 range and each tool serves a necessary function for the server's purpose of YouTube knowledge management—no redundancy or bloat.
The surface covers search, retrieval, metadata, transcripts, chapters, comments, channels, playlists, download, and library save/list. Minor gap: no explicit delete or update for library items, though save_to_library does overwrite.
Maintenance
Related MCP Connectors
YouTube transcripts, search, channel browsing, and playlists for AI agents via MCP.
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
An MCP server that gives any LLM or agent clean YouTube transcripts on demand: a single video, a whole channel, or a playlist, plus AI cleanup of auto-generated captions. API-key auth, credit-based, same backend as the public v1 API. Get a free API key with 25 free credits at youtubetranscriptdownload.com/account.
Driflyte MCP server which lets AI assistants query topic-specific knowledge from web and GitHub.
Related MCP Servers
- AlicenseBqualityDmaintenanceA Model Context Protocol server that enables AI assistants to extract transcripts from YouTube videos, allowing AI to analyze and work with video content directly.15 npm3MIT
- AlicenseAqualityDmaintenanceA Model Context Protocol server that enables access to YouTube video content through transcripts, translations, summaries, and subtitle generation in various languages.55MIT
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that analyzes YouTube videos, enabling users to extract transcripts, generate summaries, and query video content using Gemini AI.13MIT
- AlicenseNot gradedqualityFmaintenanceA Model Context Protocol server that enables searching YouTube videos, retrieving and storing transcripts, and performing semantic search over video content without using the official YouTube API.34MIT