Skip to main content
Glama
ZeroPointRepo

TranscriptAPI YouTube Transcript + YouTube Search MCP

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).


Why TranscriptAPI MCP

Most YouTube MCP servers do one thing: pull a single transcript. TranscriptAPI MCP is a full toolkit: transcripts, video search, channel search, channel browsing, playlist extraction, and free RSS-based upload tracking, all from one remote endpoint, all designed for AI agents.

TranscriptAPI MCP

Typical YouTube MCP

Hosting

✅ Remote (no local install)

❌ Local stdio install

Tools

✅ 12 tools

❌ 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

Quick taste:

Find @NASA's three most-viewed videos about the Moon landing,
get the transcript of each, and write a 5-bullet comparison.

That single prompt uses 3 of our 12 tools (search_youtube, search_channel_videos, get_youtube_transcript) without you writing a line of code.


Related MCP server: YouTube MCP

🧩 Install as an Agent Plugin · easiest

This repository root is a conformant Agent Plugins 1.0.0 package: the portable format published 2026-08-06 and 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                    # Agent Plugins 1.0.0 manifest
mcp.json                       # hosted MCP server, streamable-http, OAuth (no keys)
skills/youtube/SKILL.md        # when + how to use the 12 tools
.cursor-plugin/plugin.json     # Cursor plugin manifest, same MCP + skill (+ marketplace.json)

VS Code: Command Palette → Chat: Install Plugin From Source, then paste:

https://github.com/ZeroPointRepo/youtube-mcp

Or 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/ZeroPointRepo/youtube-mcp ~/.cursor/plugins/local/transcriptapi

Then Developer: Reload Window.

Add to Cursor: MCP server only, no clone. Paste this deeplink into your browser:

cursor://anysphere.cursor-deeplink/mcp/install?name=transcriptapi&config=eyJ1cmwiOiJodHRwczovL3RyYW5zY3JpcHRhcGkuY29tL21jcCJ9

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.

30-second example

Summarize this video for me: https://youtu.be/UF8uR6Z6KLc

The agent calls get_youtube_transcript, gets the full timestamped transcript and summarizes it. No API key to configure: the first call opens an OAuth sign-in (free account, 100 credits, no card). Then try:

What has @TED posted in the last month?     → get_channel_latest_videos (free)
Find talks on protein folding, summarize the best three.
                                             → search_youtube, then transcripts

There are no credentials in this package: Agent Plugins 1.0.0 forbids embedded secrets, and authorization is client-managed. 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

🛠️ Quick Install

Requirements:

  • A TranscriptAPI account (sign up free, first 100 credits free)

  • An API key from your dashboard OR use OAuth (Claude, ChatGPT)

Recommended: Add a Rule to Auto-Invoke TranscriptAPI

Add this rule to your AI client so you don't need to explicitly ask for transcripts:

When I share a YouTube URL, automatically use the TranscriptAPI MCP tool
to fetch the transcript before responding. This applies to any video analysis,
summarization, or question about YouTube content.

One-Click Install:

Install MCP Server

Manual Configuration:

Go to: Settings → Features → MCP → Add New MCP Server

  • Name: transcript-api

  • Type: SSE (Remote)

  • URL: https://transcriptapi.com/mcp

Or edit ~/.cursor/mcp.json:

{
  "mcpServers": {
    "transcript-api": {
      "url": "https://transcriptapi.com/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_KEY"
      }
    }
  }
}

Claude supports adding MCP servers directly via the "Custom Connector" UI.

Quick Setup:

  1. Open Claude Settings (click your profile icon → Settings)

  2. Go to Connectors → Add custom connector

  3. Enter the following details:

    • Name: TranscriptAPI

    • URL: https://transcriptapi.com/mcp

  4. Click Add, then click Connect to authorize via your browser.

  5. (Optional) In the connector settings, change permissions to "Allow unsupervised" for seamless usage.

Full Guide: Claude Integration Guide →

claude mcp add --transport http transcript-api https://transcriptapi.com/mcp

ChatGPT supports OAuth for secure authentication. Enable Developer Mode in ChatGPT settings first.

