TranscriptAPI — YouTube transcripts (transcriptapi.io)

YouTube transcripts, search, channels and playlists for AI agents, by transcriptapi.io.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
79%
Naming quality
100%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~908Tokens (tool definitions)
~1.1 KBTypical response size
Moderate attention impact (0.71% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "youtube-transcript": {
      "command": "npx",
      "args": [
        "transcriptapi-mcp"
      ]
    }
  }
}

Runnable packages

npmtranscriptapi-mcp0.1.1stdio

Remote endpoints

https://api.transcriptapi.io/mcpstreamable-http

What it can do

Tool inventory

Tools (5)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢get_youtube_transcript(video, language, translate_to, format)

Fetch the transcript (captions/subtitles) of a YouTube video as text. Accepts a watch URL, youtu.be link, Shorts link or bare 11-character video id. Returns the spoken text with timestamps grouped in ~30 s blocks by default; format 'text' is prose without timestamps, 'srt'/'vtt' are subtitle files, 'json' is raw segments with start/duration. Works with creator-uploaded and auto-generated captions. translate_to translates the transcript with AI (extra credits, scales with length) — omit unless asked.

Input Schema

{
  "type": "object",
  "properties": {
    "video": {
      "title": "Video",
      "type": "string"
    },
    "language": {
      "default": "en",
      "title": "Language",
      "type": "string"
    },
    "translate_to": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Translate To"
    },
    "format": {
      "default": "timestamped",
      "title": "Format",
      "type": "string"
    }
  },
  "required": [
    "video"
  ],
  "title": "get_youtube_transcriptArguments"
}

Output Schema

{
  "type": "object",
  "properties": {
    "result": {
      "title": "Result",
      "type": "string"
    }
  },
  "required": [
    "result"
  ],
  "title": "get_youtube_transcriptOutput"
}
🟢search_youtube(query, limit)

Search YouTube for videos by keyword. Returns video ids, titles, channel names, durations and view counts. Use a returned id with get_youtube_transcript to read it.

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "title": "Query",
      "type": "string"
    },
    "limit": {
      "default": 10,
      "title": "Limit",
      "type": "integer"
    }
  },
  "required": [
    "query"
  ],
  "title": "search_youtubeArguments"
}

Output Schema

{
  "type": "object",
  "properties": {
    "result": {
      "title": "Result",
      "type": "string"
    }
  },
  "required": [
    "result"
  ],
  "title": "search_youtubeOutput"
}
🟢get_channel_videos(channel, limit)

List the most recent uploads of a YouTube channel, newest first. Accepts a channel id (UC…), a handle (@name) or a channel URL. Returns ids, titles, durations, view counts and publish dates.

Input Schema

{
  "type": "object",
  "properties": {
    "channel": {
      "title": "Channel",
      "type": "string"
    },
    "limit": {
      "default": 20,
      "title": "Limit",
      "type": "integer"
    }
  },
  "required": [
    "channel"
  ],
  "title": "get_channel_videosArguments"
}

Output Schema

{
  "type": "object",
  "properties": {
    "result": {
      "title": "Result",
      "type": "string"
    }
  },
  "required": [
    "result"
  ],
  "title": "get_channel_videosOutput"
}
🟢search_channel_videos(channel, query, limit)

Search for videos inside one YouTube channel by keyword — 'find the video where <channel> talks about <topic>'. Accepts a channel id, @handle or channel URL.

Input Schema

{
  "type": "object",
  "properties": {
    "channel": {
      "title": "Channel",
      "type": "string"
    },
    "query": {
      "title": "Query",
      "type": "string"
    },
    "limit": {
      "default": 10,
      "title": "Limit",
      "type": "integer"
    }
  },
  "required": [
    "channel",
    "query"
  ],
  "title": "search_channel_videosArguments"
}

Output Schema

{
  "type": "object",
  "properties": {
    "result": {
      "title": "Result",
      "type": "string"
    }
  },
  "required": [
    "result"
  ],
  "title": "search_channel_videosOutput"
}
🟢get_playlist_videos(playlist, limit)

List the videos in a YouTube playlist, in playlist order. Accepts a playlist URL (anything with list=…) or the playlist id. Returns ids and titles for get_youtube_transcript.

Input Schema

{
  "type": "object",
  "properties": {
    "playlist": {
      "title": "Playlist",
      "type": "string"
    },
    "limit": {
      "default": 50,
      "title": "Limit",
      "type": "integer"
    }
  },
  "required": [
    "playlist"
  ],
  "title": "get_playlist_videosArguments"
}

Output Schema

{
  "type": "object",
  "properties": {
    "result": {
      "title": "Result",
      "type": "string"
    }
  },
  "required": [
    "result"
  ],
  "title": "get_playlist_videosOutput"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded5 tools