YouTube Studio MCP
Extensión de youtube-studio-mcp, un servidor MCP sobre las APIs de datos, analíticas y reportes de YouTube, para manejar mi canal, Drayten, desde ChatGPT: una bandeja con los comentarios de todo el canal que todavía no contesté, para responderlos desde la conversación con un consumo de cuota bajo y acotado. También lo preparé para correr en Docker sin navegador y para leer la cuota real desde Google Cloud.
El repositorio original en GitHub (pauling-ai/youtube-studio-mcp) ya no está disponible: da 404. El enlace lleva al paquete publicado en PyPI, la versión 0.3.0 de la que partí.
Antes
Quería contestar los comentarios de Drayten desde ChatGPT, donde ya preparo los videos, sin ir a YouTube Studio a buscar uno por uno cuáles me faltaban.
Qué había que resolver
youtube-studio-mcp ya listaba los comentarios de un video y permitía responder, pero para saber qué faltaba contestar había que recorrer el canal video por video. La API de YouTube no tiene un filtro de "sin responder", y el servidor asumía que había un navegador para autenticarse, algo que en Docker no existe.
Qué hace.
Las capacidades principales del sistema.
Bandeja de pendientes
Una tool nueva devuelve los comentarios más recientes de todo el canal que todavía no contesté, con una sola consulta paginada y sin recorrer video por video.
Responder desde la conversación
Se piden los pendientes, se elige uno y se responde con youtube_reply_to_comment; la respuesta queda registrada y el comentario sale de la lista siguiente.
Qué cuenta como respondido
Un comentario publicado de otra persona está pendiente si el canal no le respondió. Los likes, los corazones y las respuestas de otros espectadores no cuentan.
Caché de respondidos
SQLite con vencimiento de 12 horas que sólo guarda los hilos que ya respondí; los pendientes nunca se guardan.
Cuota acotada
Cada consulta tiene un tope de llamadas, 50 por defecto, y declara cuántas hizo. Traer 15 pendientes suele costar entre 2 y 5 unidades.
Descripciones de uso
Reescribí las descripciones de las cinco tools de comentarios: cuándo usar cada una y que el modelo confirme el texto antes de publicar o borrar.
Docker sin navegador
En modo headless el servidor nunca abre el login de Google: si el token venció, explica cómo reautorizar desde el host con un comando nuevo y toma el token sin reiniciar.
Cuota real y secretos cifrados
Una tool lee el uso de cuota desde Cloud Monitoring en lugar de estimarlo. Las credenciales se versionan cifradas con age y el token se guarda con permisos 0600.
Herramientas.
45 herramientas sobre tres APIs de YouTube. Las marcadas en rojo las agregué o las mejoré yo; el resto viene del proyecto original, agrupado por familia.
Comentarios sin responder
nuevayoutube_list_unanswered_commentsLos más recientes de todo el canal que todavía no contesté: 15 por defecto, hasta 200, con un tope de llamadas por consulta. Informa cuántas hizo y si el resultado quedó parcial.
Cuota de Google
nuevayoutube_quota_statusUso y límite de cuota del proyecto según Cloud Monitoring, con la fecha de cada muestra. Si no hay datos lo dice, en vez de informar cero.
Responder
mejoradayoutube_reply_to_commentResponde un comentario como el canal. Le sumé el registro en la caché, para que deje de figurar como pendiente, y una descripción que pide confirmar el texto.
Borrar comentario
mejoradayoutube_delete_commentSiempre con confirmación. Si borro una respuesta mía, el comentario original vuelve a figurar como pendiente.
Comentarios de un video
mejoradayoutube_list_commentsComentarios de un solo video. La descripción nueva le indica al modelo que los pendientes del canal se buscan con la otra tool.
Comentario nuevo
mejoradayoutube_post_commentPublica un comentario en un video. La descripción nueva aclara que para contestarle a alguien hay que responder, no comentar.
Autenticación
mejoradayoutube_auth · youtube_auth_statusEn Docker no abre el navegador: si el token venció, explica cómo reautorizar desde el host. El estado separa la actividad local de la cuota de Google.
Analíticas
mejorada13 herramientas de rendimiento, audiencia, retención e ingresos. En nueve les sumé engaged views como un dato aparte de las vistas.
Canal y videos
originalDatos del canal, lista de videos y detalle de cada uno.
Búsqueda y SEO
originalBúsqueda, sugerencias de autocompletado, tendencias y categorías.
Transcripciones
originalTranscripción de un video y pistas de subtítulos propias.
Publicación
originalSubir, editar y borrar videos, y cambiar la miniatura.
Playlists
originalListar, crear, editar y borrar playlists, y sumar o sacar videos.
Reportes masivos
originalProgramar y descargar reportes CSV de la API de reportes.
Cómo está armado
- 01CHATGPTcliente
- 02OPENAI TUNNELacceso remoto
- 03SERVIDOR MCPFastMCP · Docker · headless
- 04CACHÉSQLite · 12 h · sólo respondidos
- 05APIS DE GOOGLEYouTube · Cloud Monitoring
Decisiones técnicas.
Qué se eligió y qué implica.
- 01
Una consulta para todo el canal
commentThreads.list con allThreadsRelatedToChannelId, del más nuevo al más viejo y con las respuestas que YouTube incluye en cada hilo. Como la API no filtra por "sin responder", la clasificación se hace en el MCP.
→ No hay que recorrer video por video ni usar la búsqueda, que es cara. Los hilos con más respuestas de las incluidas necesitan una llamada extra.
- 02
Cachear sólo lo respondido
La caché guarda la prueba de que respondí un hilo, nunca un pendiente. Antes de ocultar un hilo por la caché, verifica en lotes de 50 que la respuesta siga existiendo.
→ Una respuesta hecha desde YouTube Studio aparece en la consulta siguiente, y una respuesta borrada vuelve a mostrar el comentario. Verificar cuesta alguna llamada más.
- 03
Un tope de llamadas por consulta
max_api_calls corta el escaneo, y la respuesta lo declara con stop_reason y scan_limited.
→ Una consulta nunca dispara el consumo. Si corta, el resultado es parcial y lo dice, sin saltar un hilo reciente para devolver otros más viejos.
- 04
Una tool nueva en vez de cambiar la existente
youtube_list_comments sigue igual, para un solo video; los pendientes del canal van en una herramienta aparte.
→ No cambia nada de lo que ya funcionaba. El modelo tiene que elegir entre dos tools, y las descripciones lo guían.
- 05
La cuota la informa Google
Saqué los costos fijos y el límite estimado de 10.000 unidades que bloqueaba llamadas en el servidor; el uso real se lee desde Cloud Monitoring.
→ El servidor no frena pedidos por una estimación. Los datos de Monitoring llegan con demora y requieren un permiso más.
- 06
Nunca abrir el navegador en Docker
En modo headless el login de Google no arranca: el error explica cómo reautorizar desde el host con youtube-studio-mcp-auth, y el servidor toma el token nuevo sin reiniciar.
→ El contenedor no queda esperando un login imposible. Reautorizar es un paso manual.
- 07
Que falle la caché, no la tool
Si la caché no se puede leer o escribir, la consulta sigue contra la API y lo avisa en warnings.
→ Una respuesta o un borrado que salieron bien en YouTube nunca se informan como fallidos por un error de la caché.
Saber qué comentarios faltan contestar en todo el canal sin que la API tenga ese filtro y sin gastar la cuota.
- 01La API de YouTube no filtra por "sin responder": hubo que definir qué cuenta como respondido y clasificar cada hilo en el MCP.
- 02Cada hilo trae sólo algunas respuestas; si ninguna es mía y hay más, recién ahí se piden las respuestas completas.
- 03Guardar los pendientes en caché habría escondido respuestas hechas fuera del MCP: por eso sólo guarda pruebas de respuesta y las vuelve a verificar.
- 04Si el escaneo corta por el tope, el resultado se declara parcial y no salta un hilo reciente sin resolver para devolver otros más viejos.
- 05En Docker no hay navegador para el login de Google: el servidor explica cómo reautorizar desde el host y toma el token nuevo sin reiniciar.
Mi decisión clave
Cachear sólo los hilos ya respondidos. Un pendiente nunca se guarda, así que una respuesta hecha desde cualquier lugar se detecta en la consulta siguiente, y antes de ocultar un hilo por la caché se verifica que mi respuesta siga existiendo. También definí qué cuenta como "sin responder" y el tope de llamadas por consulta.
Resultado
Lo uso todos los días desde ChatGPT para contestar los comentarios de Drayten: pido los pendientes, reviso cada uno y respondo desde la conversación. Traer 15 pendientes suele costar entre 2 y 5 unidades de cuota.
- 187 tests automáticos (el proyecto original tenía 100): escaneo con una API simulada, caché, validación, cuota de Cloud y autenticación.
- Prueba real de solo lectura en el contenedor de producción: 15 comentarios pendientes, revisando 31 hilos con 2 llamadas y 2 unidades de cuota.
- Ninguno de los comentarios que ya había contestado apareció como pendiente.
- En uso diario desde ChatGPT, respondiendo comentarios reales del canal.