Skip to main content
Glama
artemchuikin

YouTube Transcript & Search MCP Server


🎬 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=dQw4w9WgXcQ

The 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

video

string

required

YouTube URL (full or short) or 11-char video ID

lang

string

"en"

Language code of the track (en, de, ...)

format

string

"text"

"text" (plain text), "json" (segments with start/duration in seconds), "srt"/"vtt" (subtitle file body), "srv3" (raw YouTube XML)

kind

string

auto-detect

"manual" or "auto". Left out, a manual track wins and auto is the fallback

segment

integer

see below

Max characters per segment. 500-1500 makes RAG-ready chunks

video_metadata

boolean

false

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 }
  ]
}

srt and vtt come back as complete subtitle file bodies, ready to be written to disk by the agent. srv3 is the raw source XML and does not combine with segment.

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

id

string

required

YouTube video ID or URL

Credit hygiene: 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 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

q

string

required*

Search query (*unless paginating)

type

string

"video"

"video" or "channel"

limit

integer

20

Results per page, 1-50

next_page_token

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

name

string

required*

@handle, channel name, UC... ID or URL

limit

integer

100

Page size, up to 500 with ids_only

ids_only

boolean

false

Return just video_ids[], up to 500 per page

next_page_token

string

Token from a previous result

ids_only=true is the cheap way to feed submit_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

name

string

required

@handle, channel name, UC... ID or URL

q

string

required

Query to search within the channel

limit

integer

30

Results per page, 1-100

next_page_token

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

name

string

required

@handle, channel name, UC... ID or URL

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

id

string

required*

Playlist ID or URL

limit

integer

100

Page size, up to 500 with ids_only

ids_only

boolean

false

Return just video_ids[], up to 500 per page

next_page_token

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

id

string

required

Playlist ID or URL

q

string

required

Substring to match in video titles

limit

integer

30

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

videos

string[]

required

Video IDs or URLs, up to 4,000. Duplicates collapse BEFORE billing

lang

string

"en"

One language for the whole job

format

string

"text"

"text", "json", "srt", "vtt" or "srv3", one for the whole job

kind

string

auto-detect

"manual" or "auto"

segment

integer

One segment size for the whole job

video_metadata

boolean

false

Metadata per video, no extra cost

idempotency_key

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

job_id

string

required

Job id from submit_transcripts_job

video_id

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:

Install MCP Server

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"
    }
  }
}
  1. Create a new Agent

  2. Under "Actions" or "Tools", add a new MCP Server

  3. URL: https://api.transcriptout.com/mcp

  4. Auth Type: API Key

  5. 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 tools

VS Code. Command Palette → Chat: Install Plugin From Source, then paste:

https://github.com/artemchuikin/youtube-mcp

Or 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/transcriptout

Then 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.js

Without 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:

  1. list_channel_videos with ids_only=true: up to 500 video IDs per page

  2. submit_transcripts_job with those IDs (up to 4,000, duplicates dropped before billing, idempotency_key makes a retry free)

  3. get_transcripts_job until status is done. The job paces itself inside your rate limit

  4. get_transcripts_results page 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-Remaining header.

  • One-time credit packs that never expire can be bought on top of an active subscription.

  • View pricing · Manage billing


🧯 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

  • 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-After header. Both are refunded automatically

  • For 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

API docs →

Base URL: https://api.transcriptout.com/v1



📇 MCP Registry

This server is published to the official Model Context Protocol Registry under the name:

com.transcriptout/youtube-transcript-and-youtube-search

TranscriptOut 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 tools
cancel_transcripts_jobCancel batch jobA
DestructiveIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYesid returned by submit_transcripts_job

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusNo

TDQS

A4.4/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 balanceA
Read-only
Inspect

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).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
creditsNo
meteredNo
user_idNo

TDQS

A4.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 transcriptA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoTrack kind. Omit to prefer a manual track and fall back to auto
langNoLanguage code of the track, e.g. 'en', 'de'. Default 'en'.
videoYesYouTube video id or URL
formatNo'text' = plain text (default), 'json' = timed segments, 'srt'/'vtt' = subtitle file body, 'srv3' = raw YouTube XML (srv3 does not combine with segment)
segmentNoMax 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_metadataNoInclude 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

ParametersJSON Schema
NameRequiredDescription
kindNo
languageNo
metadataNo
video_idNo
transcriptNoformat=json: array of {text, start, duration} segments (seconds); text/srt/vtt/srv3: one string in that format
available_langsNo

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters5/5

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

Schema description coverage is 100%, so the schema already documents 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.

Purpose5/5

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.

Usage Guidelines5/5

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 progressA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYesid returned by submit_transcripts_job

