tube-bridge
tube-bridge is a self-hosted MCP server providing 17 tools for AI agents to interact with YouTube content. 14 tools work without an API key; 3 require a YouTube Data API v3 key (channel search, channel info, and comments). Search, video info, and trending are enhanced when a key is set.
Search & Discovery:
youtube_search: Search videos with filters (date, channel, duration, order). Upgraded with API key.youtube_search_channels: Search channels by name/topic with subscriber filters. Requires API key.youtube_get_trending: Get trending videos. Upgraded with API key.youtube_get_channel_videos: List recent uploads from a channel (via @handle or URL).youtube_get_playlist: Retrieve all videos in a playlist.
Metadata & Content:
youtube_get_video_info: Full metadata (title, views, duration, channel, tags, description). Upgraded with API key.youtube_get_channel_info: Detailed channel stats (subscribers, views, country, keywords). Requires API key.youtube_get_transcript: Fetch transcript/subtitles (original/default language, manual preferred). Optional timestamps.youtube_get_available_languages: List subtitle languages with manual/auto flags.youtube_get_frame: Extract a JPEG frame at a millisecond timestamp (requires ffmpeg).
Engagement:
youtube_get_comments: Top-level comments with likes and reply counts. Requires API key.
Semantic Corpus:
corpus_create: Create a named corpus for semantic transcript search.corpus_add: Add a video transcript to a corpus; auto-fetches, chunks into 80s windows, and embeds locally using BGE-small-en-v1.5.corpus_search: Semantic search with overlap deduplication, source-aware ranking, titles, and timestamped URLs.corpus_list: List all corpora with chunk and video counts.corpus_delete: Delete a corpus and its chunks/vectors.
Server Utilities:
tube_bridge_help: Access full server documentation directly via MCP.
Transports & Auth:
Transports: stdio, HTTP (
/mcp), SSE (/sse), health check (/health).Optional Bearer token authentication via
TUBE_BRIDGE_AUTH_KEYfor HTTP/SSE.
Provides tools for searching YouTube videos, retrieving video metadata and transcripts, exploring channels, playlists, and comments, and building semantic search corpora over video transcripts.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@tube-bridgewhat are the latest videos from Veritasium?"
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.
tube-bridge
Self-hosted YouTube research for AI agents.
Search videos and channels, read transcripts and comments, extract timestamped frames, and build private semantic-search corpora — through 17 MCP tools.
14 of 17 tools need no YouTube API key.
Local-first corpus: transcripts, vectors, and indexes stay on your machine.
Useful research output: titles, similarity scores, canonical video URLs, and timestamp links.
One tool for one frame: return visual evidence near a transcript finding without keeping media files.
Self-hosted and MIT: no account, hosted intermediary, managed storage, or vendor lock-in.
Thanks to everyone already using tube-bridge. If it saves you time, consider starring the repository — it helps others discover the project and signals that publishing more work like this is worthwhile.
Connect in a minute
The simplest setup uses uvx, which runs the published PyPI package in an isolated environment:
uvx tube-bridgeNormally your MCP client launches that command for you. Choose your client below.
tube-bridge requires Python 3.12 or newer. An API key is optional.ffmpeg is needed only for youtube_get_frame, and the first embedding operation may download the local model.
Claude Desktop
Open Settings → Developer → Edit Config and add:
{
"mcpServers": {
"tube-bridge": {
"command": "uvx",
"args": ["tube-bridge"]
}
}
}Restart Claude Desktop after saving the configuration.
Claude Code
claude mcp add --scope user tube-bridge -- uvx tube-bridgeCursor
Create .cursor/mcp.json in your project, or add the server to your user-level MCP configuration:
{
"mcpServers": {
"tube-bridge": {
"command": "uvx",
"args": ["tube-bridge"]
}
}
}VS Code
Create .vscode/mcp.json:
{
"servers": {
"tube-bridge": {
"type": "stdio",
"command": "uvx",
"args": ["tube-bridge"]
}
}
}Codex CLI
codex mcp add tube-bridge -- uvx tube-bridgeRelated MCP server: yt
Pi package
Pi can load the package-relative adapter and the canonical tube-bridge-research skill from the same Git source:
python3 -m pip install tube-bridge==1.1.6
pi install git:github.com/TheWhiteWater/tube-bridge@v1.1.6
pi listThis registers one status tool plus all 17 MCP tools with the tube_bridge_ prefix. The adapter reads the existing plugin.json and mcp.json, launches only the local stdio runtime, preserves bounded text and image content, and forwards only an allowlisted child-process environment.
The Pi package manager installs the Node adapter dependency but does not install Python or ffmpeg. Ensure the python3 visible to Pi is Python 3.12+ with the tube-bridge dependencies installed; install ffmpeg separately to use youtube_get_frame. By default, Pi-managed state lives under the platform data directory; set TUBE_BRIDGE_PI_DATA to move that root. An explicit TUBE_BRIDGE_CACHE still takes precedence for the runtime databases. The optional live frame gate is /tube-bridge-selftest frame.
Remove the package with:
pi remove git:github.com/TheWhiteWater/tube-bridge@v1.1.6If a desktop client cannot find uvx, replace "uvx" with the absolute path returned by which uvx on macOS/Linux or where.exe uvx on Windows.
Try the complete research workflow
Ask your agent:
Search YouTube for recent videos about local-first AI agents. Read the transcript of the strongest result, add it to a corpus named
local-agents, find the section discussing memory, return the timestamped source link, and extract a frame from that moment.
The agent can complete that request with this tool sequence:
youtube_search(query="local-first AI agents", order="date")
youtube_get_transcript(url="https://www.youtube.com/watch?v=VIDEO_ID", with_timestamps=true)
corpus_create(corpus_id="local-agents", label="Local-first AI Agents")
corpus_add(corpus_id="local-agents", url="https://www.youtube.com/watch?v=VIDEO_ID")
corpus_search(corpus_id="local-agents", query="memory architecture")
youtube_get_frame(url="https://www.youtube.com/watch?v=VIDEO_ID", timestamp_ms=FOUND_TIME_MS)Add more videos with corpus_add, then use corpus_search to search across all of their transcripts at once.
Tools
Tool | YouTube API key | What it does |
| Optional | Search videos with date, channel, duration, and ordering filters |
| Optional | Get title, duration, views, channel, description, and tags |
| Optional | Get currently trending videos |
| No | Get recent uploads from a channel URL or |
| No | Get videos from a playlist |
| No | Get a transcript, optionally with |
| No | Return one ephemeral JPEG near an integer-millisecond timestamp |
| No | List manual and auto-generated subtitle tracks |
| Required | Get top-level comments with likes and reply counts |
| Required | Search channels and filter by subscriber count |
| Required | Get channel statistics, country, and keywords |
| No | Create a named local corpus |
| No | Fetch, chunk, and locally embed a video transcript |
| No | Semantically search a corpus with timestamped results |
| No | List corpora with video and chunk counts |
| No | Permanently delete a corpus and its vectors |
| No | Read runtime documentation and known limitations |
No means no YouTube Data API key is needed; network access to YouTube may still be required. Search, video information, and trending work without a key through yt-dlp and upgrade to Data API v3 when a key is configured.
Optional YouTube Data API key
A YouTube Data API v3 key unlocks comments, channel search, and channel details. It also improves search, video information, and trending reliability.
Create a key in Google Cloud Console, enable YouTube Data API v3, and expose it to the process launching tube-bridge:
export YOUTUBE_API_KEY="your-key"Keep keys out of committed MCP configuration files. Use your client's secret/environment support where available.
Local semantic corpus
Corpus storage and embedding inference are local to the machine running tube-bridge.
Storage: SQLite plus sqlite-vec in
~/.tube_bridge/corpus.dbEmbeddings: BGE-small-en-v1.5 through fastembed
Chunking: 80-second windows with 20-second overlap
Ranking: overlap deduplication and source-aware per-video limits
Results: similarity score, time span, video title, canonical URL, and timestamp URL
Set TUBE_BRIDGE_CACHE to move both corpus and cache databases:
export TUBE_BRIDGE_CACHE="/path/to/tube-bridge-data"The embedding model may be downloaded on first use. After the assets are available, embedding inference does not require an external model API.
Frame extraction
youtube_get_frame requires ffmpeg on PATH; the Docker image already includes it.
Each call downloads a short temporary section around timestamp_ms, returns one bounded JPEG as MCP ImageContent, and removes the temporary media before returning. It does not create a frame or clip library.
Other ways to run
Persistent PyPI installation
pip install tube-bridge
tube-bridge # stdio
tube-bridge --http # Streamable HTTP on port 8080Docker
docker run --rm -p 8080:8080 ghcr.io/thewhitewater/tube-bridge:latestThe health endpoint is http://localhost:8080/health; the Streamable HTTP endpoint is http://localhost:8080/mcp.
Official MCP Registry
Registry name: io.github.TheWhiteWater/tube-bridge
Registry-aware clients can install the PyPI distribution with uvx and launch the stdio server without a hosted intermediary.
Remote HTTP configuration
For an HTTP instance you operate:
{
"mcpServers": {
"tube-bridge": {
"type": "http",
"url": "https://your-host.example/mcp"
}
}
}Protect remote MCP routes by setting a server-side Bearer key:
export TUBE_BRIDGE_AUTH_KEY="choose-a-long-random-value"
tube-bridge --httpThen configure a header-capable client:
{
"mcpServers": {
"tube-bridge": {
"type": "http",
"url": "https://your-host.example/mcp",
"headers": {
"Authorization": "Bearer <your-key>"
}
}
}
}/health remains public. /mcp, /sse, and /messages require the Bearer key when TUBE_BRIDGE_AUTH_KEY is set. Legacy SSE is available at /sse for clients that still need it.
Environment variables
Variable | Required | Purpose |
| No | Enables the 3 API-only tools and upgrades supported discovery calls |
| No | Routes yt-dlp and transcript requests through an HTTP(S) or SOCKS proxy |
| No | Changes the directory containing |
| No | Protects self-hosted HTTP MCP routes with a static Bearer token |
How it works
MCP client
│
├── discovery and metadata ── Data API v3 (when configured)
│ └─ yt-dlp fallback
├── transcripts ───────────── youtube-transcript-api
├── timestamped frames ────── yt-dlp + ffmpeg → ephemeral JPEG
└── semantic corpus ───────── SQLite + sqlite-vec + local fastembedstdio is recommended for local clients;
Streamable HTTP is available at
/mcpfor self-hosted remote use;successful fallback responses keep their normal schemas;
controlled failures use typed MCP errors with stable
code,source, andretryablefields;cache and corpus databases are separate and remain operator-owned.
Agent Plugin preview
GitHub Releases include tube-bridge-agent-plugin-<version>.zip, containing:
the local stdio MCP configuration;
the
tube-bridge-researchskill;research templates and source-evaluation guidance.
Agent Plugins v1 does not standardize dependency installation. Install Python 3.12+, ffmpeg, and the package dependencies in the environment used by the plugin host. The bundle contains no credentials.
Known limitations
YouTube can restrict anonymous yt-dlp and transcript requests, especially from cloud-hosting IP ranges.
A Data API key improves discovery and metadata reliability but does not replace transcript access.
Initial local embedding-model setup may require network access and additional disk space.
tube-bridge is self-hosted software; it does not provide accounts, public hosted access, managed storage, or an SLA.
If YouTube blocks requests from your network, set TUBE_BRIDGE_PROXY. Keep proxy credentials in environment variables rather than committed configuration.
Development
git clone https://github.com/TheWhiteWater/tube-bridge.git
cd tube-bridge
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements-release.txt
pip install --no-deps -e .
pip install pytest pytest-asyncio pytest-mock build twine
python -m pytest tests -qpython test_tools.py is an optional live YouTube smoke test. The deterministic test suite does not call YouTube.
See CONTRIBUTING.md to contribute. Security reports should follow SECURITY.md.
License
MIT — see LICENSE.
Available Tools
17 toolscorpus_addADestructive
Fetch a video's transcript, chunk it, and store local embeddings in an existing corpus. Use this after corpus_create; it skips an already-indexed video by default. force_reembed=true deletes and replaces that video's existing local chunks and vectors. This modifies local corpus data and may contact YouTube; returns indexing status and chunk count.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | YouTube video URL or ID | |
| corpus_id | Yes | Corpus ID to add to | |
| force_reembed | No | Re-embed even if already indexed |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructiveHint=true), the description discloses concrete behavioral details: 'skips an already-indexed video by default', 'force_reembed=true deletes and replaces that video's existing local chunks and vectors', and 'may contact YouTube'. It also states the return value ('indexing status and chunk count'), which is useful since no output schema is provided. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each serving a purpose: first states what it does, second gives usage context (sequence and default behavior), third discloses side effects and return info. No redundant or vague language.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (3 params, 2 required, no output schema), the description covers the essential aspects: purpose, prerequisite (corpus_create), default behavior, side effects, external interaction, and return value. It is complete enough for an agent to select and invoke the tool correctly without ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds extra meaning for 'force_reembed' by explicitly explaining that it 'deletes and replaces that video's existing local chunks and vectors', which is beyond the schema's 'Re-embed even if already indexed'. It also clarifies the default skip behavior, providing context not fully captured 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 clearly states the tool's function: fetching a transcript, chunking it, and storing local embeddings in an existing corpus. It uses a specific verb 'add' (implied) and distinguishes itself from sibling tools like youtube_get_transcript and corpus_search by focusing on indexing into a corpus.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says 'Use this after corpus_create', giving a clear sequencing context. It also explains the default skip behavior and the force_reembed alternative. However, it doesn't explicitly name alternatives or exclusions (e.g., 'if you just need a transcript, use youtube_get_transcript'), so it falls short of the highest benchmark.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
corpus_createAIdempotent
Create a named corpus for semantic search over transcripts. Each corpus uses a fixed embedding model.
| Name | Required | Description | Default |
|---|---|---|---|
| label | No | Human-readable label (optional) | |
| corpus_id | Yes | Unique corpus ID (e.g. 'iran-hormuz-2026') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate mutation (readOnlyHint=false), idempotency (idempotentHint=true), and non-destructiveness (destructiveHint=false). The description adds the valuable note that 'Each corpus uses a fixed embedding model', but doesn't disclose other behavioral traits like side effects or confirmation behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no redundant words. It efficiently communicates the tool's core purpose and one key constraint (fixed embedding model).
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 creation tool with two well-documented parameters and no output schema, the description is adequate. It conveys the essential context (creation, use case, embedding model constraint). It could mention what happens on duplicate corpus_id, but the idempotentHint partially covers that.
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 provides 100% coverage of parameters, including descriptions for corpus_id and label. The description's phrase 'named corpus' implicitly aligns with corpus_id, but adds no additional semantic detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Create' with the resource 'corpus' and clearly states its purpose: 'for semantic search over transcripts'. This distinguishes it from sibling tools like corpus_add, corpus_search, corpus_list, and corpus_delete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: it's for creating a named corpus for semantic search over transcripts. While it doesn't explicitly mention alternatives or exclusions, the context makes it apparent when to use this tool versus corpus_add or corpus_search.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
corpus_deleteADestructiveIdempotent
Delete a corpus and all its chunks/vectors permanently.
| Name | Required | Description | Default |
|---|---|---|---|
| corpus_id | Yes | Corpus ID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and idempotentHint=true. The description adds the specific behavior that all chunks/vectors are deleted permanently, which goes beyond the annotations. No contradictions; the added details are useful for understanding the full impact.
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?
A single sentence that conveys all necessary information without redundancy. It is front-loaded with the verb and object, making it immediately understandable.
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 delete operation with one parameter, the description fully covers the action and its consequences. The annotations and schema provide additional safety and parameter details, so no further context is needed.
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% description coverage for corpus_id with a clear description. The tool description does not add further semantics, but the baseline of 3 is appropriate because the schema handles parameter meaning adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Delete a corpus') and the scope ('all its chunks/vectors permanently'). This clearly differentiates from sibling tools like corpus_create, corpus_add, corpus_search, and corpus_list, which all have distinct purposes.
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 permanent deletion but does not explicitly mention when to use it versus alternatives or any exclusions. There is no mention of prerequisites or cautions, but the destructive nature is clear. The tool is straightforward enough that the lack of explicit alternatives is acceptable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
corpus_listARead-onlyIdempotent
List all available corpora with chunk and video counts.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a read-only, idempotent, non-destructive operation. The description adds value beyond those by specifying the response includes chunk and video counts, which is not provided in any schema. This gives the agent a better idea of what to expect from the tool.
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, front-loaded sentence that states the verb, resource, and key output detail without any fluff or redundancy. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless list tool with strong annotations, the description is sufficiently complete. It tells the agent that the tool lists all corpora and includes chunk and video counts, which is enough to use it correctly. However, it could be slightly clearer about whether counts are per corpus or totals.
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?
There are no parameters, and the schema is empty, so the description does not need to add parameter-level detail. The baseline score of 4 applies because no parameters exist and the description provides sufficient context for the tool's behavior.
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 'List' with the resource 'all available corpora', and adds that it includes 'chunk and video counts', clearly distinguishing it from sibling tools like corpus_create, corpus_add, corpus_search, and corpus_delete. This makes the tool's purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when an agent needs to see all corpora and their counts, but it does not explicitly name alternatives or state when not to use it. Since the tool is a simple list-all operation, the context is clear, but there is no explicit guidance relative to sibling tools like corpus_search.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
corpus_searchARead-onlyIdempotent
Semantic search within a corpus. Deduplicates overlapping windows, limits source domination, and returns titles plus timestamp URLs.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Natural language search query | |
| top_k | No | Max results (default 10, max 50) | |
| corpus_id | Yes | Corpus ID to search in |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, and non-destructive behavior. The description adds meaningful behavioral context: deduplication of overlapping windows, limiting source domination, and returning titles plus timestamp URLs. This goes beyond the annotations and helps the agent understand how results are processed and what to expect.
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, well-structured sentence that front-loads the core purpose ('Semantic search within a corpus') and then efficiently adds key behavioral details. There is no wasted wording, and every clause contributes meaningful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of an output schema, the description compensates by stating the return format (titles plus timestamp URLs). It also mentions deduplication and source domination limits, which gives a good sense of behavior. However, it does not elaborate on the meaning of 'source domination' or any edge cases, but this is acceptable for a straightforward search 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 input schema covers 100% of the parameters with clear descriptions (query, top_k, corpus_id), so the baseline is 3. The tool description does not add any additional parameter-specific semantics 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 performs semantic search within a corpus, using 'search' as the verb and 'corpus' as the resource. It further distinguishes itself by noting deduplication, source domination limits, and the specific output format (titles plus timestamp URLs), which differentiates it from sibling YouTube search and corpus management tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Semantic search within a corpus' implies the usage context, but there is no explicit guidance on when to prefer this tool over alternatives or when not to use it. The sibling tools have distinct names and purposes, but the description does not directly mention alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tube_bridge_helpARead-onlyIdempotent
Get tube-bridge documentation: available tools, architecture, known limitations, API key setup.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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, covering the safety profile. The description adds context by listing the documentation's scope (available tools, architecture, known limitations, API key setup), giving the agent insight into what information will be returned. No contradictions with annotations; the description complements them well.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that starts with the action ('Get') and immediately specifies the resource and content. Every word is information-dense, with no redundancy or filler.
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 zero-parameter, no-output-schema documentation tool, the description is fully complete. It explains what the tool does and what the documentation covers, which is all an agent needs to decide to invoke it. The lack of parameters and simple read-only nature mean no additional context is required.
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 zero parameters, so the baseline is 4. The description does not need to explain parameter meanings, as there are none. It correctly focuses on the tool's purpose rather than inventing parameter details.
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: 'Get tube-bridge documentation' and enumerates the specific content covered (available tools, architecture, known limitations, API key setup). The verb 'Get' plus the resource 'documentation' unambiguously identifies this as an informational tool, distinguishing it from operational siblings like youtube_search_channels or corpus_create.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the usage context clear: this is the tool to retrieve documentation about the tube-bridge system. While it does not explicitly contrast with alternatives, the sibling tools are all operational (search, get info, create corpus), so the purpose inherently implies when to use this help tool. It lacks explicit 'use this when' or 'instead of' guidance, but the context is sufficiently clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_get_available_languagesARead-onlyIdempotent
Available subtitle languages for a video. Shows manual vs auto-generated.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | YouTube video URL or ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds the useful behavioral detail that the output distinguishes between manual and auto-generated subtitles, which is not captured by annotations. However, it does not disclose return format, pagination, or other potential behaviors, so the description adds only modest context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences: 'Available subtitle languages for a video. Shows manual vs auto-generated.' Both sentences carry meaningful information, and the key differentiator is front-loaded. 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?
Given the tool's simplicity (single parameter), rich annotations, and no output schema, the description adequately conveys the core purpose and the manual/auto-generated distinction. However, it does not specify the exact return format (e.g., language codes, labels, structure), which would be helpful since no output schema exists. Still, for a simple read-only tool, it is largely 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?
The schema covers 100% of parameters with the description 'YouTube video URL or ID', so the baseline is 3. The tool description provides no additional meaning about the 'url' parameter beyond what the schema already states, so no extra credit is warranted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource ('available subtitle languages for a video') and adds a distinguishing feature ('Shows manual vs auto-generated'), differentiating it from siblings like youtube_get_transcript and youtube_get_video_info. Though it lacks an explicit verb, the tool name and context make the retrieval purpose clear.
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 checking which subtitle languages are available, but it does not explicitly state when to use this tool vs alternatives like youtube_get_transcript or youtube_get_video_info. No exclusions or alternative guidance is provided, so the usage context is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_get_channel_infoARead-onlyIdempotent
Detailed channel metadata: subscribers, views, videos, country, keywords. Requires YOUTUBE_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| channel_id | Yes | YouTube channel ID (starts with UC...) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, idempotent, and non-destructive behavior. The description adds the auth requirement (YOUTUBE_API_KEY) but does not disclose rate limits, failure modes, or response structure, which would enhance 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 a single concise sentence that front-loads the key deliverable (channel metadata) and the auth requirement. Every word adds value, with no unnecessary fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple get-by-ID tool with comprehensive annotations and no output schema, the description adequately covers the metadata returned and the API key prerequisite. It omits potential error behavior but this is not critical for such a straightforward read operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single parameter channel_id, which includes a description of the expected format. The description adds no further parameter-level information, 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 tool retrieves detailed channel metadata, listing specific data types (subscribers, views, videos, country, keywords). This distinguishes it from siblings like youtube_get_video_info and youtube_get_channel_videos.
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 obtaining detailed metadata for a known channel ID, but it does not explicitly state when to use this tool versus alternatives like youtube_search_channels. No exclusions or alternative tool mentions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_get_channel_videosARead-onlyIdempotent
List up to limit recent uploads from a known YouTube channel URL or @handle. Use this for channel browsing, not keyword search or channel metadata. Read-only and keyless; returns normalized channel metadata plus video records. Empty results include a warning when the channel is missing or has no uploads.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max videos (default 10) | |
| channel_url | Yes | Channel URL or @handle |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite annotations already covering read-only, idempotent, and non-destructive, the description adds keyless access, normalized return structure, and empty-result warning behavior. This is meaningful context beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences front-load the core action, then usage guidance, then behavioral details. No redundant words, every sentence adds value.
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 no output schema, the description covers purpose, usage boundaries, return composition, and edge-case behavior. This is complete enough for an agent to invoke confidently.
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 both parameters described. The description repeats channel_url (@handle) and limit (max count) without adding new semantic details beyond 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?
Clearly states it lists recent uploads from a channel URL or @handle, with a specific verb and resource. Explicitly distinguishes from keyword search and channel metadata, aligning with sibling tools like youtube_search and youtube_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?
Provides explicit when-to-use guidance: 'Use this for channel browsing, not keyword search or channel metadata.' This tells the agent the intended context and excludes common alternatives, making selection straightforward.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_get_commentsARead-onlyIdempotent
Retrieve up to max_results top-level comments for a known YouTube video. Use this for audience reactions, not video metadata or transcripts. Read-only and requires YOUTUBE_API_KEY; returns structured comment records. Calls may fail when comments are disabled, the video is unavailable, or Data API quota is exhausted.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | YouTube video URL or ID | |
| max_results | No | Max comments (default 20) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint and destructiveHint, and the description adds meaningful context: requires YOUTUBE_API_KEY, returns structured comment records, and enumerates failure scenarios (comments disabled, video unavailable, quota exhausted). This goes well beyond annotations and helps the agent anticipate errors.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: purpose, use case, and behavioral notes. Information is front-loaded and there is 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?
Given the tool's simplicity (2 params, read-only, no output schema), the description covers purpose, usage boundaries, auth requirements, return type, and failure modes. It is fully sufficient 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%, so both parameters are already documented. The description mentions max_results but adds no new semantics beyond what the schema states. Baseline 3 applies because structured data carries the burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves top-level comments for a YouTube video, using the specific verb "Retrieve" and resource. It distinguishes from siblings by explicitly saying "not video metadata or transcripts," making it unique among the tool list.
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: "Use this for audience reactions," and excludes metadata/transcripts. It does not name alternative tools directly, but the sibling list and exclusions imply the boundaries. This is strong but lacks a named alternative, so not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_get_frameARead-onlyIdempotent
Extract one ephemeral JPEG near an integer-millisecond timestamp. Returns metadata plus MCP ImageContent; accuracy is best-effort at a decoded frame boundary.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | YouTube video URL or ID | |
| max_width | No | Maximum JPEG width in pixels (default 640) | |
| timestamp_ms | Yes | Frame timestamp in integer milliseconds |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral context beyond the annotations (readOnly, idempotent, destructive=false). It discloses that the returned JPEG is ephemeral, that extraction is best-effort, and that the timestamp is approximate ('near'), which is valuable for setting expectations. It also states the return format (metadata plus MCP ImageContent). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The core function leads, and the second sentence efficiently covers return type and accuracy limitations. It is appropriately sized for the tool's complexity and well front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a relatively simple read-only extractor, the description covers the essential return value (metadata plus image), accuracy limits, and the schema covers all parameters. The annotations handle safety. It lacks some details like error cases or authentication, but these are not critical given the readOnly/idempotent hints and the tool's narrow scope.
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 covers all parameters (100% coverage), so the baseline is 3. However, the description's phrase 'near an integer-millisecond timestamp' adds precision semantics to timestamp_ms, clarifying that the given value is a target rather than an exact millisecond. This goes beyond the schema's simple 'Frame timestamp in integer milliseconds.'
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action: 'Extract one ephemeral JPEG near an integer-millisecond timestamp.' This uses a strong verb ('extract') and a concrete resource (a JPEG frame), and it is distinct from sibling tools that search or retrieve metadata/transcripts. It immediately communicates the tool's purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context (when a video frame is needed) but provides no explicit guidance on when to choose this tool over siblings or any exclusions. Unlike the calibration example, it does not name alternative tools or describe scenarios where this tool is not appropriate. The 'near a timestamp' phrasing does hint at precision trade-offs but not usage boundaries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_get_playlistARead-onlyIdempotent
List up to limit videos from a known YouTube playlist URL in upstream order. Use this for playlist contents, not channel uploads or keyword search. Read-only and keyless; returns playlist metadata plus ordered video records. Results are bounded and may fail when the playlist is private, unavailable, or blocked upstream.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max videos (default 20) | |
| playlist_url | Yes | Playlist URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, open-world, and non-destructive behavior. The description adds valuable context beyond annotations: it states the tool is keyless, returns playlist metadata plus ordered video records, results are bounded by limit, and failures occur for private/unavailable/blocked playlists. This fully complements the annotation set.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences cover the core action, usage boundaries, and failure modes without any redundant phrasing. Every sentence contributes meaningful information, and the structure is front-loaded with the primary action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the small parameter count, rich annotations, and no output schema, the description covers all essential aspects: input requirement (known playlist URL), return content (playlist metadata + ordered videos), execution bound (limit), and likely failure conditions. It is complete for this simple tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for both parameters, so the description is not required to add much. It reinforces the meaning of `limit` ('up to `limit` videos') but does not introduce new parameter-specific details beyond what the schema already says.
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 resource ('videos from a known YouTube playlist URL') and scopes the operation ('up to `limit` videos in upstream order'). It explicitly distinguishes from sibling alternatives by stating 'not channel uploads or keyword search', making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear when-to-use guidance: 'Use this for playlist contents, not channel uploads or keyword search.' This identifies the appropriate context and excludes alternatives, though it does not name specific sibling tools as in the highest-caliber examples.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_get_transcriptARead-onlyIdempotent
Transcript/subtitles of a YouTube video. Uses the original/default language; manual > ASR within that language.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | YouTube video URL or ID | |
| lang | No | Language code (e.g. en, ru). Auto-detect if not specified. | |
| with_timestamps | No | Include [MM:SS] timestamps (default: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond the read-only and idempotent annotations by explaining language selection behavior: it uses the original/default language and prefers manually created subtitles over ASR-generated ones. This helps the agent understand what transcript it will receive but does not cover potential edge cases like missing transcripts.
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—two short sentences—and front-loads the core purpose in the first sentence. The second sentence adds a key behavioral detail without unnecessary fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with only three parameters and no output schema, the description adequately conveys purpose and key behavior. It does not mention failure cases or output format, but annotations and schema cover safety and parameter details, making it complete enough for this tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes all three parameters with 100% coverage, so the baseline is 3. The description adds value by clarifying that the lang parameter defaults to the video's original language and that manual subtitles are preferred over ASR, which supplements the parameter description and agent understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns the transcript/subtitles of a YouTube video, which distinguishes it from sibling tools like youtube_get_video_info or youtube_get_frame. However, it is phrased as a noun phrase rather than an explicit verb+resource action, so it is clear but not maximally explicit.
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 intended use case is implied by the description: retrieving transcript text for a YouTube video. There is no explicit mention of when to use this tool over alternatives, nor any exclusions. The note about original/default language and manual > ASR gives context but no direct alternatives are named, so usage guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_get_trendingARead-onlyIdempotent
List up to limit currently trending YouTube videos. Use this for broad discovery, not keyword search. Read-only; uses Data API v3 when YOUTUBE_API_KEY is set and otherwise a keyless yt-dlp fallback. Returns source metadata and video records; results can change over time and depend on upstream availability.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default 10) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, it discloses auth needs (Data API v3 vs keyless yt-dlp fallback), return contents (source metadata and video records), and variability over time. This adds meaningful behavioral context without contradicting the read-only/idempotent hints.
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 with no fluff. It opens with the main purpose, then usage guidance, then behavioral notes, making it well-structured and efficiently front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter list tool with no output schema, it covers purpose, usage boundaries, data source behavior, and return contents. This is complete enough for an agent to select and invoke it appropriately.
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 documents 'limit' with 'Max results (default 10)' at 100% coverage. The description repeats the parameter name but doesn't add additional semantic meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'List' with the resource 'currently trending YouTube videos' and scope 'up to limit'. It also explicitly distinguishes itself from keyword search, which differentiates it from the sibling youtube_search tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states 'Use this for broad discovery, not keyword search', providing clear when-to-use context and an exclusion. It also mentions the data source fallback and that results change over time, but it doesn't name the exact alternative tool (e.g., youtube_search).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_get_video_infoARead-onlyIdempotent
Detailed metadata for a YouTube video: title, duration, views, channel, description, tags.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | YouTube video URL or ID |
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, which is useful context beyond annotations. However, it does not disclose any limitations, error conditions, or response format, which is acceptable given annotation coverage but not exceptional.
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, well-structured sentence that lists the key metadata fields. It is front-loaded and every word adds value, with no redundancy or irrelevant 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?
For a simple one-parameter read-only tool with no output schema, the description adequately conveys the purpose and return content by listing metadata fields. It does not mention caveats like video availability or authentication, but given the simplicity and annotations, it is sufficiently 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?
The schema fully describes the only parameter 'url' as 'YouTube video URL or ID' (100% coverage). The description adds no additional meaning about the parameter, so it relies entirely on the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool provides detailed metadata for a YouTube video, listing specific fields (title, duration, views, channel, description, tags). This distinguishes it from sibling tools like channel info or search. However, it lacks an explicit verb like 'retrieves' or 'returns', so it's not a perfect 5.
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 fetching metadata of a specific video, but it does not explicitly state when to use it over alternatives like youtube_get_channel_info or youtube_search. No exclusions or comparison to siblings are provided, so only implied usage is present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_searchARead-onlyIdempotent
Search YouTube videos. Uses Data API v3 when YOUTUBE_API_KEY is set, falls back to yt-dlp. Filters: date range, channel, duration, order.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default 10, max 50) | |
| order | No | Sort: date, rating, relevance, viewCount, title (API only) | |
| query | Yes | Search query | |
| channel_id | No | Restrict to channel ID (API only) | |
| video_duration | No | short, medium, long (API only) | |
| published_after | No | ISO 8601 date filter (API only) | |
| published_before | No | ISO 8601 date filter (API only) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
While annotations already declare readOnly/open world/idempotent behavior, the description adds valuable non-obvious behavioral context: the tool switches between Data API v3 and yt-dlp depending on API key presence. This affects result consistency and feature availability, going beyond what annotations express. It also lists supported filters, giving a clearer operational picture.
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: two sentences front-loaded with the core purpose, followed by backend behavior and filter list. Every word earns its place, with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 7 parameters, no output schema, and good annotations, the description covers purpose, backend behavior, and filters. However, it does not mention return format or pagination behavior, and the fallback mode's impact on filter availability is only indirectly indicated via the schema. Still, the description is largely complete for a search tool with rich schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already documents each parameter with descriptions and the '(API only)' caveat. The description's filter list (date range, channel, duration, order) maps to existing schema properties but adds no new syntax or semantic details beyond the structured definitions. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Search YouTube videos,' a specific verb+resource that clearly distinguishes this from sibling tools like youtube_search_channels (for channels) and youtube_get_channel_videos (for videos from a channel). It also enumerates key filters, reinforcing 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 usage context by noting the backend selection (API vs yt-dlp) based on YOUTUBE_API_KEY availability. However, it does not explicitly mention alternatives like youtube_search_channels or explain when not to use this tool, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_search_channelsARead-onlyIdempotent
Search YouTube channels by name/topic. Returns subscriber counts, video counts, country. Requires YOUTUBE_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default 10) | |
| order | No | relevance, date | |
| query | Yes | Channel name or topic | |
| max_subscribers | No | Maximum subscriber filter | |
| min_subscribers | No | Minimum subscriber filter |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the operation as read-only, idempotent, and non-destructive. The description adds valuable context beyond annotations: it explicitly requires YOUTUBE_API_KEY and discloses the output fields (subscriber counts, video counts, country). This is meaningful supplementary transparency, though it does not cover rate limits 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 two sentences, front-loaded with the action, and every clause adds value. No wasted words or redundancy with the schema/annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 5 parameters and no output schema, but annotations are rich. The description covers the primary purpose, key return fields, and an API requirement, which is adequate. However, it omits details about query formatting, filter interaction, or pagination behavior—though some of this lives in the schema. Not a fully comprehensive picture but above average.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all parameters are documented. The description does not add extra semantic detail beyond the schema; it only paraphrases the query field as 'name/topic.' This aligns with the baseline 3 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 searches YouTube channels by name or topic, with a specific verb ('Search') and resource ('YouTube channels'). It also lists returned fields (subscriber counts, video counts, country), which distinguishes it from sibling tools like youtube_get_channel_info and youtube_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 usage for channel discovery but does not explicitly compare itself to alternatives like youtube_search (likely videos) or youtube_get_channel_info. The API key requirement is a useful prerequisite, but without exclusions or named alternatives, the guidance is only implied.
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.
2 tool updates
v1.1.1- Changed
corpus_search3 fields changed- changed
Input schema / properties / top_k / descriptionPrevious value: -"Max results (default 10)"New value: +"Max results (default 10, max 50)" - added
Input schema / properties / top_k / maximumAdded value: +50 - added
Input schema / properties / top_k / minimumAdded value: +1
- Added
youtube_get_frame
16 tool updates
v1.0.3- First observed
corpus_add - First observed
corpus_create - First observed
corpus_delete - First observed
corpus_list - First observed
corpus_search - First observed
tube_bridge_help - First observed
youtube_get_available_languages - First observed
youtube_get_channel_info - First observed
youtube_get_channel_videos - First observed
youtube_get_comments - First observed
youtube_get_playlist - First observed
youtube_get_transcript - First observed
youtube_get_trending - First observed
youtube_get_video_info - First observed
youtube_search - First observed
youtube_search_channels
TDQS
Scored across 17 tools
Every tool addresses a distinct resource or action: searching channels vs. videos, fetching channel metadata vs. channel uploads, video metadata vs. transcript vs. comments vs. frames, and clear corpus operations. Even similar-looking tools like youtube_get_channel_info and youtube_get_channel_videos are unambiguous due to explicit descriptions.
Most tools follow a predictable pattern: youtube_<verb>_<resource> or corpus_<verb>. Minor deviations include youtube_get_trending (no resource noun) and tube_bridge_help (namespace mismatch), but the overall structure remains readable and consistent.
With 17 tools covering YouTube data retrieval, transcript processing, and semantic corpus management, the count is slightly high but justified by the broad scope. Each tool has a clear purpose, and the split between YouTube-facing and corpus-facing tools keeps the set manageable.
The tool set covers the full YouTube read-only surface: search, channel/video/playlist metadata, transcripts, frames, languages, comments, and trending. Corpus tools provide create/add/search/list/delete, and force_reembed covers updates. The help tool fills documentation gaps, so no critical operations are missing.
Maintenance
Related MCP Connectors
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.
YouTube transcripts, search, channel/playlist listings and upload tracking for AI agents. No signup.
💯 The fastest YouTube transcript + YouTube search MCP for AI agents. Try for free.
MCP server for Clipkit — gives AI agents a video toolbox via the Clipkit schema.
Related MCP Servers
- AlicenseBqualityDmaintenanceAn MCP server that provides AI assistants with powerful tools to interact with YouTube, including video searching, transcript extraction, comment retrieval, and more.819Apache 2.0
- AlicenseNot gradedqualityNot gradedmaintenanceAn MCP server that provides YouTube data access without API keys or quotas. It enables agents to search videos, retrieve transcripts and metadata, and perform full-text search across cached content for AI context retrieval.3-
- AlicenseAqualityDmaintenanceMCP server that provides YouTube video data to AI agents, supporting search, metadata, comments, and transcripts without an API key.514MIT
- AlicenseAqualityDmaintenanceMCP server that lets AI agents search YouTube and fetch transcripts.23MIT