GitHubLog in
YouTube Transcript MCP Server

YouTube Transcript MCP Server

Give Claude, ChatGPT, Cursor or any MCP client YouTube as a tool: full transcripts with timestamps, video search, and whole channels or playlists, from one hosted server.

Server URL
https://transcriptfetch.com/mcp
Streamable HTTP · OAuth or API key

Point your client at the server URL and your agent can read YouTube on its own: the transcript of any public video, keyword search with upload-date and length filters, a channel's videos, Shorts or live streams, and its playlists and podcasts. Captions are read when the video has them; when it has none, the server transcribes the audio. Nothing to install, and the same URL works in every client below.

Not a developer? Add YouTube to ChatGPT or Claude in a minute
Setup

Add the server to your client

Nothing to install. All seven tools. Recommended for most clients.
Settings → Connectors
Add custom connector

Name  TranscriptFetch
URL   https://transcriptfetch.com/mcp
Connect in Claude opens TranscriptFetch in Claude's connector directory; or add it as a custom connector with the details above. Sign in to TranscriptFetch and approve access when Claude asks. No API key needed.Connect in Claude
Tools

Seven tools work with YouTube

Each tool's description and parameters below are the server's own, as your client receives them. Your assistant picks the tool; you ask in plain words.

get_transcript1 credit

Fetch the full transcript for a video or media file. Accepts a YouTube video ID or URL, TikTok and Instagram URLs, and direct media file URLs. If no transcript comes back, the result says whether captions definitively do not exist (aiFallback.captionsUnavailable) and whether transcribing the audio would still work (aiFallback.available). When it does, call this tool again with ai_fallback: true.

videostringrequired
Video ID or URL: YouTube (dQw4w9WgXcQ, youtu.be/…), TikTok, Instagram, or a direct media file URL.
ai_fallbackboolean
Skip captions and use AI Fallback Transcription of the audio instead. Use this only after a previous call reported aiFallback.available. Charged 1 credit per started 5 minutes of audio, minimum 1 credit, on delivery; short media may return inline, while longer work returns a processing result to collect with a later call.
timestampsboolean
Include the timestamped segments in the structured result (default true). Set false when only the text is needed: the segments repeat the transcript's words with timings, so leaving them out keeps the response smaller.
markdownboolean
Return the transcript as Markdown (default false): a title line, then paragraphs that each open with their time, linked to that moment on YouTube. Use it when you will quote or cite the video.
chunksboolean
Also return the transcript split into pieces of about 500 tokens for an embedding model or vector store (default false), each with its start and end time and a link to that moment. In the structured result only.
search_videos1 credit

Search for videos matching a query on YouTube (default), TikTok, or Instagram. Returns titles, ids, durations, and URLs that get_transcript accepts directly. On YouTube, upload_date, duration, sort and captions narrow the results; search_channels finds channels or playlists instead.

querystringrequired
Search keywords.
platformyoutube | tiktok | instagramdefault youtube
Where to search. Defaults to youtube.
upload_datehour | today | week | month | year
YouTube only. Uploaded within the last hour, today, this week, this month, or this year.
durationshort | medium | long
YouTube only. short is under 4 minutes, medium 4 to 20 minutes, long over 20 minutes.
sortrelevance | viewsdefault relevance
YouTube only. relevance (default) or views (most viewed first). YouTube search no longer sorts by date; for recent videos use upload_date.
captionsboolean
YouTube only. true keeps only videos with subtitles or closed captions.
limitinteger
Max results to return (1–50). Defaults to 5.
search_channels1 credit

Search YouTube for channels (default) or playlists matching a query. Pass a channel's url to list_channel_videos or list_channel_playlists, and a playlist's url to list_playlist_videos.

querystringrequired
Search keywords.
typechannel | playlistdefault channel
What to find: channel (default) or playlist.
limitinteger
Max results to return (1–50). Defaults to 5.
list_channel_videos1 credit

List a creator's items, newest first by default. Accepts a YouTube channel (@handle, UC… id, or URL), a TikTok profile URL (tiktok.com/@user), or an Instagram profile URL. On YouTube, tab picks the videos, shorts or live tab, sort orders it, and query searches inside the channel. Every row's url can be passed straight to get_transcript.

channelstringrequired
YouTube handle/ID/URL, or a TikTok or Instagram profile URL.
tabvideos | shorts | livedefault videos
YouTube only. videos (default), shorts, or live (streams, past and upcoming). A tab the channel does not have returns no rows and a notice saying so. For playlists or podcasts, use list_channel_playlists.
sortnewest | popular | oldestdefault newest
YouTube only. newest (default), popular, or oldest. popular is YouTube's Popular order, most viewed first, and leaves out videos with no views.
querystring
YouTube only. Search inside the channel and return its matching videos. Leave tab and sort unset.
limitinteger
Max results to return (1–50). Defaults to 5.
list_channel_playlists1 credit

