Skip to content

MCP (Model Context Protocol)

Use TranscriptAPI to fetch transcripts, search YouTube, browse channels, and list playlists — all from within your AI assistant via Model Context Protocol (MCP).

Model Context Protocol (MCP) is a standardized framework that enables AI assistants like Claude and ChatGPT to connect directly with external tools and data sources. With TranscriptAPI’s MCP integration, your AI can fetch YouTube transcripts on-demand without manual copy-pasting or switching between applications.

Key Benefits:

  • Direct integration into your AI workflow
  • No manual transcript fetching needed
  • Consistent, structured data format
  • Works with any MCP-compatible platform

TranscriptAPI offers unique advantages for YouTube Transcript MCP integration:

TranscriptAPI works with any platform that supports MCP. Whether your platform uses OAuth for seamless authentication (like Claude and ChatGPT) or requires manual API key configuration (like OpenAI Agent Builder), we provide both options to ensure maximum compatibility.

  • Battle-tested with major AI platforms
  • Consistent performance across all authentication methods
  • Same powerful transcript extraction engine as our REST API
  • Flexible authentication options (OAuth or API Key) based on your platform’s requirements

Before setting up TranscriptAPI with MCP, ensure you have:

  • A TranscriptAPI account (sign up free)
  • An AI assistant or platform that supports MCP
  • For OAuth: A web browser for the initial authorization
  • For API Key: An active API key from your dashboard

Get your MCP configuration details from the MCP dashboard or use these settings:

PropertyValue
Server NameTranscript API
Server URLhttps://transcriptapi.com/mcp
DescriptionUse TranscriptAPI to fetch YouTube video transcript automatically
IconDownload Icon

TranscriptAPI supports two authentication methods to work with different MCP platforms:

OAuth provides automatic, secure authentication without manual key management. Supported by:

  • Claude (Dynamic Client Registration - optional credentials)
  • ChatGPT (Static Client Registration - requires Client ID/Secret)
  • Any MCP client supporting OAuth 2.1

Two Registration Methods:

TranscriptAPI supports both Dynamic Client Registration (DCR) and Static Client Registration to work with different platforms:

1. Dynamic Client Registration (Claude, optional)

  • Claude and other clients that support DCR can automatically register
  • No Client ID/Secret needed - just add the MCP server URL
  • The client automatically discovers OAuth endpoints and registers itself
  • You’ll be redirected to authorize access (one-time)

2. Static Client Registration (ChatGPT, required)

  • ChatGPT requires Client ID and Client Secret upfront
  • Get your credentials from the MCP Integration dashboard
  • Select “OAuth (Recommended)” and click “Generate Credentials”
  • Copy your Client ID and Client Secret
  • Add them to your ChatGPT MCP connector configuration

How it works:

  1. Add the MCP server URL to your client
  2. For ChatGPT: Add Client ID and Client Secret
  3. For Claude: Credentials are optional (DCR supported)
  4. The client automatically discovers our OAuth endpoints
  5. You’ll be redirected to authorize access (one-time)
  6. Tokens are managed automatically with refresh support

Technical Details:

  • Uses OAuth 2.1 with both Dynamic Client Registration (RFC 7591) and Static Registration
  • Authorization server metadata: /.well-known/oauth-authorization-server
  • Protected resource metadata: /.well-known/oauth-protected-resource
  • Required scope: mcp:access
  • Access tokens prefixed with oat_

Benefits:

  • No manual key management (for DCR clients)
  • Automatic token refresh
  • Secure, time-limited access
  • Revocable permissions
  • Platform-specific support (ChatGPT and Claude)

TranscriptAPI exposes 12 tools through MCP:

ToolDescriptionCost
get_youtube_transcriptFetch video transcript as markdown or JSON1 credit
get_youtube_video_infoBasic metadata + available transcript languages (pick a language first)Free
get_video_metadataRich video metadata; optional details (duration, tags, captions) + related1 credit
search_youtubeSearch videos, channels, playlists, or movies — with sort/date/duration filters1 credit/page
get_channel_infoChannel profile: title, handle, counts, tags, banners, available tabs1 credit
get_channel_latest_videosGet latest ~15 videos from a channel (RSS)Free
search_channel_videosSearch within a specific channel1 credit
list_channel_videosPaginated channel feed — videos (default), shorts, or streams1 credit/page
list_channel_playlistsPaginated list of a channel’s playlists1 credit/page
list_channel_postsPaginated community (Posts tab) content1 credit/page
get_channel_sectionsCurated channel sections (featured Home, podcasts, releases)1 credit
list_playlist_videosPaginated list of playlist videos1 credit/page