Quick Setup:

  1. In ChatGPT, go to Settings → Connected Apps → Add

  2. Enter the MCP Server URL: https://transcriptapi.com/mcp

  3. Client ID & Secret are optional:

    • Leave them blank to use Dynamic Client Registration (recommended/simpler).

    • (Advanced) Or enter Client ID & Secret from your dashboard for static registration.

  4. Click Add and authorize via the browser popup.

Full Guide: ChatGPT Integration Guide →

Or add this to VS Code user settings (settings.json):

"mcp.servers": {
  "transcript-api": {
    "type": "http",
    "url": "https://transcriptapi.com/mcp",
    "headers": {
      "Authorization": "Bearer YOUR_API_KEY"
    }
  }
}

OpenAI Agent Builder currently requires API Key authentication (OAuth not yet supported).

  1. Create a new Agent

  2. Under "Actions" or "Tools", add a new MCP Server

  3. URL: https://transcriptapi.com/mcp

  4. Auth Type: API Key

  5. Paste your API Key from the dashboard

Step-by-Step Guide →

Add to ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "transcript-api": {
      "serverUrl": "https://transcriptapi.com/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_KEY"
      }
    }
  }
}
{
  "mcpServers": {
    "transcript-api": {
      "url": "https://transcriptapi.com/mcp",
      "type": "streamableHttp",
      "headers": {
        "Authorization": "Bearer YOUR_API_KEY"
      }
    }
  }
}

In Zed settings.json:

{
  "context_servers": {
    "transcript-api": {
      "source": "remote",
      "url": "https://transcriptapi.com/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_KEY"
      }
    }
  }
}
{
  "mcpServers": {
    "transcript-api": {
      "type": "streamable-http",
      "url": "https://transcriptapi.com/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_KEY"
      }
    }
  }
}
amp mcp add transcript-api https://transcriptapi.com/mcp --header "Authorization: Bearer YOUR_API_KEY"

In settings.json under augment.advanced:

"augment.advanced": {
  "mcpServers": [
    {
      "name": "transcript-api",
      "url": "https://transcriptapi.com/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_KEY"
      }
    }
  ]
}

In .kilocode/mcp.json:

{
  "mcpServers": {
    "transcript-api": {
      "type": "streamable-http",
      "url": "https://transcriptapi.com/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_KEY"
      }
    }
  }
}

In Settings → Tools → AI Assistant → MCP:

{
  "mcpServers": {
    "transcript-api": {
      "url": "https://transcriptapi.com/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_KEY"
      }
    }
  }
}

In ~/.gemini/settings.json:

{
  "mcpServers": {
    "transcript-api": {
      "httpUrl": "https://transcriptapi.com/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_KEY"
      }
    }
  }
}

In ~/.qwen/settings.json:

{
  "mcpServers": {
    "transcript-api": {
      "httpUrl": "https://transcriptapi.com/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_KEY"
      }
    }
  }
}
{
  "mcpServers": {
    "transcript-api": {
      "serverUrl": "https://transcriptapi.com/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_KEY"
      }
    }
  }
}
{
  "mcpServers": {
    "transcript-api": {
      "url": "https://transcriptapi.com/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_KEY"
      }
    }
  }
}

In mcp.json:

{
  "mcpServers": {
    "transcript-api": {
      "url": "https://transcriptapi.com/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_KEY"
      }
    }
  }
}

In Plugins → JSON Config:

{
  "mcpServers": {
    "transcript-api": {
      "url": "https://transcriptapi.com/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_KEY"
      }
    }
  }
}

In Settings → AI → MCP:

{
  "transcript-api": {
    "url": "https://transcriptapi.com/mcp",
    "headers": {
      "Authorization": "Bearer YOUR_API_KEY"
    }
  }
}

In Settings → Connectors → Advanced:

{
  "url": "https://transcriptapi.com/mcp",
  "headers": {
    "Authorization": "Bearer YOUR_API_KEY"
  }
}

🔐 Authentication

API Key

Simple and universal. Works with every MCP client.

  1. Get your API key from your dashboard

  2. Keys start with sk_ prefix

  3. Add to config as a Bearer token:

"headers": {
  "Authorization": "Bearer sk_your_api_key_here"
}

Security: Store keys in environment variables where possible and never commit them to version control.

OAuth 2.1

Automatic, secure authentication without manual key management.

