← Integraciones de IA
02 · MCP EXTENDIDO · UPSTREAM MIT

YouTube Tools

Extensión de yt-dlp-mcp para que un modelo pueda ver un video, no sólo leerlo: miniaturas, cuadrículas cronológicas que recorren un tramo completo y fotogramas puntuales como imágenes, cruzados con la transcripción, más transcripción local con Whisper large-v3. La uso para investigar la competencia de mi canal, Drayten.

ROL
Ideas y decisiones de las funciones nuevas. Código con IA, revisado por mí.
BASE
yt-dlp-mcp · MIT
ESTADO
En uso · self-hosted
TOOLS
14
Node 22TypeScriptMCP SDKZodyt-dlpFFmpegmlx-whisperDockerJest
Demo · YouTube Tools
01 · CONTEXTO

Antes

Para decidir temas y miniaturas de Drayten necesitaba revisar qué publica la competencia: títulos, miniaturas y contenido de los videos.

02 · PROBLEMA

Qué había que resolver

yt-dlp-mcp ya resolvía metadatos y subtítulos, pero el modelo no veía las miniaturas ni lo que aparece en pantalla: gráficos, slides, código o texto sobreimpreso. Si el narrador decía "acá ven el gráfico", la IA no podía verlo, y los videos sin subtítulos quedaban afuera.

Qué hace.
Las capacidades principales del sistema.

Herramientas.
14 herramientas. Las marcadas en rojo las agregué o las mejoré yo; el resto viene del proyecto original.

FIG_01 · ARQUITECTURA SIMPLIFICADAYouTube Tools

Cómo está armado

  1. 01CHATGPTcliente multimodal
  2. 02SERVIDOR MCPTypeScript · Docker · STDIO
  3. 03YT-DLP + FFMPEGcaché · fotogramas · cuadrículas
  4. 04WORKER WHISPERHTTP local autenticado
  5. 05MLXlarge-v3 · GPU Apple

Decisiones técnicas.
Qué se eligió y qué implica.

  1. 01

    Descargar y cachear en vez de leer en streaming

    Medí las dos opciones: decodificar 60 s directo desde YouTube tardaba unos 37 s por el límite de velocidad, y bajar el video entero en 720p sin audio, en fragmentos paralelos, unos 9 s.

    → Las llamadas siguientes sobre el mismo video tardan segundos. A cambio, la primera baja el video completo y ocupa disco durante 24 h.

  2. 02

    Panorama antes que detalle

    Las descripciones de las tools llevan al modelo a ubicar en la transcripción, mirar una cuadrícula y recién después pedir pocos fotogramas.

    → Cada imagen consume contexto: con este orden y los límites (seis capturas por cuadrícula, 12 fotogramas por llamada) el análisis visual entra en una conversación.

  3. 03

    Recorrer el tramo entero, en páginas

    Las cuadrículas cubren todo el tramo pedido, en páginas con un cursor validado, y los fotogramas quedan para minutos exactos: una herramienta recorre y la otra inspecciona. Cada respuesta indica qué cubre y cómo seguir, así el modelo sabe cuántas imágenes va a recibir.

    → Nunca baja la frecuencia ni la resolución a escondidas, y cada respuesta entra en 12 MiB contando el base64. A cambio, un tramo largo lleva varias llamadas.

  4. 04

    Enviar la imagen, no la URL

    Miniaturas, cuadrículas y fotogramas viajan como bytes en bloques image, con su tipo MIME y un límite de 4 MiB por imagen.

    → El modelo las ve sin abrir enlaces. El payload es más pesado.

  5. 05

    Docker para el MCP, nativo para la inferencia

    El servidor corre en Docker y habla por HTTP local autenticado con un worker de macOS que usa MLX.

    → Se aprovecha la GPU de Apple, con dos entornos que mantener.

  6. 06

    Liberar el modelo por inactividad

    El proceso de inferencia se reutiliza entre pedidos y se termina tras 300 s sin uso, por defecto.

    → La memoria queda libre cuando no se transcribe; el pedido siguiente espera la carga.

DESAFÍO PRINCIPAL

Que la IA vea lo que pasa en el video, no sólo lo lea, sin volver lenta cada consulta.

  1. 01Las miniaturas y los fotogramas tenían que llegar al cliente como imágenes reales, no como texto ni enlaces. Lo validé inspeccionando el pedido y la respuesta hacia ChatGPT.
  2. 02Leer el tramo en streaming desde YouTube era lento por el límite de velocidad; descargar el video entero y cachearlo resultó más rápido que bajar un pedazo.
  3. 03Las marcas de tiempo tenían que ser exactas: al saltar con ffmpeg los tiempos se reinician en 0 y hubo que volver a sumar el inicio del tramo, además de escapar los ":" del minuto impreso en cada celda.
  4. 04Recorrer un tramo largo sin perder capturas: cada página se ajusta a un presupuesto de bytes y, si la última cuadrícula queda incompleta, se completa con celdas vacías etiquetadas en vez de repetir fotogramas.
  5. 05Whisper large-v3 corre en el mismo Mac mini que el resto de mis servicios: el modelo se carga cuando hace falta y se libera solo.

Cómo usé IA

Las ideas y decisiones de las funciones nuevas son mías. El código lo generó IA y lo revisé yo.

Resultado

Lo uso para investigar la competencia del canal antes de definir videos y miniaturas, y para que la IA lea gráficos, slides o código que aparecen en pantalla. Con una captura cada 10 s, la IA puede recorrer 14 minutos de video en 14 cuadrículas sin perder ningún tramo.

  • Validado en un caso de uso propio.
  • Transcripción del MCP idéntica a la local en el mismo video y modelo.
  • Tests unitarios (Jest) de tiempos, rangos, paginación y transcripción con marcas de tiempo, más pruebas con videos sintéticos sobre FFmpeg y ffprobe reales.
  • Las 14 herramientas publican un JSON Schema válido.
  • Prueba punta a punta por STDIO en el contenedor de producción: del minuto 1 al 15 de un video real, una captura cada 10 s dio 84 capturas en 14 cuadrículas, recorridas completas sin saltos ni duplicados.