All channel tools accept flexible input: @handle, full YouTube URL, or UC... channel ID.

Extract transcripts from any YouTube video with full control over the output format.

Parameters:

ParameterTypeDefaultDescription
video_urlstringrequiredYouTube video URL or 11-character video ID
send_metadatabooleantrueInclude video title, author, and thumbnail
formatstring"text"Output format: "text" (markdown) or "json" (structured)
include_timestampbooleantrueInclude timestamps with each segment

Accepted URL Formats:

  • Full URL: https://www.youtube.com/watch?v=dQw4w9WgXcQ
  • Short URL: https://youtu.be/dQw4w9WgXcQ
  • Video ID only: dQw4w9WgXcQ

Example Usage:

// Get transcript as markdown with metadata (default)
get_youtube_transcript({
video_url: "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
})
// Returns:
{
"content": "# Metadata\n## Title: Rick Astley - Never Gonna Give You Up\n## Author: RickAstleyVEVO\n## Author URL: https://www.youtube.com/@RickAstley\n## Thumbnail: https://i.ytimg.com/vi/dQw4w9WgXcQ/hqdefault.jpg\n\n# Transcript\n[0.0s] Never gonna give you up\n[4.12s] Never gonna let you down..."
}
// Get JSON format without metadata
get_youtube_transcript({
video_url: "dQw4w9WgXcQ",
format: "json",
send_metadata: false
})
// Returns:
{
"content": {
"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
}
]
}
}
// Get plain text without timestamps
get_youtube_transcript({
video_url: "dQw4w9WgXcQ",
format: "text",
include_timestamp: false,
send_metadata: false
})
// Returns:
{
"content": "# Transcript\nNever gonna give you up Never gonna let you down Never gonna run around and desert you..."
}

Output Formats:

Returns markdown-formatted text with optional metadata header and timestamped transcript lines.

# Metadata
## Title: Video Title Here
## Author: Channel Name
## Author URL: https://www.youtube.com/@ChannelName
## Thumbnail: https://i.ytimg.com/vi/VIDEO_ID/hqdefault.jpg
# Transcript
[0.0s] First line of transcript
[3.5s] Second line of transcript
[7.2s] Third line of transcript

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

Parameters:

ParameterTypeDefaultDescription
video_urlstringrequiredYouTube video URL or 11-character video ID

Each returned language code (e.g. en, or asr-en for auto-generated English) can be passed to get_youtube_transcript’s language parameter. For counts, publish date, description, duration, tags, or related videos, use get_video_metadata.

get_youtube_video_info({ video_url: "dQw4w9WgXcQ" })

Rich video metadata without needing captions: title, view/like-count text, publish date, structured description + links, uploading-channel summary, and thumbnails. Costs 1 credit.

Parameters:

ParameterTypeDefaultDescription
video_urlstringrequiredYouTube video URL or 11-character video ID
includestring[]noneExtras: "details" (duration, category, tags, caption tracks) and/or "related" (related videos)

Hidden counts are null, never 0. When details can’t be read, details.available is false with a reason instead of guessed values.

// Metadata only
get_video_metadata({ video_url: "dQw4w9WgXcQ" })
// With player details + related videos
get_video_metadata({ video_url: "dQw4w9WgXcQ", include: ["details", "related"] })

Search YouTube for videos, channels, playlists, or movies (paginated, ~20 results per page). Returns structured results with video IDs, titles, view counts, and thumbnails, plus a continuation_token for the next page.

Parameters:

ParameterTypeDefaultDescription
querystringnoneThe search query (first call).
search_typestring"video"Type of search: "video", "channel", "playlist", or "movie" (first call only).
sortstring"relevance"First-page sort: "relevance" or "views".
upload_datestringnoneFirst-page upload window (videos only): hour, today, week, month, year.
durationstringnoneFirst-page duration bucket (videos only): short (under 4m), medium (4–20m), long (over 20m).
continuationstringnonePagination token from previous response (subsequent calls).

Provide either query (first call) or continuation (next pages) — not both. Filters apply to the first call only; the continuation token already encodes them. An empty page can come back while has_more is true — keep following the token until has_more is false. Costs 1 credit per page.

Example Usage:

// First call
search_youtube({
query: "TED talk artificial intelligence",
search_type: "video"
})
// Returns:
{
"content": {
"results": [
{
"video_id": "abc123",
"title": "The future of AI | TED Talk",
"channel": "TED",
"view_count": "2.5M views",
"published": "2024-03-15",
"thumbnail": "https://i.ytimg.com/vi/abc123/hqdefault.jpg"
}
// ... more results
],
"continuation_token": "4qmFsgKlARIY...",
"has_more": true
}
}
// Next page — use continuation token
search_youtube({
continuation: "4qmFsgKlARIY..."
})

