YouTube Transcript & Search MCP Server
Provides tools for fetching YouTube video transcripts in multiple formats, retrieving video metadata, searching videos and channels, listing channel videos, and running bulk transcript jobs.
🎬 Why
Everyone who works with an agent has run this exchange at least once.
You: Summarize this. https://www.youtube.com/watch?v=kCc8FmEb1nY
Agent: I'm not able to watch videos. If you paste the transcript here, I'll gladly help!The transcript is precisely the thing the agent cannot get on its own. With this server connected, the same message simply resolves.
You: Summarize this. https://www.youtube.com/watch?v=kCc8FmEb1nY
Agent: → get_transcript(video="kCc8FmEb1nY", video_metadata=true) 1 credit
That's "Let's build GPT: from scratch, in code, spelled out" by Andrej
Karpathy, 1:56:20. He starts from an empty file and a bigram model,
derives self-attention step by step, and ends with a working GPT that...Reading one video is rarely where the job ends. Here is how the three ways of getting YouTube data into an agent actually compare.
This server | Local yt-dlp / scraper MCP | Google YouTube Data API | |
Transcripts | ✅ any public video, 5 formats | ⚠️ blocked on datacenter IPs, breaks when YouTube changes markup | ❌ not served at all |
Setup | ✅ a URL and an API key | ❌ local install, binaries to keep alive | ❌ Cloud project, OAuth consent screens |
YouTube search | ✅ native, 1 credit per page | ❌ | ⚠️ 100 quota units per search |
Channels & playlists | ✅ 100 videos/page, or 500 bare IDs | ❌ one video at a time | ⚠️ quota-metered per item |
Bulk transcripts | ✅ 4,000 per background job | ❌ | ❌ |
RAG-ready chunking | ✅ 20-5,000 chars, word-level timestamps | ❌ | ❌ |
When YouTube changes | ✅ fixed server-side, nothing to update | ❌ you patch and redeploy | ✅ |
Failed calls | ✅ credits refund themselves | ❌ your retry logic | ⚠️ quota spent anyway |
Related MCP server: VidLens
⚡ Quick start
1. Get an API key. Sign up at transcriptout.com and create a key
in the dashboard. New accounts receive 100 free credits and
no card is asked. Keys start with sk_ and are shown once.
2. Point your client at the server. It speaks streamable HTTP and authenticates with one Bearer header.
{
"mcpServers": {
"transcriptout": {
"url": "https://api.transcriptout.com/mcp",
"headers": { "Authorization": "Bearer YOUR_API_KEY" }
}
}
}One-click buttons for Cursor and VS Code sit at the top of this page. Exact snippets for the rest live under Install in your client.
3. Paste a link.
Summarize this talk and pull the three strongest quotes.
https://www.youtube.com/watch?v=dQw4w9WgXcQThe agent picks get_transcript on its own, reads the timed text and answers from it. Every
response carries an X-Credits-Remaining header, so the budget stays in view the whole session.
🧰 The 14 tools
All 14 tools are exposed automatically once you connect. Most calls cost 1 credit. Credits are refunded automatically when a call fails before reaching YouTube (validation errors, rate limits, our own capacity), so you pay for answers, not for failures. A definitive "this video has no captions" is an answer and is billed like one.
1. get_transcript · 1 credit
Fetch the transcript of any YouTube video. format=text (default) returns plain readable text,
cheapest for a model to reason over, and format=json returns timed segments.
Parameter | Type | Default | Description |
| string | required | YouTube URL (full or short) or 11-char video ID |
| string |
| Language code of the track ( |
| string |
|
|
| string | auto-detect |
|
| integer | see below | Max characters per segment. 500-1500 makes RAG-ready chunks |
| boolean |
| Add title, channel, duration and views in the SAME call, same 1 credit |
Left out, segment cuts auto-generated tracks into ~180-character segments and returns manual
tracks exactly as their author broke them. Pass it whenever you need one size regardless of which
track answers.
Example output (format=json):
{
"video_id": "dQw4w9WgXcQ",
"language": "en",
"kind": "manual",
"transcript": [
{ "text": "Never gonna give you up", "start": 18.0, "duration": 4.12 },
{ "text": "Never gonna let you down", "start": 22.12, "duration": 3.85 }
]
}
srtandvttcome back as complete subtitle file bodies, ready to be written to disk by the agent.srv3is the raw source XML and does not combine withsegment.
2. get_video_info · 1 credit
Metadata for one video (title, channel, duration, views, thumbnails) plus the list of available transcript languages, WITHOUT downloading the subtitles.
Parameter | Type | Default | Description |
| string | required | YouTube video ID or URL |
Credit hygiene: if you are going to fetch the transcript anyway, call
get_transcriptwithvideo_metadata=trueinstead. It returns both for one credit where these are two calls and two.
3. search_youtube · 1 credit/page
Search YouTube for videos or channels. Paginate with next_page_token. has_more tells you
whether another page exists.
Parameter | Type | Default | Description |
| string | required* | Search query (*unless paginating) |
| string |
|
|
| integer |
| Results per page, 1-50 |
| string | Token from a previous result |
4. list_channel_videos · 1 credit/page
List videos from a channel's Videos tab, newest first. Accepts an @handle, a channel name, a
UC... channel ID or a channel URL.
Parameter | Type | Default | Description |
| string | required* |
|
| integer |
| Page size, up to 500 with |
| boolean |
| Return just |
| string | Token from a previous result |
ids_only=trueis the cheap way to feedsubmit_transcripts_job.
5. search_channel_videos · 1 credit/page
Search inside one channel using YouTube's native relevance search. A result whose title lacks the query word is normal. Results are ranked by relevance, not by substring.
Parameter | Type | Default | Description |
| string | required |
|
| string | required | Query to search within the channel |
| integer |
| Results per page, 1-100 |
| string | Pagination token |
6. latest_channel_videos · 1 credit
The ~15 most recent videos of a channel from its RSS feed. The fastest and cheapest way to check what a channel published recently.
Parameter | Type | Default | Description |
| string | required |
|
7. list_playlist_videos · 1 credit/page
Every video of a playlist in playlist order. Accepts a PL... playlist ID or a URL with list=.
Parameter | Type | Default | Description |
| string | required* | Playlist ID or URL |
| integer |
| Page size, up to 500 with |
| boolean |
| Return just |
| string | Pagination token |
8. search_playlist_videos · 1 credit
Find videos inside a playlist by a substring of the title (case-insensitive). YouTube has no native
playlist search, so this scans up to 500 playlist items. truncated=true means there may be more
matches beyond the scanned window.
Parameter | Type | Default | Description |
| string | required | Playlist ID or URL |
| string | required | Substring to match in video titles |
| integer |
| Max matches, 1-100 |
9. submit_transcripts_job · 1 credit per video
Queue transcripts for MANY videos at once (up to 4,000) and get a job_id back immediately. The
work continues in the background at your rate limit's pace. Use this instead of calling
get_transcript in a loop for more than a handful of videos.
Parameter | Type | Default | Description |
| string[] | required | Video IDs or URLs, up to 4,000. Duplicates collapse BEFORE billing |
| string |
| One language for the whole job |
| string |
|
|
| string | auto-detect |
|
| integer | One segment size for the whole job | |
| boolean |
| Metadata per video, no extra cost |
| string | Resubmitting the same list with the same key returns the SAME job, no double charge |
Requires a user key (sk_...). Credits are charged on submit and refunded per video when a video
could not be delivered through our fault.
10. get_transcripts_job · free
Progress of a batch job: status (queued/running/done/cancelled), how many videos are ready,
failed and pending. Polling a job you already paid for costs nothing.
11. get_transcripts_results · free
Finished transcripts from a batch job, in the order submitted, paged with next_page_token
(limit 1-500, default 100). Results appear as they are fetched, so you can read before the job is
done. Each entry is exactly what get_transcript returns for that video, plus its status.
12. get_transcripts_result · free
One video's result out of a batch job, by its video id, without paging through the whole result
set. A 404 means the job does not exist or this video has not finished yet, so check
get_transcripts_job before concluding anything.
Parameter | Type | Default | Description |
| string | required | Job id from |
| string | required | One of the video ids the job was submitted with |
13. cancel_transcripts_job · free
Cancel a batch job. Credits are refunded ONLY for videos not started yet. Anything already fetched stays in the results and stays paid for.
14. get_credits · free
The remaining credit balance of the key, with no parameters. The balance also rides in the
X-Credits-Remaining header of every response, but headers are invisible to the model, so the
number a user actually asks about needs a tool. Handy right before a large batch too, since the
batch charges 1 credit per video on submit.
🔌 Install in your client
The server is remote, so every install below is a config entry and nothing more. All of them want the same two values, the URL and the Bearer header from Quick start.
Worth doing once, a standing rule for your client
With this in your client's rules/instructions, pasting a YouTube link is enough and the word "transcript" never has to be typed:
Whenever a YouTube link or video ID appears in my message, call the transcriptout get_transcript tool first and answer from the transcript, whether I asked for a summary, a quote, a translation or a question.
One-Click Install:
After installing, open the server settings and add the Authorization header with your key.
Manual configuration (~/.cursor/mcp.json):
{
"mcpServers": {
"transcriptout": {
"url": "https://api.transcriptout.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}claude mcp add --transport http transcriptout https://api.transcriptout.com/mcp \
--header "Authorization: Bearer YOUR_API_KEY"Claude's custom connectors authenticate remote servers via OAuth, which TranscriptOut does not offer yet (API keys only). On desktop, use Claude Code (see above), which supports API-key headers. OAuth support is on the roadmap. Watch the changelog.
Or add this to VS Code user settings (settings.json):
"mcp.servers": {
"transcriptout": {
"type": "http",
"url": "https://api.transcriptout.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}Create a new Agent
Under "Actions" or "Tools", add a new MCP Server
URL:
https://api.transcriptout.com/mcpAuth Type: API Key
Paste your API key from the dashboard
Add to ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"transcriptout": {
"serverUrl": "https://api.transcriptout.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}{
"mcpServers": {
"transcriptout": {
"url": "https://api.transcriptout.com/mcp",
"type": "streamableHttp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}In Zed settings.json:
{
"context_servers": {
"transcriptout": {
"source": "remote",
"url": "https://api.transcriptout.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}{
"mcpServers": {
"transcriptout": {
"type": "streamable-http",
"url": "https://api.transcriptout.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}amp mcp add transcriptout https://api.transcriptout.com/mcp --header "Authorization: Bearer YOUR_API_KEY"In settings.json under augment.advanced:
"augment.advanced": {
"mcpServers": [
{
"name": "transcriptout",
"url": "https://api.transcriptout.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
]
}In .kilocode/mcp.json:
{
"mcpServers": {
"transcriptout": {
"type": "streamable-http",
"url": "https://api.transcriptout.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}In Settings → Tools → AI Assistant → MCP:
{
"mcpServers": {
"transcriptout": {
"url": "https://api.transcriptout.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}In ~/.gemini/settings.json:
{
"mcpServers": {
"transcriptout": {
"httpUrl": "https://api.transcriptout.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}In ~/.qwen/settings.json:
{
"mcpServers": {
"transcriptout": {
"httpUrl": "https://api.transcriptout.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}{
"mcpServers": {
"transcriptout": {
"serverUrl": "https://api.transcriptout.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}{
"mcpServers": {
"transcriptout": {
"url": "https://api.transcriptout.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}In mcp.json:
{
"mcpServers": {
"transcriptout": {
"url": "https://api.transcriptout.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}In Settings → AI → MCP:
{
"transcriptout": {
"url": "https://api.transcriptout.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}In Settings → Connectors → Advanced:
{
"url": "https://api.transcriptout.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}🧩 Install as an Agent Plugin
This repository root is a conformant Agent Plugins 1.0.0
package, the portable format supported by ChatGPT, Codex, Cursor, GitHub Copilot, Kiro and VS Code.
One install gets you the MCP server and a bundled youtube skill that teaches your agent when
to use each tool and how not to waste credits.
plugin.json # manifest
mcp.json # hosted MCP server, streamable-http
skills/youtube/SKILL.md # when + how to use the 14 toolsVS Code. Command Palette → Chat: Install Plugin From Source, then paste:
https://github.com/artemchuikin/youtube-mcpOr register a local clone in settings.json:
"chat.pluginLocations": { "/absolute/path/to/youtube-mcp": true }Cursor. Customize in the sidebar → find the plugin → Install. For a local clone:
git clone https://github.com/artemchuikin/youtube-mcp ~/.cursor/plugins/local/transcriptoutThen Developer: Reload Window.
ChatGPT, Codex, GitHub Copilot, Kiro, any other client. Point your client's plugin mechanism at this repository, or at a local clone. Agent Plugins 1.0.0 standardizes the package format, not installation, so each client owns its own install flow.
There are no credentials in this package, Agent Plugins 1.0.0 forbids embedded secrets. The server authenticates with an API key you add in your client's MCP settings (see Keys and security). Verify the package yourself:
curl -sO https://agent-plugins.org/schemas/1.0.0/plugin.schema.json
curl -sO https://agent-plugins.org/schemas/1.0.0/mcp.schema.json
npx ajv-cli@5 validate --spec=draft2020 -s plugin.schema.json -d plugin.json
npx ajv-cli@5 validate --spec=draft2020 -s mcp.schema.json -d mcp.json🔑 Keys and security
A key is shown once, at creation. Keep it in an environment variable and out of version control.
A leaked key dies the moment you revoke it in the dashboard. An account holds up to 20 keys, so give every machine its own.
Prefer to stay in the chat? An agent with the companion youtube-skills installed can open the account and mint the key for you, by email and a 6-digit code, no browser involved.
There is no OAuth flow yet, so clients whose connectors cannot send a custom header (Claude Desktop and Claude Web) should go through Claude Code for now.
🐳 Run it locally
The hosted endpoint needs no install, but stdio-only clients, sandboxes and container platforms
sometimes want a process of their own. The repo carries one: server.js is a complete local MCP
server (official SDK, stdio transport) whose 14 tools each make one HTTPS call to the TranscriptOut
REST API — the same shape as any SaaS-backed MCP server.
# as a container
docker build -t transcriptout-mcp https://github.com/artemchuikin/youtube-mcp.git
docker run -i -e TRANSCRIPTOUT_API_KEY=sk_your_key transcriptout-mcp
# or straight from a checkout (Node 20+)
npm install && TRANSCRIPTOUT_API_KEY=sk_your_key node server.jsWithout a key it still connects and lists all tools; tool calls answer with a clear 401 that says
where to get one. Tool definitions ship in tools.json and refresh from the live catalog at
startup when the network allows, so the local list never goes stale.
🍳 Recipes
Every prompt below is paste-able as written.
Use Case | Example Prompt |
📝 Summarize a video | "Summarize the key points from this video: [URL]" |
🔍 Research a topic | "Search YouTube for the 5 most-watched videos on neural radiance fields and summarize each." |
🧠 Study notes | "Create study notes from this MIT lecture series playlist: [PLAYLIST URL]" |
⚖️ Compare perspectives | "Compare arguments in these two videos: [URL1] [URL2]" |
🌐 Translate | "Translate this video's transcript to Spanish: [URL]" |
✍️ Repurpose content | "Turn this video into a 1,500-word blog post: [URL]" |
📡 Monitor a creator | "Each morning, list new uploads from @kurzgesagt and tell me which to watch." |
🏛️ Build a content database | "Pull every video ID from @3blue1brown and queue a transcript batch for all of them." |
🎯 Competitor analysis | "Search inside @fireship for any video about [competitor product] and summarize the takeaways." |
🧩 RAG ingestion | "Fetch this playlist's transcripts as JSON with segment=1000 and load them into the index." |
The bulk recipe spelled out. "Archive a whole channel" is four tool calls, not a script:
list_channel_videoswithids_only=true: up to 500 video IDs per pagesubmit_transcripts_jobwith those IDs (up to 4,000, duplicates dropped before billing,idempotency_keymakes a retry free)get_transcripts_jobuntilstatusisdone. The job paces itself inside your rate limitget_transcripts_resultspage by page, readable while the job still runs
Anything the service fails to deliver is refunded per video, so the bill matches the archive.
💳 Pricing and limits
Plan | Price | Credits | Rate Limit |
Free | $0 | 100 on signup (one-time) | 200 req/min |
Starter | $4.49/month | 1,000/month | 200 req/min |
Starter Annual | $45.29/year (~$3.77/mo) | 1,000/month | 200 req/min |
Scale | slider up to $198.99/mo | up to 100,000/month | 200 req/min |
Subscriptions are a slider from 1,000 to 100,000 credits/month in steps of 1,000, and the per-1,000 rate falls with volume (10,000/mo is $27.49, not $44.90). The annual discount grows with volume, from ~16% to ~35%.
1 credit = 1 answered request. Calls that fail before reaching YouTube (validation, rate limit, our capacity) are refunded automatically. The running balance rides in the
X-Credits-Remainingheader.One-time credit packs that never expire can be bought on top of an active subscription.
🧯 When a call fails
Verify your API key starts with
sk_Check for extra spaces when copying
Ensure the key is active in your dashboard
Revoked keys fail immediately. Issue a new one in the dashboard
Check your balance in the dashboard
Subscribe or buy a credit pack at transcriptout.com/billing
404: the video has no captions on the requested language/track, or the ID is wrong. This is a definitive answer, retrying won't change it.410: the video was removed.451: age-restricted or members-only content.
Respect the
Retry-Afterheader. Both are refunded automaticallyFor bulk work use
submit_transcripts_job: it paces itself inside your rate limit instead of bouncing off it
Every error body is {"ok": false, "code": "...", "detail": "...", "request_id": "req_..."}.
Branch on the machine-readable code, not on the human text. Include request_id when contacting
support.
🌐 Prefer plain REST?
Building an app instead of an agent? The same backend ships as a JSON REST API, with the same
five transcript formats plus raw file download (download=true).
MCP | REST API | |
Best for | AI assistants & agents | Apps & backend services |
Setup | Add a URL + key | Code integration |
Get started | This README |
Base URL: https://api.transcriptout.com/v1
🔗 Links
🌐 Website: transcriptout.com
📚 Docs: transcriptout.com/docs
🧰 Agent skills (same backend, no MCP required): github.com/artemchuikin/youtube-skills
💬 Contact: support@transcriptout.com
📇 MCP Registry
This server is published to the official Model Context Protocol Registry under the name:
com.transcriptout/youtube-transcript-and-youtube-searchTranscriptOut is an independent service and is not affiliated with, endorsed by, or sponsored by YouTube or Google LLC. "YouTube" is a trademark of Google LLC.
Available Tools
14 toolscancel_transcripts_jobCancel batch jobADestructiveIdempotentInspect
Cancel a batch job. Credits are refunded ONLY for videos not started yet — anything already fetched stays in the results and stays paid for. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | id returned by submit_transcripts_job |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations already disclosing destructive and idempotent behavior, it states the partial refund policy and that completed work remains paid for and stays in results. It also notes the operation is free, which is useful non-obvious 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?
Three short sentences, each valuable: the operation, the refund semantics, and the cost. The core intent appears first and there is no 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 single-parameter destructive operation with an output schema, the description covers the most important behavior and economics. It could mention what happens if the job is already complete or already canceled, but 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 tool description does not add param details, but the schema already provides full coverage: job_id is described as 'id returned by submit_transcripts_job'. The description's general reference to 'a batch job' aligns with this parameter, so no real gap exists.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with 'Cancel a batch job', clearly naming the action and its target. It is easily distinct from the get/search/submit siblings, and the title reinforces the operation.
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 refund condition ('Credits are refunded ONLY for videos not started yet') gives a concrete rule for deciding whether a cancellation is still worthwhile. It implies this should be used when the caller wants to stop a previously submitted batch job, though it does not explicitly list when to avoid cancellation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_creditsCredit balanceARead-onlyInspect
Check the remaining credit balance of the API key. Free. Use it when the user asks how many credits are left, or before submit_transcripts_job to confirm a large batch fits the balance (the batch charges 1 credit per video on submit).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| credits | No | |
| metered | No | |
| user_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, and the description reinforces this with the word 'Check'. It adds context beyond annotations by noting the tool is free and by clarifying the credit accounting relationship with submit_transcripts_job (1 credit per video). This is useful behavioral context, though it does not discuss output format or failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences cover purpose, cost, and two concrete use cases. There is no filler, and the primary action is front-loaded. 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 read-only, parameterless tool with no additional configuration, the description covers all necessary context: what it does, when to use it, and how credit usage relates to submit_transcripts_job. The output schema is present, so the return value format does not need to be described in the text. Nothing essential 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 tool has zero parameters, and the schema is fully clear with an empty object. The description adds no parameter information because none is needed; this is the appropriate baseline for a parameterless tool.
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 and resource: 'Check the remaining credit balance of the API key.' It is unmistakably distinct from the sibling tools, which all concern transcripts, videos, or channels, so an agent can identify this as the credit balance tool without 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 usage conditions: use it when the user asks about remaining credits, or before submit_transcripts_job to confirm a large batch fits. It also mentions the alternative context of submitting a job and the credit cost per video, making the decision clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_transcriptGet transcriptARead-onlyInspect
Get the transcript (subtitles) of a YouTube video. Accepts a video id or any YouTube URL. Set video_metadata=true to get the title, channel and duration in the SAME call — do not call get_video_info first, that is a second billed call for data this one already returns. format=text returns plain readable text (default, cheapest to read); format=json returns timed segments with start/duration in seconds; srt/vtt return ready subtitle file bodies and srv3 the raw YouTube XML. Prefer text unless you need timestamps or a file. Costs 1 credit.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Track kind. Omit to prefer a manual track and fall back to auto | |
| lang | No | Language code of the track, e.g. 'en', 'de'. Default 'en'. | |
| video | Yes | YouTube video id or URL | |
| format | No | 'text' = plain text (default), 'json' = timed segments, 'srt'/'vtt' = subtitle file body, 'srv3' = raw YouTube XML (srv3 does not combine with segment) | |
| segment | No | Max characters per segment. Raise it when chunking the transcript for embeddings or retrieval — 500-1500 gives chunks with enough context; lower it for subtitle-sized lines. Left out, an auto-generated track is cut into ~180-character segments and a manual one is returned exactly as its author broke it, so pass this whenever you need one size regardless of which track answers. | |
| video_metadata | No | Include the video's title, channel, duration and views alongside the transcript. Replaces a separate get_video_info call — same one credit either way. |
Output Schema
| Name | Required | Description |
|---|---|---|
| kind | No | |
| language | No | |
| metadata | No | |
| video_id | No | |
| transcript | No | format=json: array of {text, start, duration} segments (seconds); text/srt/vtt/srv3: one string in that format |
| available_langs | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses billing behavior (costs 1 credit, metadata call avoids an extra charge), default track behavior (manual vs auto fallback), segment defaulting per track type, and format-specific output differences. It also notes that srv3 does not combine with segment. These are meaningful non-obvious behaviors.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average but information-dense. It front-loads the core purpose, then the billing optimization, then format choices and usage preferences. A small amount of repetition with the schema descriptions exists (e.g., format meanings), but every sentence contributes functional 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 tool with 6 parameters, an output schema present, and related sibling tools, the description covers the important edge cases: metadata inclusion, cost avoidance, format trade-offs, track selection, and segmentation behavior. An agent gets enough context to call this tool effectively without additional exploration.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents parameters, but the description adds substantial semantics beyond it: cost implications of video_metadata, format selection guidance, and track-specific segment defaults. This is helpful and non-redundant.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Get the transcript (subtitles) of a YouTube video.' It also clarifies accepted inputs ('video id or any YouTube URL'), immediately distinguishing it from sibling tools like get_video_info and the get_transcripts_* job tools. The purpose is 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 gives explicit when-to-use guidance: it instructs the agent to set video_metadata=true to avoid a separate billed get_video_info call, explains when to prefer specific formats ('Prefer text unless you need timestamps or a file'), and gives segment sizing advice for embeddings/retrieval. This is strong usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_transcripts_jobBatch job progressARead-onlyInspect
Check the progress of a batch job: status (queued/running/done/cancelled), how many videos are ready, failed and still pending. Free — polling a job you already paid for costs nothing. Read the transcripts themselves with get_transcripts_results.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | id returned by submit_transcripts_job |
Output Schema
| Name | Required | Description |
|---|---|---|
| done | No | |
| count | No | |
| ready | No | |
| failed | No | |
| status | No | |
| pending | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the non-destructive nature is covered. The description adds value beyond that: it clarifies cost behavior (polling is free), the specific statuses an agent can observe, and that only counts/status are returned here — not transcript content, which is an agent-facing distinction.
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 with enumerations, a free-cost behavioral note, and a routing to the replacement tool. Barely any waste; the phrase 'a job you already paid for' is slightly redundant with 'Free', keeping it from a perfect 5.
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 one-parameter, read-only tool with a full schema description and an output schema, the description is nearly self-contained. It omits only a fully spelled-out poll-then-fetch workflow (poll until done, then call get_transcripts_results), which would make the agent's end-to-end behavior unambiguous.
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 is a single parameter, job_id, and the schema already documents it fully as 'id returned by submit_transcripts_job' (100% coverage). The description's 'job you already paid for' is consistent with that but adds no new semantic detail, 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?
Describes a specific verb+resource ('Check the progress of a batch job') and enumerates what is returned (status queued/running/done/cancelled, counts of ready/failed/pending). It also names the sibling get_transcripts_results, so an agent can clearly tell this progress-checker apart from the transcript-reading 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?
States when to use this tool (checking job progress) and explicitly routes the agent away when it needs transcripts: 'Read the transcripts themselves with get_transcripts_results.' The 'Free — polling a job you already paid for costs nothing' note additionally reassures the agent that frequent polling is safe, which is a practical usage condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_transcripts_resultOne batch resultARead-onlyInspect
Read ONE video's result out of a batch job by its video id, without paging through get_transcripts_results. 404 means the job does not exist or this video has not finished yet — check get_transcripts_job before concluding anything. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | id returned by submit_transcripts_job | |
| video_id | Yes | one of the video ids the job was submitted with |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | No | |
| video_id | No | |
| transcript | No | format=json: array of {text, start, duration} segments (seconds); text/srt/vtt/srv3: one string in that format |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description adds meaningful behavioral disclosures: the exact meaning of a 404 and the explicit recommendation to consult get_transcripts_job, plus the 'Free' cost note. This goes well beyond what the schema or annotations already convey.
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 concise: three short sentences, each earning its place. The opening line gives the purpose, the second provides critical error semantics, and the third addresses cost. 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 tool's simple two-parameter input, a readOnly annotation, and an output schema, the description is complete. It covers purpose, differentiation, error handling, and cost, and refers to the right sibling tool for follow-up—leaving no critical gaps for an agent to invoke it 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 clear descriptions for both job_id and video_id. The tool description does not need to repeat parameter details, but it also does not enrich them beyond the schema, so the 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 states a specific verb ('Read') and exact resource ('ONE video's result out of a batch job'), and clearly differentiates the tool from its plural sibling get_transcripts_results by saying 'without paging through get_transcripts_results.' This makes the purpose unambiguous and immediately distinguishable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly explains when to use this tool—when you need a single video result from a batch—and names the alternative 'get_transcripts_results' by advising against paging through it. It also provides important "do not assume worst case" guidance by telling agents to check get_transcripts_job on 404 before concluding anything.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_transcripts_resultsBatch job resultsARead-onlyInspect
Read finished transcripts from a batch job, in the order submitted. Results appear as they are fetched, so this can be called before the job is done. Each entry is exactly what get_transcript returns for that video, plus its status. Page with next_page_token. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Entries per page, 1-500 (default 100) | |
| job_id | Yes | id returned by submit_transcripts_job | |
| next_page_token | No | Token from a previous result |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| results | No | |
| has_more | No | |
| next_page_token | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint=true annotation declares safety, and the description adds meaningful behavior: partial results appear before job completion, each entry includes status, pagination via next_page_token, and it's free. No contradiction; the extra context complements the 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 sentences with high information density and no fluff. It front-loads the core purpose and then adds caveats and pagination. It could be slightly more structured or clearer about parameter usage, but it earns a solid score.
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 an output schema present, the description doesn't need to explain return values in depth. It covers key operational details: partial results before completion, per-entry format, pagination. Minor lack of explicit rate limits or error conditions, but not essential given the output schema and annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the description doesn't need to document parameters in depth. It still adds value by explaining that order is submission order and confirming pagination behavior through next_page_token—semantics beyond field names.
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 reads finished transcripts from a batch job in submission order, which distinguishes it from siblings like get_transcripts_job (job metadata) and get_transcript (single transcript). The verb 'read' plus the resource 'finished transcripts from a batch job' makes 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 says this can be called before the job is done since results appear as fetched—useful timing guidance. It also notes each entry equals what get_transcript returns, indirectly distinguishing it from that sibling. It lacks explicit when-not-to-use conditions, but the context is mostly clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_video_infoGet video infoARead-onlyInspect
Get metadata for one YouTube video (title, channel, duration, views, thumbnails) plus the list of available transcript languages, WITHOUT downloading the subtitles. Use it only when the transcript itself is not wanted. If you are going to fetch the transcript anyway, call get_transcript with video_metadata=true instead — it returns both for one credit, where these are two separate calls and two credits.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | YouTube video id or URL |
Output Schema
| Name | Required | Description |
|---|---|---|
| title | No | |
| available_langs | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint/openWorldHint annotations, it discloses a key behavioral boundary: it returns transcript languages but does NOT download the subtitles. It also discloses the cost trade-off compared to get_transcript, which is information not present in annotations, schema, or output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the function purpose and output scope, then immediately provides the routing instruction to get_transcript. Every sentence adds distinct information in a compact form with no 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 one-parameter read-only tool with an output schema, the description covers what it returns, what it omits, when to use it, and when to call an alternative. Nothing an agent needs to route the call correctly 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?
Schema description coverage is 100%, so the schema already explains the single parameter. The description reinforces that the call targets 'one YouTube video,' but it doesn't add new syntax, formats, or constraints beyond the existing schema coverage. 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 names the operation ('Get metadata for one YouTube video'), enumerates the specific metadata fields returned, and explicitly notes it returns transcript languages without downloading subtitles. This distinguishes it immediately from get_transcript, the closest sibling, while also limited to a single video as opposed to list/search 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?
It gives an explicit when-to-use rule: 'Use it only when the transcript itself is not wanted.' It then names the recommended alternative with exact parameters and cost implications: 'call get_transcript with video_metadata=true instead — it returns both for one credit, where these are two separate calls and two credits.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
latest_channel_videosLatest channel videosARead-onlyInspect
Get the ~15 most recent videos of a channel from its RSS feed. Fastest and cheapest way to check what a channel published recently.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | @handle, channel name, UC... channel id or channel URL |
Output Schema
| Name | Required | Description |
|---|---|---|
| videos | No | |
| channel | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds useful behavior beyond the readOnlyHint by revealing that data comes from the RSS feed and that the result is approximate (~15 videos). It also signals cost/performance ('fastest and cheapest'), which helps an agent choose between similar tools.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences contain only relevant information: what the tool returns, approximately how many items, what source is used, and why this is a good option. The key scope and cost signals are 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 tool with a documented input schema, an output schema, and readOnly annotations, the description covers the essential behavior: source, result size, speed, and intended use. There is no critical missing information an agent would need to invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully describes the parameter, listing accepted forms such as @handle, channel name, UC... channel id, or channel URL, and schema description coverage is 100%. The description only weakly reinforces that the parameter refers to a channel, so no significant value is added 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 names a specific operation ('get the ~15 most recent videos of a channel'), a resource ('channel'), and a concrete source ('RSS feed'). It distinguishes itself from sibling listing/search tools by framing itself as the fastest, cheapest way to check recent channel publications.
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 clearly establishes when to use it: when you need a quick, lightweight check of what a channel recently published. It does not explicitly exclude cases like full channel listing or searching, but its intended niche is clear from the wording.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_channel_videosList channel videosARead-onlyInspect
List videos from a channel's Videos tab, newest first. Accepts an @handle, a UC... channel id or a channel URL. ids_only=true returns just video ids (up to 500 per page) — use it when you only need ids to fetch transcripts.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | @handle, channel name, UC... channel id or channel URL (required unless paginating) | |
| limit | No | Page size. Up to 100, or up to 500 with ids_only | |
| ids_only | No | Return video_ids[] instead of full video objects | |
| next_page_token | No | Token from a previous result |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| videos | No | |
| channel | No | |
| has_more | No | |
| video_ids | No | |
| next_page_token | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses meaningful behavior beyond the annotations: newest-first ordering, accepted channel identifier formats, ids_only behavior, and the 500-per-page ceiling. Since readOnlyHint=true already signals the operation's safety profile, the description does extra work by documenting ordering and output modes. There is no contradiction with the read-only annotation.
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 concise yet information-dense, with no filler or redundancy. The core action and ordering are front-loaded, and the id-only optimization is explained in a short second sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich input schema, output schema, and readOnlyHint annotation, the description covers the remaining essentials: ordering, accepted identifiers, ids_only behavior, and pagination limits. The only material gap is the lack of explicit differentiation from the sibling list/search tools, which means an agent must infer when this tool is preferred.
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 has 100% parameter coverage, so the baseline is solid. The description adds value by explaining the purpose of ids_only, clarifying that a channel name or handle is acceptable even though the schema names the parameter 'name', and noting the 500-item limit when ids_only is used. This is a meaningful complement to the schema rather than a mere restatement.
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 verb and resource: it lists videos from a channel's Videos tab, and it adds a useful behavioral detail by specifying 'newest first'. It also lists the accepted identifier formats, which helps an agent identify valid inputs. It does not explicitly differentiate itself from the sibling tool latest_channel_videos, so some sibling distinction is left to inference.
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 one specific usage guideline: use ids_only=true when you only need IDs to fetch transcripts, which is genuinely useful for call selection. However, it gives no explicit guidance about when to prefer this tool over search_channel_videos, latest_channel_videos, or list_playlist_videos. The intended use case is implied rather than clearly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_playlist_videosList playlist videosARead-onlyInspect
List videos of a playlist in playlist order. Accepts a PL... playlist id or a URL with list=. ids_only=true returns just video ids (up to 500 per page).
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | PL... playlist id or URL (required unless paginating) | |
| limit | No | Page size. Up to 100, or up to 500 with ids_only | |
| ids_only | No | Return video_ids[] instead of full video objects | |
| next_page_token | No | Token from a previous result |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| videos | No | |
| has_more | No | |
| playlist | No | |
| video_ids | No | |
| next_page_token | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, and the description goes further by disclosing playlist ordering, ID/URL input flexibility, and the up-to-500-per-page behavior with ids_only. This adds meaningful behavioral context beyond a simple 'list' label.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler. The first sentence states the core behavior, and the second covers input forms and the ids_only pagination nuance. Every phrase earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, readOnlyHint=true, and full schema documentation on parameters, the description covers the important nuances: playlist-order listing, accepted id shapes, and ids_only pagination constraints. No major calling concern is left unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds extra detail: id can be a PL... id or a URL with list=, limit has a 500 cap only with ids_only, and ids_only changes the response shape to video IDs. This goes beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (list videos), the resource (a playlist), and a distinctive behavioral property ('in playlist order'). It does not explicitly distinguish itself from search_playlist_videos, but the list-vs-search distinction is reasonably inferable from the wording.
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 accepts a PL... playlist id or a list= URL, and explains the ids_only option and page-size behavior. It does not explicitly say when to choose this tool over alternatives like search_playlist_videos, but the intended call pattern is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_channel_videosSearch within a channelARead-onlyInspect
Search videos inside one channel using YouTube's native relevance search. Results are ranked by relevance, so a video whose title lacks the query word is normal.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Query to search within the channel | |
| name | No | @handle, channel name, UC... channel id or channel URL | |
| limit | No | Results per page, 1-100 (default 30) | |
| next_page_token | No | Token from a previous result |
Output Schema
| Name | Required | Description |
|---|---|---|
| videos | No | |
| channel | No | |
| has_more | No | |
| next_page_token | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint and openWorldHint annotations already signal safe read-only behavior. The description additionally discloses that results are relevance-ranked rather than keyword-matched, including the non-obvious fact that matching videos may lack the query in their title; this is meaningful behavioral context beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The two sentences are front-loaded and free of waste. The first sentence defines the operation and scope, and the second guards against an agent misinterpreting relevant results that do not contain the query text.
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 rich input schema, existing output schema, and read-only annotations, this is nearly complete for an agent insert-correct call. The small gap is that it does not state what happens when no channel is identified or how to route among the similar channel/playlist siblings, which agents must infer from sibling names.
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 materially deepen any parameter beyond what the schema already documents, such as q, the channel identifier forms, or pagination token.
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 and scope: search videos inside one channel. It also adds the YouTube-native relevance-search detail, which clearly separates it from a general YouTube search or a plain channel listing sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is clear context: this is for searching within a single channel using YouTube's relevance ranking, so an agent can distinguish it from cross-YouTube search or listing tools. It does not explicitly name when-not-to-use alternatives or provide exclusions, so it stops 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.
search_playlist_videosSearch within a playlistARead-onlyInspect
Find videos inside a playlist by a substring of the title (case-insensitive). YouTube has no native playlist search, so this scans up to 500 playlist items. truncated=true means there may be more matches beyond the scanned window.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Substring to match in the video title | |
| id | Yes | PL... playlist id or URL | |
| limit | No | Max matches to return, 1-100 (default 30) |
Output Schema
| Name | Required | Description |
|---|---|---|
| truncated | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint/openWorldHint annotations, the description discloses two non-obvious behaviors: the fixed 500-item scan window and the meaning of truncated=true. This is exactly the kind of caveat an agent needs to know before relying on the result — it cannot infer the scan limit or the partial-result flag from the schema and would otherwise assume the result is exhaustive.
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 with zero fluff: it front-loads the matching behavior, gives the platform rationale, and closes with the critical truncation caveat. Every sentence earns its place and the ordering is maximally informative.
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 an output schema present and readOnlyHint/openWorldHint annotations covering the safety profile, most of the burden is already borne by structured fields. The description covers the key additional semantics (scan window, truncation). Minor gaps that remain are being explicit about result ordering and behavior on invalid playlist IDs, which are small for a 3-parameter 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?
Schema description coverage is 100% (id, q, limit each have meaningful descriptions with ranges and defaults), so the baseline is 3. The description adds only the case-insensitivity nuance about q via prose; no per-parameter detail is added 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 first sentence states a specific verb+resource and the match mechanics: 'Find videos inside a playlist by a substring of the title (case-insensitive).' This clearly differentiates from siblings like search_youtube (global search), list_playlist_videos (full listing), and search_channel_videos (channel-scoped) by confining the search to an existing playlist.
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 rationale ('YouTube has no native playlist search, so this scans up to 500 playlist items') explains why the tool exists and tells the agent it is the workaround for that platform gap. However, it does not name any alternative tool, give explicit when-not-to-use guidance, or point to a sibling like list_playlist_videos for full enumeration, so the agent is left to infer the decision boundary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_youtubeSearch YouTubeARead-onlyInspect
Search YouTube for videos or channels. Paginate by passing next_page_token from the previous result. has_more tells you whether another page exists.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Search query (required unless paginating) | |
| type | No | Default 'video' | |
| limit | No | Results per page, 1-50 (default 20) | |
| next_page_token | No | Token from a previous result |
Output Schema
| Name | Required | Description |
|---|---|---|
| has_more | No | |
| next_page_token | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint and openWorldHint, so the safe read-only nature is already established. The description adds valuable behavioral context: it explains the pagination pattern and the meaning of has_more, which are not present in the input schema. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loads the core search capability, and includes pagination guidance efficiently. There is no filler or redundant restating of the title.
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 presence of a rich input schema, an output schema, and annotations, the description covers what an agent needs to invoke the tool correctly, especially the pagination loop. Nothing critical is missing for a search tool with this structure.
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 documents all four parameters with 100% coverage, so the baseline is 3. The description adds meaning by linking next_page_token to the pagination flow and mentioning that has_more indicates another page, which helps agents understand the parameter interaction beyond the schema's individual field descriptions.
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 for videos or channels, a specific verb and resource. This distinguishes it from sibling tools like search_channel_videos, which are scoped to specific contexts rather than a general YouTube-wide 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 provides clear pagination usage guidance with next_page_token and has_more, but it does not explicitly state when to choose this tool over siblings such as search_channel_videos or latest_channel_videos. The intended usage is implied rather than explicitly contrasted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_transcripts_jobSubmit transcripts batchAInspect
Queue transcripts for MANY videos at once (up to 4000) and get a job_id back immediately — the work continues in the background. Use this instead of calling get_transcript in a loop for more than a handful of videos. Feed it video ids from list_channel_videos or list_playlist_videos (ids_only=true). Next: poll get_transcripts_job until status is 'done', reading finished transcripts from get_transcripts_results as they land. Costs 1 credit per video, charged on submit; duplicates are removed first. Requires a user key (sk_...).
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Track kind. Omit to prefer a manual track and fall back to auto | |
| lang | No | Language code for every video, e.g. 'en'. Default 'en'. | |
| format | No | 'text' = plain text (default), 'json' = timed segments, 'srt'/'vtt' = subtitle file body, 'srv3' = raw YouTube XML (srv3 does not combine with segment) | |
| videos | Yes | Video ids or URLs, up to 4000. Duplicates are collapsed. | |
| segment | No | Max characters per segment, for every video in the job. Raise it to 500-1500 when the transcripts are going into embeddings or retrieval. Left out, an auto-generated track is cut into ~180-character segments and a manual one keeps its author's own lines — so pass this when the whole job has to come back at one size. | |
| video_metadata | No | Include each video's title, channel and duration alongside its transcript. Replaces a get_video_info call per video and costs nothing extra. | |
| idempotency_key | No | Optional. Resubmitting the same list with the same key returns the SAME job instead of opening a second one and charging twice. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| job_id | No | |
| status | No | |
| credits | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the asynchronous execution model (background processing after immediate job_id), the billing dimension ('Costs 1 credit per video, charged on submit'), deduplication, and the auth requirement (sk_... key). All of this goes well beyond the annotations (readOnlyHint=false, openWorldHint=true, idempotentHint=false, destructiveHint=false) and enriches the agent's picture of side effects. 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?
Five sentences that are all load-bearing: the core value, the when-to-use rule, the input source, the follow-up workflow, and the costs/dedup/auth. It is front-loaded with the most critical information first and contains no filler or restatement of schema content.
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 an async batch operation with 7 parameters, the description covers the entry criterion (many videos vs handful), how to invoke it (input sources), what comes back (immediate job_id), the costs, the required key, and the full downstream contract (poll get_transcripts_job until 'done', read results from get_transcripts_results). The output schema handles return-value specifics, so nothing essential for correct invocation 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?
With 100% schema description coverage, the baseline is 3 and the schema already documents every parameter including segment sizing guidance and idempotency_key behavior. The description adds a sourcing hint for videos (feed from list-channel/playlist tools) and the credit-per-video math, but it does not provide per-parameter explanations beyond the schema — a correct middle ground.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: 'Queue transcripts for MANY videos at once (up to 4000) and get a job_id back immediately'. It differentiates this batch tool from its sibling get_transcript and the polling/result tools, so an agent understands exactly what this tool does and what it is not without reading any other definition.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to choose it: 'Use this instead of calling get_transcript in a loop for more than a handful of videos.' It also tells the agent where to get inputs ('Feed it video ids from list_channel_videos or list_playlist_videos') and exactly which sibling to poll next (get_transcripts_job, get_transcripts_results). This is explicit routing, not 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.
14 tool updates
v1.0.2- First observed
cancel_transcripts_job - First observed
get_credits - First observed
get_transcript - First observed
get_transcripts_job - First observed
get_transcripts_result - First observed
get_transcripts_results - First observed
get_video_info - First observed
latest_channel_videos - First observed
list_channel_videos - First observed
list_playlist_videos - First observed
search_channel_videos - First observed
search_playlist_videos - First observed
search_youtube - First observed
submit_transcripts_job
TDQS
Scored across 14 tools
Each tool has a distinct job: search, list, fetch single transcript, manage batch jobs, or check credits. The main ambiguities are get_transcripts_results vs get_transcripts_result and get_video_info vs get_transcript with video_metadata=true, but the descriptions clearly point agents to the right choice.
Most names follow a clean verb_noun pattern like get_transcript, list_channel_videos, submit_transcripts_job. The pattern is slightly mixed by latest_channel_videos and the singular/plural get_transcripts_results/get_transcripts_result, but conventions remain mostly predictable.
With 14 tools, the server is well-scoped for transcript retrieval plus YouTube search and batch job management. Every tool addresses a real workflow and none feel redundant.
The surface covers the full workflow: discover videos, get metadata, fetch individual or batch transcripts, poll job status, retrieve results, cancel jobs, and monitor credits. There are no obvious missing operations for the stated domain.
Maintenance
Related MCP Connectors
YouTube transcripts, search, channel/playlist listings and upload tracking for AI agents. No signup.
15 media & data tools for AI agents: search, transcribe, subtitles, voiceover, translate & more.
💯 The fastest YouTube transcript + YouTube search MCP for AI agents. Try for free.
Video, audio, and image processing for AI agents: convert, transcribe, upscale - 150+ operations.
Related MCP Servers
- AlicenseBqualityNot gradedmaintenanceYouTube intelligence layer for AI agents. 41 tools across 10 modules ; search, explore, transcripts, comments, visual search, analytics, and more. Zero config.4151 npm-
- AlicenseCqualityBmaintenanceEnables AI agents to search, analyze, and extract insights from YouTube videos including transcripts, visual frames, and benchmarks without requiring API keys. Supports semantic search across playlists, sentiment analysis, and visual content indexing with automatic fallback chains for reliable access.4151 npm35MIT
- AlicenseNot gradedqualityBmaintenanceProvides AI agents with token-optimized access to YouTube data, including video details, transcripts, channel statistics, trending videos, and search.251 npmMIT
- FlicenseNot gradedqualityCmaintenancePay-per-success YouTube transcript extractor for AI agents and RAG pipelines. Timestamps, SRT, plain text. Failed videos are never charged. $0.005/video.-