Dynamic Client Registration (DCR):

  • Supported by: Claude Desktop, Claude Web, ChatGPT

  • Just add the MCP URL: client auto-registers

  • No credentials needed

  • You'll authorize once via browser redirect

Static Client Registration:

Full reference: Authentication docs →


🧰 Available Tools

All 12 tools are exposed automatically once you connect. Successful calls cost 1 credit unless a tool states otherwise below. Failed/rate-limited calls do not consume credits.

Which video tool? Use get_youtube_video_info (free) to discover transcript languages before fetching a transcript. Use get_video_metadata (1 credit) for view/like counts, publish date, description, duration, tags, or related videos.

1. get_youtube_transcript

Fetch the transcript for any YouTube video, as markdown (with metadata) or structured JSON. Drop the output straight into summarizers, search indexes, or AI pipelines.

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 per successful request.

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 down

Example output (JSON):

{
  "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" }
}

2. get_youtube_video_info · FREE

Basic metadata (title, author, thumbnail) plus the list of available transcript languages: call this before get_youtube_transcript to pick a language.

Parameter

Type

Default

Description

video_url

string

required

YouTube URL (full or short) or 11-char video ID

Cost: Free.

For view/like counts, publish date, description, duration, tags, or related videos, use get_video_metadata instead.


3. get_video_metadata

Rich video metadata without needing captions: title, view/like-count text, publish date, structured description + links, uploading-channel summary, and thumbnails. Optional include extras pull heavier player-sourced data (duration, category, tags, caption-track inventory) and related videos.

Parameter

Type

Default

Description

video_url

string

required

YouTube URL (full or short) or 11-char video ID

include

string[]

none

Extras: "details" (duration, category, tags, caption tracks) and/or "related" (related videos)

Cost: 1 credit per successful request.

Example prompt:

Get the view count, publish date, and tags for https://youtu.be/UF8uR6Z6KLc.

4. search_youtube

Search YouTube for videos, channels, playlists, or movies. Filter by type, sort, upload date, or duration, and paginate with a continuation token, perfect for discovery, research, and building content pipelines.

Parameter

Type

Default

Description

query

string

required (first call)

Search query

search_type

string

"video"

"video", "channel", "playlist", or "movie" (first call only)

sort

string

"relevance"

First-page sort: "relevance" or "views"

upload_date

string

none

First-page upload window (videos only): hour, today, week, month, year

duration

string

none

First-page duration bucket (videos only): short (under 4m), medium (4-20m), long (over 20m)

continuation

string

null

Token from a prior call for next page

Cost: 1 credit per page (~20 results per page).

Example prompt:

Search YouTube for "transformer architecture explained" and pick the
top 3 results by relevance.

5. get_channel_info

A channel's profile: title, @handle, verified flag, subscriber/video-count text, description, keywords, tags, thumbnails, banners, and the tabs it exposes. Not paginated.

Parameter

Type

Default

Description

channel

string

required

@handle, channel URL, or UC… channel ID

Cost: 1 credit per successful request.

Check the returned tabs before calling get_channel_sections or list_channel_videos with a tab.


6. get_channel_latest_videos · FREE

Get the ~15 most recent uploads from any channel via RSS. 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.

Example prompt:

Every morning, list new uploads from @NASA and @natgeo.

7. search_channel_videos

Search inside one specific channel for videos matching a query. Great for researching a creator's content or finding niche topics in large channels.

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 per page).

Example prompt:

On @NASA's channel, find every video about the Moon landing.

8. list_channel_videos

List a channel's feed with pagination. Use tab to choose the uploads feed (default, ~100/page), Shorts, or live streams (~48/page), and the optional sort to order the Videos tab by latest, popular, or oldest. Ideal for building databases, bulk transcript extraction, or auditing a channel's full content library.

Parameter

Type

Default

Description

channel

string

required (first call)

@handle, channel URL, or UC… ID

tab

string

"videos"

Which feed: videos (uploads), shorts, or streams (live). Repeat the same tab when paginating.

sort

string

null

latest, popular, or oldest. Omit for the uploads feed. Repeat the same value when paginating.

continuation

string

null

Pagination token

Sorting. Add sort=latest, popular, or oldest to channel/videos to get a channel's videos in the order you want, for example its most-popular uploads first. A sorted page returns about 30 videos (an unsorted page returns about 100), and every page costs the same 1 credit.

