The complete YouTube toolkit as a single Agent Plugin, by TranscriptAPI.
YouTube transcripts, captions and subtitles, video & channel search, channel browsing, playlist extraction and new-upload polling: 6 hosted MCP tools plus one comprehensive skill.
One install. OAuth sign-in. No API key to manage. Free tier, no card.
Powering 15M+ transcripts every month · 500K+ transcripts processed daily · 49ms median response time Trusted in production by youtubetotranscript.com (~11M/mo) and recapio.com (~2.8M/mo).
This repository root is a conformant Agent Plugins 1.0.0 package: the open, vendor-neutral packaging standard published 2026-08-06 by Amazon, Cursor, GitHub, Microsoft, OpenAI and Vercel, with Google as a core maintainer. It bundles MCP servers and Agent Skills into one portable, drop-in folder that every compliant client can read.
One install gives your agent both halves:
| Component | What it does |
|---|---|
MCP server (transcriptapi) |
6 hosted tools over streamable HTTP with OAuth 2.1: get_youtube_transcript, search_youtube, get_channel_latest_videos, search_channel_videos, list_channel_videos, list_playlist_videos. No key handling: your agent signs you in on first use. |
Skill (youtube) |
Teaches the agent when to reach for YouTube data, which tool answers each question, and how not to burn credits, with a full REST fallback for clients that load skills but not MCP servers. |
Just ask, in plain English:
Summarize this video for me: https://youtu.be/dQw4w9WgXcQ
Find Andrew Huberman's three most-viewed videos about sleep and compare them.
What has @TED posted in the last month?That last set of prompts touches 3 of the 6 tools (search_youtube, search_channel_videos, get_youtube_transcript) without you writing a line of code.
Most YouTube integrations do one thing: pull a single transcript. This is a full toolkit.
| TranscriptAPI | Typical YouTube MCP / skill | |
|---|---|---|
| Packaging | ✅ Agent Plugins 1.0.0 | ❌ Per-client manifests |
| Hosting | ✅ Remote (no local install) | ❌ Local stdio install |
| Tools | ✅ 6 tools + a skill | ❌ 1 (transcript only) |
| YouTube search | ✅ Yes | ❌ No |
| Channel & playlist extraction | ✅ Yes | ❌ No |
| Latest-uploads monitoring (free) | ✅ Yes | ❌ No |
| OAuth 2.1 + API key auth | ✅ Both | ❌ Usually neither |
| Production scale (15M+ req/mo) | ✅ Yes | ❌ Hobbyist scrapers |
| Works on mobile Claude & web Claude | ✅ Yes | ❌ No |
| Agent-friendly error messages | ✅ Yes | ❌ Bare HTTP codes |
| No yt-dlp, no headless browser, no binaries | ✅ Just an API call | ❌ Blocked on cloud IPs |
Agent Plugins 1.0.0 standardizes the package format, not installation, so each client owns its own install flow. Point any of them at this repository:
https://github.com/ZeroPointRepo/transcriptapi-pluginVS Code
Command Palette → Chat: Install Plugin From Source, then paste the repo URL above.
Or register a local clone in settings.json:
"chat.pluginLocations": { "/absolute/path/to/transcriptapi-plugin": true }Cursor
Customize in the sidebar → find the plugin → Install. Or type /add-plugin and enter the repo URL.
For a local clone:
git clone https://github.com/ZeroPointRepo/transcriptapi-plugin ~/.cursor/plugins/local/transcriptapiThen Developer: Reload Window.
Claude Code
/plugin marketplace add ZeroPointRepo/transcriptapi-plugin
/plugin install transcriptapi@transcriptapiChatGPT · Codex · GitHub Copilot · Kiro · others
Point your client's plugin mechanism at this repository, or at a local clone. The package carries the canonical plugin.json and mcp.json, plus per-client manifests under .codex-plugin/, .cursor-plugin/ and .claude-plugin/ for clients that look there first.
The first YouTube question you ask opens a TranscriptAPI OAuth sign-in (free account, 100 credits, no card). Done.
The skill also works standalone against the REST API with an API key:
npx skills add ZeroPointRepo/transcriptapi-pluginOpenClaw · Hermes · manual
🦞 OpenClaw (ClawdBot/Moltbot): installs from the ClawHub registry, which serves the standalone skills repo:
npx clawhub@latest install youtube-fullHermes Agent:
hermes skills install skills-sh/ZeroPointRepo/transcriptapi-plugin/skills/youtubeManual:
git clone https://github.com/ZeroPointRepo/transcriptapi-plugin.git
cp -r transcriptapi-plugin/skills/youtube ~/.claude/skills/Not a developer? Paste this into Claude, ChatGPT, OpenClaw or any agent:
Install the TranscriptAPI plugin from https://github.com/ZeroPointRepo/transcriptapi-plugin I want YouTube transcripts, search and channel browsing from my agent. Set it up for me.
Tip: auto-invoke. Add this rule to your client so you never have to ask explicitly:
When I share a YouTube URL, automatically use TranscriptAPI to fetch the transcript before responding. This applies to any video analysis, summarization, or question about YouTube content.
Manual MCP configuration for 20+ other clients
The MCP endpoint is https://transcriptapi.com/mcp. Get an API key from your dashboard if your client doesn't do OAuth.
One-click, if you'd rather skip the config. Note these add the MCP server only, not the bundled skill:
Claude Desktop & Web: Settings → Connectors → Add custom connector → name TranscriptAPI, URL https://transcriptapi.com/mcp → Connect. Full guide →
Claude Code (CLI)
claude mcp add --transport http transcript-api https://transcriptapi.com/mcpChatGPT: enable Developer Mode, then Settings → Connected Apps → Add → URL https://transcriptapi.com/mcp. Leave Client ID/Secret blank for Dynamic Client Registration. Full guide →
OpenAI Agent Builder: add an MCP Server tool, URL https://transcriptapi.com/mcp, auth API Key. Guide →
Amp
amp mcp add transcript-api https://transcriptapi.com/mcp --header "Authorization: Bearer YOUR_API_KEY"Cursor (~/.cursor/mcp.json) · LM Studio · BoltAI · JetBrains AI Assistant · Trae
{
"mcpServers": {
"transcript-api": {
"url": "https://transcriptapi.com/mcp",
"headers": { "Authorization": "Bearer YOUR_API_KEY" }
}
}
}VS Code (settings.json) · Roo Code · Kilo Code (.kilocode/mcp.json)
"mcp.servers": {
"transcript-api": {
"type": "http",
"url": "https://transcriptapi.com/mcp",
"headers": { "Authorization": "Bearer YOUR_API_KEY" }
}
}Cline
{ "mcpServers": { "transcript-api": {
"url": "https://transcriptapi.com/mcp", "type": "streamableHttp",
"headers": { "Authorization": "Bearer YOUR_API_KEY" } } } }Windsurf (~/.codeium/windsurf/mcp_config.json) · Google Antigravity
{ "mcpServers": { "transcript-api": {
"serverUrl": "https://transcriptapi.com/mcp",
"headers": { "Authorization": "Bearer YOUR_API_KEY" } } } }Zed (settings.json)
{ "context_servers": { "transcript-api": {
"source": "remote", "url": "https://transcriptapi.com/mcp",
"headers": { "Authorization": "Bearer YOUR_API_KEY" } } } }Gemini CLI (~/.gemini/settings.json) · Qwen Coder (~/.qwen/settings.json)
{ "mcpServers": { "transcript-api": {
"httpUrl": "https://transcriptapi.com/mcp",
"headers": { "Authorization": "Bearer YOUR_API_KEY" } } } }Augment Code (settings.json under augment.advanced)
"augment.advanced": { "mcpServers": [
{ "name": "transcript-api", "url": "https://transcriptapi.com/mcp",
"headers": { "Authorization": "Bearer YOUR_API_KEY" } } ] }Warp (Settings → AI → MCP) · Perplexity Desktop (Settings → Connectors → Advanced)
{ "url": "https://transcriptapi.com/mcp",
"headers": { "Authorization": "Bearer YOUR_API_KEY" } }All six are exposed automatically once you connect. 1 credit = 1 successful (HTTP 200) request. Failed and rate-limited calls do not consume credits.
Fetch the transcript for any YouTube video, as markdown (with metadata) or structured JSON.
| Parameter | Type | Default | Description |
|---|---|---|---|
video_url |
string | required | YouTube URL (full or short) or 11-char video ID |
send_metadata |
boolean | true |
Include video title, author, thumbnail |
format |
string | "text" |
"text" (markdown) or "json" |
include_timestamp |
boolean | true |
Add timestamps to each segment |
Cost: 1 credit.
Example output
Markdown:
# Metadata
## Title: Rick Astley - Never Gonna Give You Up
## Author: RickAstleyVEVO
# Transcript
[0.0s] Never gonna give you up
[4.12s] Never gonna let you downJSON:
{
"transcript": [
{ "text": "Never gonna give you up", "start": 0.0, "duration": 4.12 },
{ "text": "Never gonna let you down", "start": 4.12, "duration": 3.85 }
],
"metadata": { "title": "Rick Astley...", "author_name": "RickAstleyVEVO" }
}Search YouTube for videos or channels. Filter by type and paginate with a continuation token.
| Parameter | Type | Default | Description |
|---|---|---|---|
query |
string | required | Search query |
search_type |
string | "video" |
"video" or "channel" |
continuation |
string | null |
Token from a prior call for next page |
Cost: 1 credit per page (~20 results).
The ~15 most recent uploads from any channel via RSS. No credits. Perfect for monitoring, daily recaps, or triggering downstream pipelines.
| Parameter | Type | Default | Description |
|---|---|---|---|
channel |
string | required | @handle, channel URL, or UC… channel ID |
Cost: Free.
Search inside one specific channel for videos matching a query.
| Parameter | Type | Default | Description |
|---|---|---|---|
channel |
string | required | @handle, channel URL, or UC… ID |
query |
string | required | Query to search within the channel |
continuation |
string | null |
Pagination token |
Cost: 1 credit per page (~30 results).
List every video on a channel, ~100 per page. Ideal for building databases or bulk transcript extraction.
| Parameter | Type | Default | Description |
|---|---|---|---|
channel |
string | required | @handle, channel URL, or UC… ID |
continuation |
string | null |
Pagination token |
Cost: 1 credit per page (~100 results).
Every video in a YouTube playlist (PL/UU/LL/FL/OL IDs supported). Process entire courses or lecture series in a single call.
| Parameter | Type | Default | Description |
|---|---|---|---|
playlist |
string | required | Playlist URL or playlist ID |
continuation |
string | null |
Pagination token |
Cost: 1 credit per page (~100 results).
One skill covers everything. It teaches the agent when YouTube is the right source, which tool answers each kind of question, and how not to burn credits: the judgement the MCP tool definitions can't carry on their own.
It handles both data paths automatically:
- MCP available → drives the 6 hosted tools above. OAuth, no key.
- MCP not available → falls back to the REST API with a
TRANSCRIPT_API_KEY, so the skill still works in clients that load skills but not MCP servers.
Structured for progressive disclosure, so the agent pays for detail only when it needs it:
skills/youtube/
├── SKILL.md # routing, credit discipline, workflows (~130 lines)
└── references/
├── mcp-tools.md # full parameter reference for the 6 tools
├── rest-api.md # REST fallback: endpoints, curl, validation rules
├── auth-setup.md # getting and persisting an API key
└── errors.md # error codes, retry policy, false alarms
Only name + description (~100 tokens) load at startup. The body loads when the skill activates; the references load only when actually consulted.
Looking for the granular skills? v1.0.0 shipped 13 overlapping skills (
transcript,captions,subtitles,yt, …). They were alias variants of one another, and thirteen near-identical descriptions competing at startup made skill selection worse, not better. They're consolidated here. The standalone, API-key-based versions still live in ZeroPointRepo/youtube-skills.
| 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; 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 @hubermanlab and tell me which to watch." |
| 🏛️ Build a content database | "Pull every video from @veritasium and store title + transcript." |
| 🎯 Competitor analysis | "Search inside @MKBHD for any video about [competitor product] and summarize the takeaways." |
There are no credentials in this package. Agent Plugins 1.0.0 has no portable field for embedding secrets, and authorization is client-managed.
- Dynamic Client Registration (DCR): Claude Desktop, Claude Web, ChatGPT and every Agent Plugins client. Just add the plugin; the client auto-registers and you authorize once via browser redirect. No key to copy.
- Static registration: optional on ChatGPT. Get Client ID + Secret from the MCP Integration Dashboard.
Universal fallback, and what the REST skills use.
- Get your key from your dashboard. Keys start with
sk_ - Send it as a Bearer token:
"Authorization": "Bearer sk_your_api_key_here"
For skills, export it once:
export TRANSCRIPT_API_KEY="sk_your_key_here"Security: store keys in environment variables and never commit them to version control. When you install a skill, most agents will offer to run the free signup + OTP flow and save the key for you automatically.
Where agents save the key
| Runtime | File |
|---|---|
| OpenClaw/Moltbot | ~/.openclaw/openclaw.json or ~/.clawdbot/moltbot.json |
| Hermes Agent | Hermes secret store (TRANSCRIPT_API_KEY) |
| macOS shell | ~/.zshenv, ~/.zprofile |
| Linux shell | ~/.profile, ~/.bashrc, ~/.zshenv |
| Fish shell | ~/.config/fish/config.fish |
| Fallback | ~/.transcriptapi (mode 600) |
| Plan | Price | Credits | Rate limit |
|---|---|---|---|
| Free | $0 (one-time) | 100 | 60 req/min |
| Starter Monthly | $5/month | 1,000/month | 200 req/min |
| Starter Annual | $54/year ($4.50/mo) | 1,000/month | 300 req/min |
- 1 credit = 1 successful request (HTTP 200).
- Failed and rate-limited requests do not consume credits.
get_channel_latest_videosis free.
| Symptom | Likely cause | Fix |
|---|---|---|
401 Unauthorized |
Key missing, mistyped, or not loaded into the environment | Confirm the key starts with sk_ and is set in the shell your agent runs in. If using OAuth, re-authorize. |
402 Payment Required |
Out of credits | Check your balance at transcriptapi.com/billing |
403 (Cloudflare 1010) |
Request sent without a User-Agent header | Send your agent's name as the User-Agent, e.g. HermesAgent/0.11.0 |
404 Not Found |
Video has no captions, is private, age-restricted or region-locked | Verify the URL opens in a browser and the player shows captions |
408 Request Timeout |
Temporary upstream pressure | Transient: retry once after ~2s |
422 Validation Error |
Malformed channel or playlist reference | Channels accept @handle, a channel URL, or a UC ID; playlists accept PL, UU, LL, FL, OL |
429 Too Many Requests |
Rate limit reached | Wait and respect the Retry-After header |
Three more worth knowing:
- Key saved but the agent can't see it. Shell config files load per shell type. Check the table above and make sure the file matches the shell your agent actually runs in. Restarting the agent after saving resolves most cases.
- Live streams and premieres. Transcripts appear after the stream ends and captions are processed, not while live.
- Unexpected transcript language. Many videos only carry captions in their original language. Request a preferred language, or ask your agent to translate the result.
OAuth issues
- Clear browser cookies and try again
- For ChatGPT, try switching between Dynamic and Static registration
- Ensure popup blockers aren't preventing the auth window
transcriptapi-plugin/
├── plugin.json # Agent Plugins 1.0.0 manifest (canonical $schema)
├── mcp.json # hosted MCP server: streamable-http, OAuth, no keys
├── skills/
│ └── youtube/ # one skill: SKILL.md + references/ (progressive disclosure)
├── assets/ # black-background brand marks (SVG + PNG 64→1024)
├── server.json # MCP Registry descriptor
├── smithery.yaml · glama.json # directory listings
├── marketplace.json # marketplace index (single-plugin)
├── .claude-plugin/ .cursor-plugin/ .codex-plugin/ .plugin/
│ # per-client discovery paths: same metadata, one per client
└── .github/workflows/ # CI: validates both manifests against the canonical schemas
The canonical package is plugin.json + skills/ + mcp.json. Everything else is discovery convenience for clients that look elsewhere first.
No secrets, no executable code, no stdio servers: nothing here runs on your machine. Check it yourself.
1. Manifests against the canonical schemas:
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 -y ajv-cli@5 validate --spec=draft2020 -s plugin.schema.json -d plugin.json
npx -y ajv-cli@5 validate --spec=draft2020 -s mcp.schema.json -d mcp.json2. Every skill against the Agent Skills specification. This is the check that actually matters: §7.1 requires skills to conform, and a conformant client silently skips any skill that doesn't. A plugin can have perfect manifests and still ship skills that never load.
pip install "git+https://github.com/agentskills/agentskills.git#subdirectory=skills-ref"
for d in skills/*/; do skills-ref validate "$d"; doneIt prints Valid skill.
3. The normative requirements a schema can't express: path safety, discovery depth, reverse-domain extension namespaces, transport rules:
python .github/scripts/check_conformance.pyCI runs the skill validation and the conformance checker on every pull request. The ajv step above is the canonical schema check. check_conformance.py enforces the same rules plus the ones a schema can't express, so running it locally is equivalent. See SECURITY.md.
Building an app instead of an agent? The same backend ships as a JSON REST API.
| Agent Plugin / MCP | REST API | |
|---|---|---|
| Best for | AI assistants & agents | Apps & backend services |
| Setup | One install | Code integration |
| Get started | This README | API docs → · Swagger → |
Base URL: https://transcriptapi.com/api/v2
Published to the official Model Context Protocol Registry as:
com.transcriptapi/youtube-transcript-and-youtube-search
- Standalone MCP server: ZeroPointRepo/youtube-mcp
- Standalone agent skills (API-key based): ZeroPointRepo/youtube-skills
- Verified Agent Plugins directory: ZeroPointRepo/awesome-agent-plugins
- 🌐 Website: transcriptapi.com
- 📚 Docs: transcriptapi.com/docs
- 🔧 API Reference: transcriptapi.com/docs/api
- 🤖 MCP setup guides: Claude · ChatGPT · OpenAI Agent Builder
- 💬 Contact: transcriptapi.com/contact
PRs welcome: see CONTRIBUTING.md.
TranscriptAPI is an independent product and is not affiliated with, endorsed by, or sponsored by YouTube or Google.
© 2026 TranscriptAPI · Released under the MIT License