Get the ~15 most recent videos from a YouTube channel via RSS. Free — no credits consumed.

Parameters:

ParameterTypeDefaultDescription
channelstringrequiredChannel identifier: @handle, channel URL, or UC... ID

Accepted Input Formats:

  • Handle: @TED
  • URL: https://www.youtube.com/@TED
  • Channel ID: UCsT0YIqwnpJCM-mx7-gSA4Q

Example Usage:

get_channel_latest_videos({
channel: "@TED"
})
// Returns:
{
"content": {
"channel": {
"name": "TED",
"url": "https://www.youtube.com/channel/UCsT0YIqwnpJCM-mx7-gSA4Q"
},
"results": [
{
"video_id": "xyz789",
"title": "The next breakthrough in AI",
"published": "2024-06-01",
"thumbnail": "https://i.ytimg.com/vi/xyz789/hqdefault.jpg"
}
// ... up to ~15 results
]
}
}

Search for videos within a specific YouTube channel (paginated, ~30 results per page). Costs 1 credit per page.

Parameters:

ParameterTypeDefaultDescription
channelstringnoneChannel identifier: @handle, channel URL, or UC... ID (first call).
querystringnoneSearch query within the channel (first call).
continuationstringnonePagination token from previous response (subsequent calls).

Provide either (channel + query) (first call) or continuation (next pages) — not both.

Example Usage:

// First call
search_channel_videos({
channel: "@TED",
query: "education"
})
// Returns:
{
"content": {
"results": [
{
"video_id": "def456",
"title": "The future of education | TED Talk",
"view_count": "1.2M views",
"published": "2024-01-20",
"thumbnail": "https://i.ytimg.com/vi/def456/hqdefault.jpg"
}
// ... more results
],
"continuation_token": "4qmFsgKlARIY...",
"has_more": true
}
}
// Next page — use continuation token
search_channel_videos({
continuation: "4qmFsgKlARIY..."
})

List a channel’s feed with pagination. Use tab to choose the uploads feed (default, ~100/page), Shorts, or live streams (~48/page). Costs 1 credit per page.

Parameters:

ParameterTypeDefaultDescription
channelstringnoneChannel identifier: @handle, URL, or UC... ID (first call)
tabstring"videos"Which feed: videos (uploads), shorts, or streams (live). Repeat the same tab when paginating.
continuationstringnonePagination token from previous response (subsequent calls)

Provide either channel (first call) or continuation (next pages) — not both.

Example Usage:

// First call — start listing
list_channel_videos({
channel: "@TED"
})
// Returns:
{
"content": {
"results": [
{
"video_id": "ghi789",
"title": "How AI could empower any business",
"view_count": "800K views",
"published": "2024-05-10"
}
// ... ~100 results
],
"continuation_token": "Ehl...",
"has_more": true
}
}
// Next page — use continuation token
list_channel_videos({
continuation: "Ehl..."
})

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

Parameters:

ParameterTypeDefaultDescription
channelstringrequiredChannel identifier: @handle, URL, or UC... ID

Counts are display strings (e.g. 27.8M subscribers) and null when YouTube hides them — never 0. Check availableTabs before calling get_channel_sections or list_channel_videos with a tab.

get_channel_info({ channel: "@TED" })

Paginated list of the playlists on a channel (id, title, URL, video-count text, thumbnails). Costs 1 credit per page.

Parameters:

ParameterTypeDefaultDescription
channelstringnoneChannel identifier: @handle, URL, or UC... ID (first call)
continuationstringnonePagination token from previous response (subsequent calls)

Provide either channel or continuation — not both. Pass a returned playlist id to list_playlist_videos to get its videos.

list_channel_playlists({ channel: "@TED" })

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

Parameters:

ParameterTypeDefaultDescription
channelstringnoneChannel identifier: @handle, URL, or UC... ID (first call)
continuationstringnonePagination token from previous response (subsequent calls)

Provide either channel or continuation — not both. Channels without a community tab return an empty results list (not an error).

list_channel_posts({ channel: "@TED" })

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. Costs 1 credit.

Parameters:

ParameterTypeDefaultDescription
channelstringrequiredChannel identifier: @handle, URL, or UC... ID
tabstring"featured"Which curated page: featured (Home), podcasts, or releases

podcasts and releases exist only on channels that have them (empty results otherwise — call get_channel_info to see a channel’s tabs).

get_channel_sections({ channel: "@TED" })
get_channel_sections({ channel: "@TED", tab: "releases" })

