[TranscriptOut]
YouTube Transcript & Search MCP Server
Let your AI agent read YouTube.
Transcripts in five formats, native video and channel search, channel and playlist listings,
and background jobs that deliver up to 4,000 transcripts at a time. 14 tools behind one hosted
endpoint. Nothing runs on your machine.
[Install in Cursor]
[Install in VS Code]
[Website]
[Docs]
[MIT License]
Why ·
Quick start ·
Tools ·
Install ·
Recipes ·
Pricing ·
Errors
🎬 Why
Everyone who works with an agent has run this exchange at least once.
The transcript is precisely the thing the agent cannot get on its own. With this server
connected, the same message simply resolves.
Reading one video is rarely where the job ends. Here is how the three ways of getting YouTube
data into an agent actually compare.
⚡ 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.
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.
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.
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):
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.
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.
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.
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.
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.
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=.
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.
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.
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.
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:
Install in Cursor (One-Click / Manual)
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):
Install in Claude Code (CLI)
Claude Desktop & Claude Web
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.
Install in VS Code
[Install in VS Code]
Or add this to VS Code user settings (settings.json):
Install in OpenAI Agent Builder
- Create a new Agent
- Under "Actions" or "Tools", add a new MCP Server
- URL:
https://api.transcriptout.com/mcp
- Auth Type: API Key
- Paste your API key from the dashboard
Install in Windsurf
Add to ~/.codeium/windsurf/mcp_config.json:
Install in Cline
Install in Zed
In Zed settings.json:
Install in Roo Code
Install in Amp
Install in Augment Code
In settings.json under augment.advanced:
Install in Kilo Code
In .kilocode/mcp.json:
Install in JetBrains AI Assistant
In Settings → Tools → AI Assistant → MCP:
Install in Gemini CLI
In ~/.gemini/settings.json:
Install in Qwen Coder
In ~/.qwen/settings.json:
Install in Google Antigravity
Install in Trae
Install in LM Studio
In mcp.json:
Install in Warp
In Settings → AI → MCP:
Install in Perplexity Desktop
In Settings → Connectors → Advanced:
🧩 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.
VS Code. Command Palette → Chat: Install Plugin From Source, then paste:
Or register a local clone in settings.json:
Cursor. Customize in the sidebar → find the plugin → Install. For a local clone:
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:
🔑 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.
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.
The bulk recipe spelled out. "Archive a whole channel" is four tool calls, not a script:
list_channel_videos with ids_only=true: up to 500 video IDs per page
submit_transcripts_job with those IDs (up to 4,000, duplicates dropped before billing,
idempotency_key makes a retry free)
get_transcripts_job until status is done. The job paces itself inside your rate limit
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
- 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
Authentication errors (401)
- 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
No credits (402)
Video not available (404 / 410 / 451)
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.
Rate limiting (429) and capacity (503)
- 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
Errors are structured
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).
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.
Source: youtube-transcript-python ·
youtube-transcript-js
🔗 Links
📇 MCP Registry
This server is published to the official Model Context Protocol Registry
under the name:
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.
© 2026 TranscriptOut · Released under the MIT License