Output Schema

ParametersJSON Schema
NameRequiredDescription
doneNo
countNo
readyNo
failedNo
statusNo
pendingNo

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 resultA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYesid returned by submit_transcripts_job
video_idYesone of the video ids the job was submitted with

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusNo
video_idNo
transcriptNoformat=json: array of {text, start, duration} segments (seconds); text/srt/vtt/srv3: one string in that format

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 resultsA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoEntries per page, 1-500 (default 100)
job_idYesid returned by submit_transcripts_job
next_page_tokenNoToken from a previous result

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNo
resultsNo
has_moreNo
next_page_tokenNo

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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

The description clearly states the tool reads 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.

Usage Guidelines4/5

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 infoA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesYouTube video id or URL

Output Schema

ParametersJSON Schema
NameRequiredDescription
titleNo
available_langsNo

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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

Schema description coverage is 100%, so the schema already 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.

Purpose5/5

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.

Usage Guidelines5/5

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 videosA
Read-only
Inspect

Get the ~15 most recent videos of a channel from its RSS feed. Fastest and cheapest way to check what a channel published recently.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes@handle, channel name, UC... channel id or channel URL

Output Schema

ParametersJSON Schema
NameRequiredDescription
videosNo
channelNo

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 videosA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo@handle, channel name, UC... channel id or channel URL (required unless paginating)
limitNoPage size. Up to 100, or up to 500 with ids_only
ids_onlyNoReturn video_ids[] instead of full video objects
next_page_tokenNoToken from a previous result

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNo
videosNo
channelNo
has_moreNo
video_idsNo
next_page_tokenNo

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 videosA
Read-only
Inspect

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoPL... playlist id or URL (required unless paginating)
limitNoPage size. Up to 100, or up to 500 with ids_only
ids_onlyNoReturn video_ids[] instead of full video objects
next_page_tokenNoToken from a previous result

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNo
videosNo
has_moreNo
playlistNo
video_idsNo
next_page_tokenNo

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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 channelA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoQuery to search within the channel
nameNo@handle, channel name, UC... channel id or channel URL
limitNoResults per page, 1-100 (default 30)
next_page_tokenNoToken from a previous result

Output Schema

ParametersJSON Schema
NameRequiredDescription
videosNo
channelNo
has_moreNo
next_page_tokenNo

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 playlistA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
qYesSubstring to match in the video title
idYesPL... playlist id or URL
limitNoMax matches to return, 1-100 (default 30)

Output Schema

ParametersJSON Schema
NameRequiredDescription
truncatedNo

TDQS

A4.2/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 YouTubeA
Read-only
Inspect

Search YouTube for videos or channels. Paginate by passing next_page_token from the previous result. has_more tells you whether another page exists.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoSearch query (required unless paginating)
typeNoDefault 'video'
limitNoResults per page, 1-50 (default 20)
next_page_tokenNoToken from a previous result

Output Schema

ParametersJSON Schema
NameRequiredDescription
has_moreNo
next_page_tokenNo

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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

The description clearly states the tool searches 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.

Usage Guidelines3/5

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_...).

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoTrack kind. Omit to prefer a manual track and fall back to auto
langNoLanguage code for every video, e.g. 'en'. Default 'en'.
formatNo'text' = plain text (default), 'json' = timed segments, 'srt'/'vtt' = subtitle file body, 'srv3' = raw YouTube XML (srv3 does not combine with segment)
videosYesVideo ids or URLs, up to 4000. Duplicates are collapsed.
segmentNoMax 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_metadataNoInclude each video's title, channel and duration alongside its transcript. Replaces a get_video_info call per video and costs nothing extra.
idempotency_keyNoOptional. Resubmitting the same list with the same key returns the SAME job instead of opening a second one and charging twice.

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNo
job_idNo
statusNo
creditsNo

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

  1. 14 tool updatesv1.0.2
    • First observedcancel_transcripts_job
    • First observedget_credits
    • First observedget_transcript
    • First observedget_transcripts_job
    • First observedget_transcripts_result
    • First observedget_transcripts_results
    • First observedget_video_info
    • First observedlatest_channel_videos
    • First observedlist_channel_videos
    • First observedlist_playlist_videos
    • First observedsearch_channel_videos
    • First observedsearch_playlist_videos
    • First observedsearch_youtube
    • First observedsubmit_transcripts_job

TDQS

A4.3/5.0

Scored across 14 tools

Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness5/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    C
    quality
    B
    maintenance
    Enables 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.
    41
    51 npm
    35
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides AI agents with token-optimized access to YouTube data, including video details, transcripts, channel statistics, trending videos, and search.
    251 npm
    MIT