YouTube Transcript & Search MCP Server
This server lets an AI agent read YouTube: it fetches transcripts, searches YouTube, browses channels and playlists, and runs bulk transcript jobs through 14 hosted tools (each paid call costs 1 credit, with several free tools).
Get transcripts of any public video in five formats — plain text, timed JSON segments, SRT, VTT, or raw srv3 XML — with optional language, manual/auto track choice, and segment sizing (20–5,000 chars) for RAG chunking.
Get video metadata (title, channel, duration, views, thumbnails, available transcript languages) via
get_video_info, or bundled free with a transcript viavideo_metadata=true.Search YouTube natively for videos or channels, paginating with
next_page_token(1 credit per page).List a channel's videos newest-first by @handle, name, UC… ID or URL, optionally returning up to 500 bare video IDs per page.
Search inside a channel using YouTube's relevance-ranked search.
Get a channel's latest uploads (~15 videos) cheaply from its RSS feed.
List playlist videos in playlist order, optionally as bare IDs (up to 500/page).
Search within a playlist by case-insensitive title substring (scans up to 500 items, flags
truncated).Submit bulk transcript jobs for up to 4,000 videos at once (1 credit per video on submit, duplicates collapsed, idempotency key to avoid double charges).
Track and read batch jobs for free: poll progress (
queued/running/done/cancelled), page through finished results as they land, or fetch a single video's result by ID.Cancel a batch job for free, refunding credits only for videos not yet started.
Check remaining credits with a free
get_creditscall before large batches.Use it from any MCP client (Cursor, VS Code, Claude Code, Windsurf, Zed, and more) via the remote streamable-HTTP endpoint with a Bearer API key, or run the bundled local stdio server/plugin.
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.
This server has a remotely hosted endpoint. Open its connector listing for connection details, authentication requirements, and setup instructions:
🎬 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
Client libraries wrap it for Python and Node.js. Both are drop-in replacements for the popular open-source ones, so switching is one import line.
pip install transcriptout # replaces youtube-transcript-api
npm i transcriptout # replaces youtube-transcriptSource: youtube-transcript-python · youtube-transcript-js
🔗 Links
🌐 Website: transcriptout.com
📚 Docs: transcriptout.com/docs
🧰 Agent skills (same backend, no MCP required): github.com/artemchuikin/youtube-skills
🐍 Python library: github.com/artemchuikin/youtube-transcript-python
📦 Node.js library: github.com/artemchuikin/youtube-transcript-js
💬 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.
Inputs: job_id (required). Returns: status
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).
Inputs: no named parameters. Returns: credits, metered, user_id
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.
Inputs: video (required), kind, lang, format, +2 more. Returns: kind, language, metadata, video_id, +2 more
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.
Inputs: job_id (required). Returns: done, count, ready, failed, +2 more
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.
Inputs: job_id (required), video_id (required). Returns: status, video_id, transcript
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.
Inputs: job_id (required), limit, next_page_token. Returns: count, results, has_more, next_page_token
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.
Inputs: id (required). Returns: title, available_langs
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.
Inputs: name (required). Returns: videos, channel
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.
Inputs: name, limit, ids_only, next_page_token. Returns: count, videos, channel, has_more, +2 more
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).
Inputs: id, limit, ids_only, next_page_token. Returns: count, videos, has_more, playlist, +2 more
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.
Inputs: q, name, limit, next_page_token. Returns: videos, channel, has_more, next_page_token
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.
Inputs: q (required), id (required), limit. Returns: truncated
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.
Inputs: q, type, limit, next_page_token. Returns: has_more, next_page_token
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_...).
Inputs: videos (required), kind, lang, format, +3 more. Returns: count, job_id, status, credits
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
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.
TranscriptAPI.com: hosted YouTube transcripts, search, channels and playlists for AI agents
YouTube transcripts for AI agents: 150+ languages, AI transcription fallback, search, summaries.
15 media & data tools for AI agents: search, transcribe, subtitles, voiceover, translate & more.
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.41179 npm-
- AlicenseCqualityCmaintenanceEnables 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.41179 npm36MIT
- FlicenseNot gradedqualityDmaintenancePay-per-success YouTube transcript extractor for AI agents and RAG pipelines. Timestamps, SRT, plain text. Failed videos are never charged. $0.005/video.-
- AlicenseAqualityBmaintenanceEnables AI agents to search YouTube like a database, retrieve transcripts and channel data, and mine videos for claims, numbers, and demand signals — without needing an API key.6146 npmMIT