youtube-mcp-server
youtube-mcp-server
Un servidor MCP remoto que expone la YouTube Data API v3 como herramientas, mediante Streamable HTTP, de modo que se pueda añadir a claude.ai como conector personalizado.
Sin dependencias. Sin paso de compilación. node src/server.js es todo el proyecto.
Herramientas
Herramienta | Qué hace | Coste de cuota |
| Los vídeos más populares de un país, opcionalmente filtrados por una categoría | 1 unidad |
| Búsqueda por palabras clave de vídeos, canales o listas de reproducción, con estadísticas incluidas | 1 llamada de búsqueda + 1 unidad |
| Las subidas recientes de un canal, más sus totales de suscriptores y visualizaciones | 3 unidades |
| Estadísticas completas de hasta 50 vídeos en una sola llamada | 1 unidad |
| Comentarios de primer nivel con el recuento de Me gusta y de respuestas | 1 unidad |
Las transcripciones se omiten deliberadamente. captions.download requiere OAuth y permiso de edición sobre el vídeo, así que una clave de API solo puede obtener los subtítulos de los vídeos que poseas. Las bibliotecas de scraping no oficiales están, según numerosos informes, bloqueadas desde los rangos de IP de la nube, que es exactamente donde se ejecuta este servidor.
Related MCP server: mcp-server-youtube
Cuota
Un proyecto dispone de 10.000 unidades al día en el bucket general, y search.list está en un bucket aparte con un límite de 100 llamadas al día. Eso condicionó el diseño de las herramientas: youtube_channel_videos usa channels.list → playlistItems.list → videos.list en lugar de search.list?channelId=, de modo que explorar un canal cuesta 3 unidades generales en lugar de una de las únicas cien búsquedas diarias.
Ejecutar en local
cp .env.example .env # add your YOUTUBE_API_KEY
export $(grep -v '^#' .env | xargs)
npm startcurl localhost:3000/health
curl -s localhost:3000/mcp \
-H 'content-type: application/json' \
-H 'accept: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | head -c 400Pruebas
npm testEjecuta el handshake completo de MCP, ambos modos de transporte, las cinco herramientas y las rutas de error contra una API de YouTube simulada. No requiere clave de API ni conexión de red.
Desplegar en Railway
Sube este repositorio a GitHub.
Railway → New Project → Deploy from GitHub repo → elige el repositorio.
Variables → añade
YOUTUBE_API_KEY.Settings → Networking → Generate Domain.
Comprueba que
https://<your-domain>/healthdevuelve"apiKeyConfigured": true.
Railway establece PORT por su cuenta; el servidor se vincula a 0.0.0.0 y lee esa variable.
Añadir a claude.ai
Customize → Connectors → Add custom connector → https://<your-domain>/mcp
No se necesitan campos OAuth — el servidor no tiene autenticación por defecto. Para restringir el acceso, define MCP_AUTH_TOKEN y añade Bearer <token> en la cabecera authorization de las Request del conector.
Variables de entorno
Variable | Requerida | Por defecto | Notas |
| sí | — | Google Cloud Console, con la YouTube Data API v3 habilitada |
| no | 3000 | La establece Railway |
| no |
| Ruta en la que escucha el endpoint de MCP |
| no | — | Si se define, toda solicitud debe incluir |
| no | la de Google | Solo se usa para dirigir la suite de pruebas a un stub |
Notas de diseño
Sin estado. Cada POST es autocontenido — sin Mcp-Session-Id, sin mapa de sesiones —, así que un reinicio o una segunda réplica nunca produce "No valid session ID provided".
La negociación de contenido coincide con el SDK de referencia: un frame SSE cuando el cliente envía Accept: text/event-stream, y un cuerpo JSON plano en caso contrario.
GET y DELETE en /mcp devuelven 405, que es lo que la especificación de Streamable HTTP espera de un servidor sin flujo iniciado por el servidor y sin sesión que cerrar.
Sin validación de la cabecera Origin y sin protección contra DNS rebinding. Esas defensas están pensadas para servidores MCP vinculados a localhost; si se dejan activas en un despliegue público, rechazan las solicitudes de la propia Anthropic, que es una causa habitual de los timeouts de initialize.
Los fallos de las herramientas se devuelven como contenido isError: true en lugar de errores JSON-RPC, de modo que Claude puede leer qué ha fallado y ajustar su enfoque, en vez de que la llamada muera en la capa de transporte.
Los resultados se truncan a 120k caracteres, por debajo del tope de ~150k que claude.ai aplica a los resultados de herramientas.
This server cannot be deployed
Maintenance
Related MCP Connectors
Search YouTube videos, read transcripts and get public video information in your AI assistant.
YouTube search, whole channels, video stats, comments and full transcripts with timestamps.
YouTube transcripts, search, channel/playlist listings and upload tracking for AI agents.
YouTube transcripts, comments, video details, heatmaps, search, channels and playlists.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables interaction with YouTube through the YouTube Data API, allowing users to search for videos, playlists, and channels, generate video titles using AI, and manage YouTube content through natural language commands.22ISC
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to search videos, read channels, browse playlists, fetch comments, and get transcripts from YouTube using the YouTube Data API v3 and InnerTube API for captions.2GPL 3.0
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to search videos, channels, and playlists, retrieve video metadata, transcripts, and comments via the YouTube Data API v3.59 PyPI72MIT
- FlicenseNot gradedqualityBmaintenanceEnables searching and retrieving video transcripts, metadata, channel info, playlists, comments, trending videos, and engagement analytics from YouTube through natural language.14 npm-