List videos in a YouTube playlist with pagination (~100 per page). Costs 1 credit per page.

Parameters:

ParameterTypeDefaultDescription
playliststringnonePlaylist URL or ID starting with PL, UU, LL, FL, or OL (first call)
continuationstringnonePagination token from previous response (subsequent calls)

Provide either playlist (first call) or continuation (next pages) — not both.

Example Usage:

// First call — start listing
list_playlist_videos({
playlist: "PLOGi5-fAu8bFIs_Lbp-MNwPKpPjBJGUzr"
})
// Returns:
{
"content": {
"results": [
{
"video_id": "jkl012",
"title": "Introduction to Machine Learning",
"channel": "TED-Ed",
"published": "2024-02-15"
}
// ... more results
],
"continuation_token": "Qmx...",
"has_more": true
}
}
// Next page — use continuation token
list_playlist_videos({
continuation: "Qmx..."
})

TranscriptAPI MCP works with any platform that supports the Model Context Protocol. Here are guides for popular platforms:

TranscriptAPI works with any tool, framework, or custom implementation that supports MCP:

  • OAuth-enabled platforms: Automatic authentication and token management
  • API key platforms: Manual configuration with your TranscriptAPI key
  • Custom implementations: Choose the authentication method that fits your needs

MCP requests consume credits and are subject to rate limits just like REST API calls:

ToolCost
get_youtube_transcript1 credit
get_youtube_video_infoFree
get_video_metadata1 credit
search_youtube1 credit per page
get_channel_info1 credit
get_channel_latest_videosFree
search_channel_videos1 credit
list_channel_videos1 credit per page
list_channel_playlists1 credit per page
list_channel_posts1 credit per page
get_channel_sections1 credit
list_playlist_videos1 credit per page
  • Only charged on successful (HTTP 200) responses
  • Failed requests (4xx, 5xx) don’t consume credits
  • 200 requests per minute per API key/OAuth token
  • Rate limits apply across all API usage (REST + MCP combined)

See API Rate Limits for detailed information and best practices.

All MCP tools return user-friendly error messages that AI assistants can understand and communicate:

Error CodeDescriptionRetry?Solution
401Invalid authentication❌Check your API key or re-authorize OAuth
402Insufficient credits❌Purchase more credits or upgrade plan
404Transcript not available❌Video may not have captions or be private
408Timeout / Retry✅Temporary failure - retry after 1-5 seconds
422Invalid YouTube URL❌Provide a valid YouTube URL or video ID
429Rate limit exceeded✅Wait before retrying (see Retry-After header)
500Server error⚠️Temporary issue, contact support if persistent
503Service unavailable✅Service temporarily down - retry after 1-5 seconds

Errors are returned in a format that AI assistants can easily interpret:

{
"content": "Unable to fetch transcript: Payment required. You have no credits remaining. Please purchase more credits at https://transcriptapi.com/dashboard/billing"
}

The AI assistant will communicate these errors naturally to the user.

  • OAuth platforms: Let the platform handle token storage and refresh
  • API key platforms: Store keys in environment variables, never in code
  • Rotate API keys regularly for enhanced security
  • Monitor usage through the dashboard to detect anomalies
  • Batch requests when possible to stay within rate limits
  • Cache transcripts locally if you need them multiple times
  • Handle 402 errors gracefully—inform users about credit status
  • Implement exponential backoff for retries on 408/429/503 errors
  • Test with common videos first to ensure configuration works
  • Provide context to the AI about video content for better responses
  • Use metadata to give AI information about video source and author
  • Choose the right format: JSON for structured processing, text for natural language
  • “Authorization failed”: Clear browser cookies and try again
  • “Invalid redirect”: Ensure you’re using the latest MCP client version
  • Token expiration: OAuth tokens auto-refresh; if issues persist, re-authorize
  • “Invalid API key”: Verify key starts with sk_ and is active in dashboard
  • “No credits”: Check credit balance at /dashboard/billing
  • Key not working: Ensure no extra spaces when copying the key
  • No transcript returned: Video might not have captions available
  • Slow responses: Check if video is very long (>2 hours)
  • Connection errors: Verify your internet connection and firewall settings

Ready to get started? Here’s what to do next:

  1. Get your credentials: Sign up and get an API key or prepare for OAuth
  2. Choose your platform: Select from our platform-specific guides
  3. Configure MCP: Follow the configuration examples above
  4. Test it out: Try fetching a transcript from a YouTube video
  5. Explore the API: Check our REST API Reference for advanced usage

Need live testing? Try our Swagger UI to experiment with the API directly.