YouTube transcripts, search, channel browsing, and playlists for AI agents via MCP.
One address for any MCP client. No sign-in needed on this server.
7 read
Grouped by tool name. At most: only reads or looks up information.
Odel charges nothing per call. The publisher may charge for its own service.
A remote MCP server for YouTube: transcripts, video and channel search, channel browsing, in-channel search, and playlist extraction.
API key or OAuth 2.1 sign-in. Free tier, no card required.
Seven tools, one hosted endpoint, no local install, for Claude, ChatGPT, Cursor, VS Code, Windsurf, and 15+ other MCP-compatible clients.
https://getyoutubetranscript.com/api/mcp
Quick taste:
Search @veritasium for videos about black holes, pull the transcript of the
two best matches, and tell me where they disagree.
The agent chains search_channel_videos and get_youtube_transcript on its own. No code on your side.
| This MCP | Typical single-purpose YouTube MCP | |
|---|---|---|
| Hosting | ✅ Remote (no local install, no build step) | ❌ Local stdio process to manage |
| Tools | ✅ 7 (transcript, search, channel latest/search/videos, playlist, credits) | ❌ Usually 1 (transcript only) |
| YouTube search (video and channel) | ✅ Yes | ❌ No |
| Full channel upload history, paginated | ✅ Yes | ❌ No |
| In-channel search | ✅ Yes | ❌ No |
| Auth | ✅ API key and OAuth 2.1 (DCR + CIMD) | ❌ Usually neither |
| Agent-friendly errors | ✅ Stable error codes, human-readable messages | ❌ Bare HTTP codes |
This repo root is also an Agent Plugins 1.0.0 package. It bundles the MCP server with a youtube skill that tells the agent which tool to use when, what each one costs, and how to avoid wasting credits.
plugin.json # plugin manifest
mcp.json # hosted MCP server (streamable-http, OAuth, no key in the file)
skills/youtube/SKILL.md # when and how to use the 7 tools
In VS Code, run Chat: Install Plugin From Source and paste https://github.com/tubeagentkit/youtube-mcp. Other clients that support Agent Plugins can point at this repo or a local clone. For Cursor there is a separate plugin repo.
The package holds no credentials. Check the manifests against the published schemas 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
The same plugin.json carries the ChatGPT/Codex plugin directory listing under extensions.com.openai (other clients ignore it). scripts/build-openai-zip.sh checks it against OpenAI's field limits and builds the upload ZIP in dist/, with only plugin.json, mcp.json, skills/ and assets/.
Requirements: a free getyoutubetranscript.com account (sign up — 100 credits, no card) and an API key from your dashboard — or just connect via OAuth and skip the key entirely (see Authentication below).
Tip: clients that support MCP OAuth can skip the
headersblock in the snippets below and sign in through the browser instead.
Tip: to stop repeating "use the transcript tool", add a standing instruction to your client's rules or custom instructions, for example: "When I share a YouTube link, fetch its transcript with the youtube-transcript MCP before answering."
claude mcp add --transport http youtube-transcript https://getyoutubetranscript.com/api/mcp --header "Authorization: Bearer YOUR_API_KEY"
YouTube Transcript · URL: https://getyoutubetranscript.com/api/mcpSettings → Features → MCP → Add New MCP Server — Type: SSE/HTTP, URL: https://getyoutubetranscript.com/api/mcp.
Or edit ~/.cursor/mcp.json:
{
"mcpServers": {
"youtube-transcript": {
"url": "https://getyoutubetranscript.com/api/mcp",
"headers": { "Authorization": "Bearer YOUR_API_KEY" }
}
}
}
"mcp.servers": {
"youtube-transcript": {
"type": "http",
"url": "https://getyoutubetranscript.com/api/mcp",
"headers": { "Authorization": "Bearer YOUR_API_KEY" }
}
}
Enable Developer Mode, then Settings → Connected Apps → Add → URL https://getyoutubetranscript.com/api/mcp. Leave Client ID/Secret blank for Dynamic Client Registration, or use OAuth sign-in directly.
Add to ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"youtube-transcript": {
"serverUrl": "https://getyoutubetranscript.com/api/mcp",
"headers": { "Authorization": "Bearer YOUR_API_KEY" }
}
}
}
{
"mcpServers": {
"youtube-transcript": {
"url": "https://getyoutubetranscript.com/api/mcp",
"type": "streamableHttp",
"headers": { "Authorization": "Bearer YOUR_API_KEY" }
}
}
}
{
"context_servers": {
"youtube-transcript": {
"source": "remote",
"url": "https://getyoutubetranscript.com/api/mcp",
"headers": { "Authorization": "Bearer YOUR_API_KEY" }
}
}
}
{
"mcpServers": {
"youtube-transcript": {
"type": "streamable-http",
"url": "https://getyoutubetranscript.com/api/mcp",
"headers": { "Authorization": "Bearer YOUR_API_KEY" }
}
}
}
amp mcp add youtube-transcript https://getyoutubetranscript.com/api/mcp --header "Authorization: Bearer YOUR_API_KEY"
"augment.advanced": {
"mcpServers": [
{
"name": "youtube-transcript",
"url": "https://getyoutubetranscript.com/api/mcp",
"headers": { "Authorization": "Bearer YOUR_API_KEY" }
}
]
}
In .kilocode/mcp.json:
{
"mcpServers": {
"youtube-transcript": {
"type": "streamable-http",
"url": "https://getyoutubetranscript.com/api/mcp",
"headers": { "Authorization": "Bearer YOUR_API_KEY" }
}
}
}
Settings → Tools → AI Assistant → MCP:
{
"mcpServers": {
"youtube-transcript": {
"url": "https://getyoutubetranscript.com/api/mcp",
"headers": { "Authorization": "Bearer YOUR_API_KEY" }
}
}
}
Summarize this video for me: https://youtu.be/dQw4w9WgXcQ
The agent calls get_youtube_transcript and summarizes the result. If you connected via OAuth, there's no key to configure at all — just approve the connection once.
Prefer a local process? server/ is an open-source stdio MCP server with the same 7 tools, built on the official MCP TypeScript SDK. It calls the public REST API with your API key.
git clone https://github.com/tubeagentkit/youtube-mcp
npm install --prefix youtube-mcp/server
Then point your client at it, e.g. Claude Desktop / Cursor:
{
"mcpServers": {
"youtube-transcript": {
"command": "node",
"args": ["/absolute/path/to/youtube-mcp/server/index.js"],
"env": { "GYT_API_KEY": "sk_live_your_key_here" }
}
}
}
Live integration test (uses only free tools): GYT_API_KEY=sk_live_... npm test --prefix server
Universal, works with every MCP client. Get one free (100 credits, no card) at the dashboard, then send it as a Bearer token:
"headers": { "Authorization": "Bearer sk_live_your_key_here" }
No manual key management — sign in via browser, the server handles the rest.
Both methods issue a token scoped and audience-bound to this specific MCP server — it can't be replayed against any other API.
All seven tools are exposed automatically once you connect. 1 credit = 1 successful request. Failed or rate-limited calls never consume credits.
get_youtube_transcriptFetch the full transcript for a YouTube video, plus its title/author/thumbnail metadata.
| Parameter | Type | Required | Description |
|---|---|---|---|
video_url | string | required | YouTube URL (full or short) or an 11-character video ID |
language | string | optional | Language code, e.g. en, es. Defaults to en |
send_metadata | boolean | optional | Include title/author/thumbnail. Defaults to true |
timestamps | boolean | optional | One line per caption, each starting with its [m:ss] start time ([h:mm:ss] past an hour). Defaults to false (one block of text) |
Cost: 1 credit, with or without timestamps.
search_youtubeSearch YouTube for videos or channels, paginated.
| Parameter | Type | Required | Description |
|---|---|---|---|
query | string | required unless continuation set | Search query |
search_type | "video" | "channel" | optional | Defaults to "video" |
continuation | string | optional | Opaque token from a previous response — fetches the next page |
Cost: 1 credit/page.
get_channel_latest_videos · FREEGet a channel's metadata plus its most recent uploads.
| Parameter | Type | Required | Description |
|---|---|---|---|
channel | string | required | @handle, channel URL, or UC… channel ID |
Cost: Free.
search_channel_videosSearch within one specific channel's videos.
| Parameter | Type | Required | Description |
|---|---|---|---|
channel | string | required unless continuation set | @handle, channel URL, or UC… ID |
query | string | required unless continuation set | Query to search within the channel |
continuation | string | optional | Opaque token — fetches the next page |
Cost: 1 credit/page.
list_channel_videosList every video a channel has ever uploaded (the full /videos tab, not just recent ones).
| Parameter | Type | Required | Description |
|---|---|---|---|
channel | string | required unless continuation set | @handle, channel URL, or UC… ID |
continuation | string | optional | Opaque token — fetches the next page |
Cost: 1 credit/page.
list_playlist_videosGet every video in a YouTube playlist.
| Parameter | Type | Required | Description |
|---|---|---|---|
playlist | string | required unless continuation set | Playlist URL or ID |
continuation | string | optional | Opaque token — fetches the next page |
Cost: 1 credit/page.
get_credits · FREECheck the remaining credit balance for your key/account. No parameters.
Cost: Free.
| 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]" |
| 📡 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." |
| 🎯 Channel research | "Search inside @MKBHD for any video about [topic] and summarize the takeaways." |
| ✍️ Repurpose content | "Turn this video into a 1,500-word blog post: [URL]" |
| Plan | Price | Credits | Rate Limit |
|---|---|---|---|
| Free | $0 | 100 credits on signup | 60 req/min |
| Monthly | $5/month | 1,000 credits/month | 200 req/min |
| Annual | $4.50/mo ($54/yr) | 1,000 credits/month | 300 req/min |
get_channel_latest_videos is always free.sk_live_ and has no extra whitespaceCheck your balance and top up or upgrade at the dashboard.
Back off and retry after a short delay — don't hammer it in a tight loop.
This repo contains the MIT-licensed source of the local stdio MCP server in server/
(tool definitions, input validation, API calls, error mapping), plus the manifests for the
hosted endpoint. The hosted endpoint and the REST API behind both are run by
getyoutubetranscript.com and are not open source. To check either one yourself:
GYT_API_KEY=sk_live_... npm test --prefix server
starts server/index.js over stdio, lists all 7 tools, and calls the free ones.verify.js against the hosted endpoint — zero dependencies, zero auth required:
node verify.js
initialize then tools/list) against the live
endpoint and prints the server's actual response, including all 7 real tool schemas.
Tool discovery is public; only tool calls require an API key or OAuth token (see
Authentication).com.getyoutubetranscript/youtube-transcript-and-youtube-search, published via domain-ownership-verified HTTP mcp-publisherBuilding an app instead of an agent? The same backend is a plain JSON REST API — see the Agent Skill repo for the full endpoint reference, or the dashboard to get a key directly.
Base URL: https://getyoutubetranscript.com/api/v1
getyoutubetranscript.com is an independent product and is not affiliated with or endorsed by YouTube or Google.
Other ways to use the GetYouTubeTranscript API:
MIT — see LICENSE.