MCP YouTube Transcript
An MCP server retrieving transcripts of YouTube videos
Descripción del creador (original en inglés)
Independent, unofficial project for YouTube metadata, transcripts, comments, and search.
Estos tres nunca se combinan en una sola puntuación: las opiniones, las mediciones y la popularidad son cosas distintas.
Todavía no escribimos un resumen sencillo para este. Abajo están los datos que leímos del registro.
Elige la app de IA que usas y copia la configuración.
YT_PROVIDER, YOUTUBE_API_KEYLos valores marcados como secretos son llaves de tu cuenta. Nunca los compartas ni los pegues en un chat.
Necesitas
¿Qué app usas?
Elige tu app arriba. La recordamos, así que la próxima vez el botón dirá “Instalar en …”.
Abre Claude Desktop → Settings → Developer → Edit Config y pega esto en claude_desktop_config.json
{
"mcpServers": {
"youtube": {
"command": "npx",
"args": [
"-y",
"@granitebps/youtube-mcp"
],
"env": {
"YT_PROVIDER": "your-value",
"YOUTUBE_API_KEY": "your-value"
}
}
}
}Ejecuta esto en tu terminal
claude mcp add youtube --env YT_PROVIDER=your-value --env YOUTUBE_API_KEY=your-value -- npx -y @granitebps/youtube-mcpCompleta los valores vacíos antes de ejecutarlo.
Pégalo en .cursor/mcp.json de tu proyecto, o en ~/.cursor/mcp.json
{
"mcpServers": {
"youtube": {
"command": "npx",
"args": [
"-y",
"@granitebps/youtube-mcp"
],
"env": {
"YT_PROVIDER": "your-value",
"YOUTUBE_API_KEY": "your-value"
}
}
}
}Tu navegador te pide permiso para abrir la app; luego la app muestra la configuración y te pide confirmar. Los valores de las claves quedan vacíos para que los completes tú.
Pégalo en .vscode/mcp.json de tu proyecto
{
"servers": {
"youtube": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@granitebps/youtube-mcp"
],
"env": {
"YT_PROVIDER": "your-value",
"YOUTUBE_API_KEY": "your-value"
}
}
}
}Tu navegador te pide permiso para abrir la app; luego la app muestra la configuración y te pide confirmar. Los valores de las claves quedan vacíos para que los completes tú.
Este se ejecuta en tu computadora, y ChatGPT solo puede conectarse a servidores en internet. Elige otra app.
Tu elección se guarda en una cookie en este dispositivo; no necesitas cuenta.
YT_PROVIDER envEsta configuración se genera a partir de la ficha del creador en el registro. Si el README dice otra cosa, sigue el README.
Se ejecuta en tu computadora; la lista de herramientas aparece en tu app de IA después de instalarlo.
Revisamos información que cualquiera puede ver; no hemos leído el código. Las revisiones que no aplican no se cuentan. · Revisado el 7 nov 2026
El nombre en el registro se verificó con la cuenta de GitHub granitebps, dueña del repo
Todavía no hemos leído este repo en GitHub
Todavía no hemos leído este repo en GitHub
Este se ejecuta en tu computadora; no hay endpoint en internet
Se ejecuta en tu computadora y usa ajustes locales en su lugar
Se ejecuta en tu computadora; solo podemos leer listas de herramientas de endpoints en internet
Comparado con todos los servidores activos de esta categoría en el registro. Las estrellas solo cuentan cuando quien lo publica es dueño del repo.
Superó 1 de 1 revisiones básicas aplicables. No hemos leído el código. Antes de agregar una clave o un token, revisa qué acceso pide el servidor y usa una clave que tenga solo los permisos que necesitas.
Debes completar: YOUTUBE_API_KEY
Se ejecuta en tu computadora. Tu app de IA lo inicia cuando hace falta, y los datos no pasan por los servidores del creador (a menos que el propio servidor llame a un servicio en línea).
El repo de GitHub cambió por última vez –, y la última versión (1.1.1) llegó al registro hace 18 días.
Las apps compatibles con MCP, como Claude Desktop, Claude Code, Cursor y VS Code. También necesitas Node.js en tu computadora.
En la misma categoría: MCP YouTube Transcript, Google Analytics MCP, BibiGPT YouTube Video Summarizer
Servidores de la misma categoría hechos por otros creadores, ordenados por estrellas.
Cómo leer una tarjeta:★ Estrellas de GitHubiTres pilares: reseñas · revisiones · usoiActualizado = fecha en que se publicó la última versión en el registroi
An MCP server retrieving transcripts of YouTube videos
GA4 MCP server for AI agents: schema discovery, server-side aggregation, analysis-ready defaults.
AI video summarizer: summarize and transcribe YouTube, Bilibili, TikTok and podcast videos.
Copiado tal cual del repo del creador. PopNx MCP no lo ha revisado ni lo respalda. Se quitaron HTML, imágenes y scripts. Los enlaces llevan fuera de este sitio.
YouTube MCP lets an MCP client read YouTube video metadata, caption transcripts, comments, and search results. By default it needs no YouTube API key or account; an optional official YouTube Data API provider serves metadata, comments, and search with an API key.
Supports both stdio (local) and Streamable HTTP (VPS/remote) transports.
This is an independent, unofficial open-source project. It is not affiliated with, endorsed by, or sponsored by YouTube or Google.
innertube provider serves metadata, comments, and search through youtubei.js, using an unofficial/internal YouTube interface without a YouTube Data API key. Unofficial access may change, break, be restricted, or be blocked.YT_PROVIDER=api and supply your own YOUTUBE_API_KEY to use the official YouTube Data API v3 for those three tools.youtube-transcript-plus, regardless of YT_PROVIDER. Transcript retrieval remains unofficial and does not use the official Data API path or your API key.Users are responsible for deciding whether an access method suits their use and for complying with applicable service terms and law. See access methods and service terms for the tool/backend mapping, BYOK setup, limitations, and software licenses.
| Tool | Description |
|---|---|
search_youtube | Search videos with filters for upload date and popularity |
get_video_info | Video metadata: title, channel, description, duration, views, likes, upload date, tags |
get_video_comments | Comment threads with author info, likes, and the replies YouTube includes |
get_video_transcript | Transcripts (manual + auto-generated captions) with timestamps |
get_transcript_languages | Lists available manual and auto-generated caption languages |
get_server_info | Server version, active provider, and the backend serving each tool |
No YouTube API key required by default. The default
innertubeprovider usesyoutubei.js(an unofficial/internal YouTube interface) for video info, comments, and search. Transcripts always useyoutube-transcript-plus. Neither needs an API key or authentication. See Providers for the optional official API.
Your MCP client can run the published package without a clone:
npx -y @granitebps/youtube-mcp
The server uses stdio. Keep stdout reserved for MCP traffic.
To develop the server or use a clone directly:
git clone https://github.com/granitebps/youtube-mcp.git
cd youtube-mcp npm ci npm run build
Point your MCP client at the compiled entry point:
node /absolute/path/to/youtube-mcp/dist/index.js
Run npm run build after each source change. Do not use src or npm run dev as the client's stdio command; build output on stdout can corrupt MCP messages.
Each example starts with the npm package, followed by the local equivalent. Replace /absolute/path/to/youtube-mcp with your clone's path. Settings from Configuration can be added as environment variables.
Add the npm package to Claude Code:
claude mcp add youtube -- npx -y @granitebps/youtube-mcp
For a local build:
claude mcp add youtube -- node /absolute/path/to/youtube-mcp/dist/index.js
Claude Code uses local scope by default. Add --scope user before youtube to make the server available across projects.
Claude Desktop reads the same server from claude_desktop_config.json (on macOS, ~/Library/Application Support/Claude/claude_desktop_config.json). Restart the app after editing the file.
{
"mcpServers": { "youtube": { "command": "npx", "args": ["-y", "@granitebps/youtube-mcp"] } } }
For a local build, replace command and args with:
{
"command": "node", "args": ["/absolute/path/to/youtube-mcp/dist/index.js"] }
Add the npm package to ~/.codex/config.toml, or to .codex/config.toml in a trusted project:
[mcp_servers.youtube]
command = "npx" args = ["-y", "@granitebps/youtube-mcp"]
For a local build:
[mcp_servers.youtube]
command = "node" args = ["/absolute/path/to/youtube-mcp/dist/index.js"]
Restart Codex after editing the file.
Add the npm package to opencode.json or opencode.jsonc:
{
"$schema": "https://opencode.ai/config.json", "mcp": { "youtube": { "type": "local", "command": ["npx", "-y", "@granitebps/youtube-mcp"], "enabled": true } } }
For a local build, replace the command array with:
{
"command": ["node", "/absolute/path/to/youtube-mcp/dist/index.js"] }
Add the npm package to .cursor/mcp.json in a project, or to ~/.cursor/mcp.json for global use:
{
"mcpServers": { "youtube": { "command": "npx", "args": ["-y", "@granitebps/youtube-mcp"] } } }
For a local build, replace command and args with:
{
"command": "node", "args": ["/absolute/path/to/youtube-mcp/dist/index.js"] }
Add to your VS Code settings.json:
{
"mcp": { "servers": { "youtube": { "command": "npx", "args": ["-y", "@granitebps/youtube-mcp"] } } } }
For remote deployment, the server runs as a persistent HTTP service using the Streamable HTTP transport (the current MCP standard, replacing the deprecated SSE transport).
# On your VPS
git clone https://github.com/granitebps/youtube-mcp.git cd youtube-mcp npm ci npm run build
cp .env.example .env
YouTube often blocks datacenter IPs. If get_video_info returns ACCESS_BLOCKED with "Sign in to confirm you're not a bot", set YT_PROVIDER=api and YOUTUBE_API_KEY to serve metadata, comments, and search through the official API. See Providers.
# Using --http flag
node dist/index.js --http
TRANSPORT=http PORT=3000 node dist/index.js
npm run start:http
The server will listen on http://0.0.0.0:3000/mcp.
server {
listen 443 ssl; server_name mcp.yourdomain.com;
ssl_certificate /etc/letsencrypt/live/mcp.yourdomain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/mcp.yourdomain.com/privkey.pem;
location /mcp { proxy_pass http://127.0.0.1:3000/mcp; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Connection ''; proxy_buffering off; proxy_cache off; chunked_transfer_encoding on; } }
Get a free TLS certificate:
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d mcp.yourdomain.com
Create /etc/systemd/system/youtube-mcp.service:
[Unit]
Description=YouTube MCP Server After=network.target
[Service] Type=simple User=your_user WorkingDirectory=/path/to/youtube-mcp ExecStart=/usr/bin/node dist/index.js --http Restart=always RestartSec=5 Environment=TRANSPORT=http Environment=PORT=3000 Environment=HOST=127.0.0.1
[Install] WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable youtube-mcp sudo systemctl start youtube-mcp sudo systemctl status youtube-mcp
{
"mcp": { "servers": { "youtube": { "type": "http", "url": "https://mcp.yourdomain.com/mcp" } } } }
{
"mcpServers": { "youtube": { "type": "streamable-http", "url": "https://mcp.yourdomain.com/mcp" } } }
Once connected, you can ask your AI agent things like:
All tools return:
content: short human-readable text for chat-style MCP clientsstructuredContent: JSON-shaped data for agents that need reliable fieldsThe server is intentionally JSON-first, text-second. Agents should prefer structuredContent when they need to filter, transform, or chain tool results.
Example shape from get_video_info:
{
"content": [ { "type": "text", "text": "📹 Example title\n\nChannel: Example channel\n..." } ], "structuredContent": { "videoId": "dQw4w9WgXcQ", "title": "Example title", "description": "Example description", "channelName": "Example channel", "channelId": "UC123", "uploadedAt": "Sep 14, 2017", "duration": "3m 33s", "durationSeconds": 213, "viewCount": "123456", "likeCount": "7890", "commentCount": null, "tags": ["music", "pop"], "thumbnailUrl": "https://..." } }
Values YouTube did not provide are null, never placeholders such as "0", "N/A" or "Unknown".
Failures return isError: true. The text starts with a code (❌ [ACCESS_BLOCKED] ...) and _meta["youtube-mcp/error"] carries the details:
{
"isError": true, "content": [{ "type": "text", "text": "❌ [ACCESS_BLOCKED] YouTube requires sign-in to access video C7OQHIpDlvA: Sign in to confirm you’re not a bot" }], "_meta": { "youtube-mcp/error": { "code": "ACCESS_BLOCKED", "message": "...", "retryable": false, "upstream": { "playabilityStatus": "LOGIN_REQUIRED", "reason": "Sign in to confirm you’re not a bot", "accessKind": "login_required" } } } }
The error is in _meta, not structuredContent, because MCP SDK clients validate any structuredContent against the tool's output schema, even on error results.
| Code | Meaning |
|---|---|
INVALID_INPUT | Not a YouTube URL or 11-character video ID, or an invalid language code |
ACCESS_BLOCKED | YouTube refused this client: HTTP 429/403, CAPTCHA, consent page, sign-in or bot check. upstream.accessKind is rate_limited, forbidden, login_required, consent_required, or quota_exceeded (official API quota used up). Says nothing about whether the video exists or has captions |
| VIDEO_UNAVAILABLE | YouTube reports the video as ERROR, UNPLAYABLE, private or offline. upstream.reason is
Solo se muestra el principio; lee el resto en el repo