List a YouTube channel's playlists, or its podcasts. Accepts a @handle, UC… id, or channel URL. Pass a playlist's url to list_playlist_videos for its videos.

channelstringrequired
YouTube handle, UC… id, or channel URL.
tabplaylists | podcastsdefault playlists
playlists (default), or podcasts for the channel's podcast shows. A tab the channel does not have returns no rows and a notice saying so.
limitinteger
Max results to return (1–50). Defaults to 5.
list_playlist_videos1 credit

List the items in a playlist. Accepts a YouTube playlist ID or URL or a TikTok playlist URL (tiktok.com/@user/playlist/name-id). Every row's url can be passed straight to get_transcript.

playliststringrequired
YouTube playlist ID or URL, or a TikTok playlist URL.
limitinteger
Max results to return (1–50). Defaults to 5.
get_creditsFree

Check the caller's remaining credit balance. Free; costs no credits.

No parameters.

A caption fetch or a listing call costs one credit, and AI transcription 1 credit per started 5 minutes of audio. Failed and empty calls are free, and get_credits costs nothing.

Example call

What your agent sends and gets back

Tool callget_transcript
{
  "video": "dQw4w9WgXcQ"
}
Responsesource: captions1 credit · abridged
{
  "videoId": "dQw4w9WgXcQ",
  "platform": "youtube",
  "title": "Example video",
  "channel": "Example Channel",
  "duration": 212,
  "language": "en",
  "source": "captions",
  "segments": [
    {
      "start": 0,
      "duration": 3.5,
      "text": "We're no strangers to love"
    }
  ],
  "outcome": "ok",
  "creditsSpent": 1,
  "balance": 99
}
Good to know

What to know about YouTube

  • Captions first, audio when there are noneMost YouTube videos carry a caption track, often auto-generated, so a fetch is usually a read: fast and one credit. When a video has no captions but has speech, the server starts AI transcription itself, billed at 1 credit per started 5 minutes of audio and only on delivery. A long video returns outcome: "processing" with a jobId; call get_transcript again with the same video to collect it.
  • Shorts, live streams and podcastslist_channel_videos takes tab: shorts or live, and list_channel_playlists with tab: podcasts lists a channel's podcast shows; list_playlist_videos opens any of them. A stream that is still live has no transcript until it ends.
  • Long videos and context windowsAn hour of talking is roughly 10,000 words. Set timestamps: false when only the text is needed, markdown: true for timestamped paragraphs that link to the moment on YouTube, or chunks: true for pieces of about 500 tokens ready for an embedding model.
  • Search that narrowssearch_videos filters by upload_date (hour to year), duration (short, medium, long) and captions: true, and sorts by relevance or views; YouTube search no longer sorts by date. search_channels finds channels or playlists. Every result's url goes straight to get_transcript.
  • What does not return textPrivate and age-restricted videos, streams that are still live, and clips with no speech. Failed and empty fetches are never billed.
Hosted or self-hosted

A hosted server or an open-source YouTube transcript MCP?

Open-source YouTube transcript MCP servers read the caption track from the machine they run on. That is free and works on a laptop, but YouTube often blocks the same requests from cloud servers and agent hosts, and a video without captions comes back empty. This server is hosted: nothing to install, one URL in every client, AI transcription when captions are missing, and search, channels, playlists and Shorts beside the transcripts. It runs on credits, with 50 free every month; if a local caption reader already covers you, use it.

FAQ

Frequently asked questions

  • Is there a free YouTube transcript MCP server?Yes. Every account gets 50 free credits a month with no card, and a captioned YouTube transcript costs 1 credit, so that is 50 transcripts. Open-source servers are free to run yourself, with the limits described above.
  • Does it work in ChatGPT and Claude?Yes. On claude.ai and ChatGPT you add https://transcriptfetch.com/mcp as a connector and sign in with OAuth, no key. Claude Code, Codex, Cursor, VS Code and Claude Desktop use the configurations in the setup panel.
  • Can it read a whole YouTube channel?Yes. list_channel_videos returns up to 50 videos per call, newest, most popular or oldest first, or the matches for a search inside the channel; your agent then passes each url to get_transcript. Each listing call and each transcript costs 1 credit.
  • What happens when a video has no captions?If the video has speech, the server transcribes the audio automatically, billed at 1 credit per started 5 minutes of audio and only when the transcript is delivered. Short videos usually come back in the same call; longer ones return a job to collect with a second call.
  • Which languages does it return?The video's caption track, in its own language, and the result names that language. AI transcription detects the spoken language. Nothing is translated.