Sorted results come from YouTube's Videos tab (long-form only); Shorts have their own tab=shorts feed.

When paging, send the same sort on each request.

Every item carries members_only: true only when YouTube badges the video "Members only", and those items have no viewCountText, because YouTube does not publish view counts for membership content. It is always false on the uploads feed, on tab: "shorts", and on playlists.

Items from tab: "streams" carry lengthText and publishedTimeText (for example Streamed 2 years ago, or LIVE and a watching count while the stream is live). tab: "shorts" returns null for both, because YouTube's Shorts grid publishes neither a duration nor a publish date. On the channel-tab feeds (tab: "videos" with sort, tab: "shorts", tab: "streams") channelId, channelTitle, channelHandle and index are null.

Cost: 1 credit per page.


9. list_channel_playlists

Paginated list of the playlists on a channel (id, title, URL, video-count text, thumbnails). Pass a returned playlist id to list_playlist_videos to get its videos.

Parameter

Type

Default

Description

channel

string

required (first call)

@handle, channel URL, or UC… ID

continuation

string

null

Pagination token

Cost: 1 credit per page.


10. list_channel_posts

Paginated list of a channel's community (Posts tab) content: text, publish time, like-count text, and attachments (image, multi-image, video, playlist, or poll). Channels without a community tab return an empty results list, not an error.

Parameter

Type

Default

Description

channel

string

required (first call)

@handle, channel URL, or UC… ID

continuation

string

null

Pagination token

Cost: 1 credit per page.


11. get_channel_sections

The curated, grouped sections of a channel page: titled shelves of videos, playlists, shorts, or featured channels, in the channel's own order. Not paginated.

Parameter

Type

Default

Description

channel

string

required

@handle, channel URL, or UC… ID

tab

string

"featured"

Which curated page: featured (Home), podcasts, or releases

Cost: 1 credit per successful request.

podcasts and releases exist only on channels that have them (empty results otherwise).


12. list_playlist_videos

Get every video in a YouTube playlist (PL/UU/LL/FL/OL IDs supported). Process entire courses, lecture series, or curated collections in a single call.

Parameter

Type

Default

Description

playlist

string

required (first call)

Playlist URL or playlist ID

continuation

string

null

Pagination token

Cost: 1 credit per page (~100 results per page).


💡 Use Cases & Prompts

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 channel

"Each morning, list new uploads from @TED and tell me which to watch."

🏛️ Build a content database

"Pull every video from @NASA and store title + transcript."

🎯 Competitor analysis

"Search inside @NASA for any video about [a specific mission or topic] and summarize the takeaways."


💳 Pricing & Rate Limits

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_videos is free (no credits charged).

  • View pricing · Manage credits


🚨 Troubleshooting

  • Verify your API key starts with sk_

  • Check for extra spaces when copying

  • Ensure the key is active in your dashboard

  • If using OAuth, try re-authorizing

  • Check your credit balance at the dashboard

  • Purchase more credits or upgrade your plan

  • The video might not have captions/subtitles enabled

  • The video might be private or age-restricted

  • The video might be region-locked

  • Respect the Retry-After header

  • Implement exponential backoff in your client

  • Upgrade to a paid plan for higher limits

  • Clear browser cookies and try again

  • For ChatGPT, try switching between Dynamic and Static registration

  • Ensure popup blockers aren't preventing the auth window


🔗 Also available as a REST API

Building an app instead of an agent? The same backend ships as a JSON REST API.

MCP

REST API

Best for

AI assistants & agents

Apps & backend services

Setup

Add a URL

Code integration

Get started

This README

API docs → · Swagger →

Base URL: https://transcriptapi.com/api/v2


🤝 Connect


📋 MCP Registry

This server is published to the official Model Context Protocol Registry under the name:

com.transcriptapi/youtube-transcript-and-youtube-search

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that enables interaction with the YouTube Data API, allowing users to search videos, get video and channel details, analyze trends, and fetch video transcripts.
    -
  • A
    license
    A
    quality
    D
    maintenance
    An MCP server that enables users to retrieve YouTube transcripts and perform video or channel searches without requiring Google API keys. It supports transcript chunking and provides tools for detailed video content analysis and channel metadata extraction.
    5
    30 npm
    4
    MIT