YouTube Transcript + YouTube Search MCP for AI Agents
The fastest YouTube transcript + YouTube search MCP for AI agents. Try for free.
12 tools: transcripts, video & channel metadata, video search, channel browsing, in-channel search, playlist extraction, and new-upload polling, for Claude, ChatGPT, Cursor, VS Code, Claude Code, and 20+ clients.
> **Powering 15M+ transcripts every month** · 500K+ transcripts processed daily · 49ms median response time
> Trusted in production by [youtubetotranscript.com](https://youtubetotranscript.com) (~11M/mo) and [recapio.com](https://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:**
```txt
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.
---
## 🧩 Install as an Agent Plugin · **easiest**
This repository root is a conformant **[Agent Plugins 1.0.0](https://agent-plugins.org/specification)** 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.
```text
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:
```txt
https://github.com/ZeroPointRepo/youtube-mcp
```
Or register a local clone in `settings.json`:
```json
"chat.pluginLocations": { "/absolute/path/to/youtube-mcp": true }
```
**Cursor**: **Customize** in the sidebar → find the plugin → **Install**. For a local clone:
```bash
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:
```txt
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
```txt
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:
```txt
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:
```bash
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](https://transcriptapi.com), first 100 credits free)
> - An API key from your [dashboard](https://transcriptapi.com/dashboard/api-keys) **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:
>
> ```txt
> 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.
> ```
Install in Cursor (One-Click / Manual)
**One-Click Install:**
[](https://cursor.com/en/install-mcp?name=transcript-api&config=eyJ1cmwiOiJodHRwczovL3RyYW5zY3JpcHRhcGkuY29tL21jcCJ9)
**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`:
```json
{
"mcpServers": {
"transcript-api": {
"url": "https://transcriptapi.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}
```
Install in Claude (Desktop & Web) - Recommended
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 →](https://transcriptapi.com/docs/mcp/claude)
Install in Claude Code (CLI)
```sh
claude mcp add --transport http transcript-api https://transcriptapi.com/mcp
```
Install in ChatGPT
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](https://transcriptapi.com/dashboard/mcp-integration) for static registration.
4. Click **Add** and authorize via the browser popup.
**Full Guide:** [ChatGPT Integration Guide →](https://transcriptapi.com/docs/mcp/chatgpt)
Install in VS Code
[
](https://insiders.vscode.dev/redirect?url=vscode%3Amcp%2Finstall%3F%7B%22name%22%3A%22transcript-api%22%2C%22url%22%3A%22https%3A%2F%2Ftranscriptapi.com%2Fmcp%22%7D)
Or add this to VS Code user settings (`settings.json`):
```json
"mcp.servers": {
"transcript-api": {
"type": "http",
"url": "https://transcriptapi.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
```
Install in OpenAI Agent Builder
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](https://transcriptapi.com/dashboard/api-keys)
[Step-by-Step Guide →](https://transcriptapi.com/docs/mcp/openai-agent-builder)
Install in Windsurf
Add to `~/.codeium/windsurf/mcp_config.json`:
```json
{
"mcpServers": {
"transcript-api": {
"serverUrl": "https://transcriptapi.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}
```
Install in Cline
```json
{
"mcpServers": {
"transcript-api": {
"url": "https://transcriptapi.com/mcp",
"type": "streamableHttp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}
```
Install in Zed
In Zed `settings.json`:
```json
{
"context_servers": {
"transcript-api": {
"source": "remote",
"url": "https://transcriptapi.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}
```
Install in Roo Code
```json
{
"mcpServers": {
"transcript-api": {
"type": "streamable-http",
"url": "https://transcriptapi.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}
```
Install in Amp
```sh
amp mcp add transcript-api https://transcriptapi.com/mcp --header "Authorization: Bearer YOUR_API_KEY"
```
Install in Augment Code
In `settings.json` under `augment.advanced`:
```json
"augment.advanced": {
"mcpServers": [
{
"name": "transcript-api",
"url": "https://transcriptapi.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
]
}
```
Install in Kilo Code
In `.kilocode/mcp.json`:
```json
{
"mcpServers": {
"transcript-api": {
"type": "streamable-http",
"url": "https://transcriptapi.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}
```
Install in JetBrains AI Assistant
In Settings → Tools → AI Assistant → MCP:
```json
{
"mcpServers": {
"transcript-api": {
"url": "https://transcriptapi.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}
```
Install in Gemini CLI
In `~/.gemini/settings.json`:
```json
{
"mcpServers": {
"transcript-api": {
"httpUrl": "https://transcriptapi.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}
```
Install in Qwen Coder
In `~/.qwen/settings.json`:
```json
{
"mcpServers": {
"transcript-api": {
"httpUrl": "https://transcriptapi.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}
```
Install in Google Antigravity
```json
{
"mcpServers": {
"transcript-api": {
"serverUrl": "https://transcriptapi.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}
```
Install in Trae
```json
{
"mcpServers": {
"transcript-api": {
"url": "https://transcriptapi.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}
```
Install in LM Studio
In `mcp.json`:
```json
{
"mcpServers": {
"transcript-api": {
"url": "https://transcriptapi.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}
```
Install in BoltAI
In Plugins → JSON Config:
```json
{
"mcpServers": {
"transcript-api": {
"url": "https://transcriptapi.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}
```
Install in Warp
In Settings → AI → MCP:
```json
{
"transcript-api": {
"url": "https://transcriptapi.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
```
Install in Perplexity Desktop
In Settings → Connectors → Advanced:
```json
{
"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](https://transcriptapi.com/dashboard/api-keys)
2. Keys start with `sk_` prefix
3. Add to config as a Bearer token:
```json
"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:**
- Supported by: ChatGPT (optional)
- Get Client ID + Secret from the [MCP Integration Dashboard](https://transcriptapi.com/dashboard/mcp-integration)
- More control over client identity
Full reference: [Authentication docs →](https://transcriptapi.com/docs/mcp/claude)
---
## 🧰 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):**
```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):**
```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:**
```txt
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:**
```txt
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:**
```txt
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:**
```txt
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](https://transcriptapi.com/#pricing) · [Manage credits](https://transcriptapi.com/billing)
---
## 🚨 Troubleshooting
Authentication errors (401)
- Verify your API key starts with `sk_`
- Check for extra spaces when copying
- Ensure the key is active in your [dashboard](https://transcriptapi.com/dashboard/api-keys)
- If using OAuth, try re-authorizing
No credits (402)
- Check your credit balance at the [dashboard](https://transcriptapi.com/dashboard)
- Purchase more credits or upgrade your plan
Video not available (404)
- The video might not have captions/subtitles enabled
- The video might be private or age-restricted
- The video might be region-locked
Rate limiting (429)
- Respect the `Retry-After` header
- Implement exponential backoff in your client
- Upgrade to a paid plan for higher limits
OAuth issues
- 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 →](https://transcriptapi.com/docs/api) · [Swagger →](https://transcriptapi.com/swagger) |
Base URL: `https://transcriptapi.com/api/v2`
---
## 🤝 Connect
- 🌐 **Website:** [transcriptapi.com](https://transcriptapi.com)
- 📚 **Docs:** [transcriptapi.com/docs](https://transcriptapi.com/docs)
- 🔧 **API Reference:** [transcriptapi.com/docs/api](https://transcriptapi.com/docs/api)
- 🤖 **MCP Setup Guides:** [Claude](https://transcriptapi.com/docs/mcp/claude) · [ChatGPT](https://transcriptapi.com/docs/mcp/chatgpt) · [OpenAI Agent Builder](https://transcriptapi.com/docs/mcp/openai-agent-builder)
- 💬 **Contact:** [transcriptapi.com/contact](https://transcriptapi.com/contact)
- 📂 **Listed in:** [awesome-agent-plugins](https://github.com/ZeroPointRepo/awesome-agent-plugins), our directory of verified Agent Plugins on the open standard
---
## 📋 MCP Registry
This server is published to the official [Model Context Protocol Registry](https://registry.modelcontextprotocol.io/) under the name:
```
com.transcriptapi/youtube-transcript-and-youtube-search
```
---
© 2026 Zero Point Studio d.o.o. · Released under the MIT License