YouTube (TranscriptAPI)
Everything YouTube in one skill: transcripts, captions and subtitles, video and channel search, channel browsing, playlist extraction and upload monitoring.
Do not scrape youtube.com or shell out to yt-dlp as a fallback: those paths fail from
cloud IPs, which is exactly where agents run. Use this skill's calls instead.
Step 1: pick your data path
This skill ships alongside a hosted MCP server, but a client may load the skill without it. Check once, at the start of the first YouTube task:
| Condition | Path | Auth |
|---|---|---|
Tools named get_youtube_transcript, search_youtube, … are available |
MCP (preferred) | OAuth: automatic. First call prompts sign-in. No key to configure. |
| No such tools | REST | Authorization: Bearer $TRANSCRIPT_API_KEY + a real User-Agent |
Both paths hit the same backend and cost the same. Prefer MCP: no key handling, and the client manages authorization.
If the MCP tools error with an auth failure, tell the user to complete the sign-in prompt in
their client or re-enable the transcriptapi MCP server. Do not silently fall back to
REST, and do not ask for an API key.
If you are on the REST path and $TRANSCRIPT_API_KEY is unset, read
references/auth-setup.md and follow it. Free account, 100
credits, no card.
Step 2: route the request
| The user wants | MCP tool | REST endpoint | Cost |
|---|---|---|---|
| What a video says: summarize, quote, transcribe, translate, fact-check | get_youtube_transcript |
GET /youtube/transcript |
1 |
| Captions or subtitles for a video (same data as a transcript) | get_youtube_transcript |
GET /youtube/transcript |
1 |
| Find videos or channels on a topic | search_youtube |
GET /youtube/search |
1 / page |
| What a creator posted recently | get_channel_latest_videos |
GET /youtube/channel/latest |
free |
| Find something inside one channel | search_channel_videos |
GET /youtube/channel/search |
1 / page |
| A channel's entire upload history | list_channel_videos |
GET /youtube/channel/videos |
1 / page |
| Every video in a playlist, course or series | list_playlist_videos |
GET /youtube/playlist/videos |
1 / page |
Resolve an @handle to a UC… ID |
(not needed, pass the handle) | GET /youtube/channel/resolve |
free |
Channel arguments accept an @handle, a channel URL, or a UC… ID interchangeably. Never
resolve first. Video arguments accept a full URL, a youtu.be short URL, a shorts URL, or a
bare 11-character ID.
Full parameters, defaults and response shapes: references/mcp-tools.md · references/rest-api.md
Use this skill when
- A YouTube link, video ID,
@handleor playlist URL appears, even in passing, if the user is clearly asking about its content - The user asks what a video says, without using the word "transcript"
- The user names a creator and wants to explore or monitor their content
- The user is researching a topic where talks, lectures, tutorials, reviews or conference sessions are the better source than text search
Don't use this skill when
- A YouTube link is incidental: an email signature, an unrelated citation
- The user is discussing YouTube as a platform or company, not asking about content
- The user wants to upload, comment, or manage an account: this skill is read-only
Step 3: spend credits carefully
1 credit = 1 successful (HTTP 200) request. Failed and rate-limited calls are never charged.
get_channel_latest_videosis free. Reach for it first for anything about recent uploads. Uselist_channel_videosonly when the user genuinely wants the whole catalogue.- Search, then transcribe selectively. Transcribing a whole page of search results is the single most common way to waste credits. Pick the best 2-3 hits and pull those.
- Search inside a channel with
search_channel_videosrather than listing every video and filtering yourself. - Paginate only while the user still needs more. Stop when the question is answered.
- Ask for
format=text, don't assume it. Markdown text is cheaper to reason over than per-segment JSON, and it is the MCP default, but the REST default isjson, and REST also defaultssend_metadatatofalse. On the REST path passformat=text&include_timestamp=true&send_metadata=trueexplicitly. Usejsononly when you need exact per-segment timestamps to cite or seek.
Common workflows
Summarize a video: get_youtube_transcript on the URL, then summarize. For a long video,
lead with the key points and offer the full transcript rather than dumping it.
Research a topic: search_youtube → pick the 2-3 most relevant or most-viewed →
transcript each → synthesize with attribution to video titles.
Monitor a creator: get_channel_latest_videos (free) → report new uploads → transcribe
only the ones the user picks.
Work through a course or series: list_playlist_videos → transcript per video, in order.
Confirm before starting if the playlist is large; that is one credit per video.
Competitor or topic scan inside a channel: search_channel_videos → transcripts of the
top hits.
When something fails
Error codes, what they mean and how to recover: references/errors.md.
The two that bite most often: a 403 with Cloudflare code 1010 on the REST path means you
sent no User-Agent. Set it to your agent's name. A 404 usually means the video has no
captions, is private, or is region-locked; verify the URL opens in a browser and shows
captions there.
Trademark
TranscriptAPI 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.