YouTube MCP

by tsubouchi
Verified

remote-capable server

The server can be hosted and run remotely because it primarily relies on remote services or has no dependency on the local environment.

Integrations

  • Extracts screenshots from YouTube videos at specified intervals or timestamps, with special handling for regular videos and Shorts format.

  • Takes screenshots at 1-10 second intervals from YouTube Shorts, capturing up to 60 screenshots per video with precise cropping of the video area.

YouTube MCP

Una herramienta para tomar capturas de pantalla automáticamente de videos de YouTube. Admite YouTube Shorts y vídeos de YouTube.

función

Cortos de YouTube

  • Tomar una captura de pantalla cada n segundos
  • Hasta 60 tomas (si el vídeo dura 60 segundos o más)
  • Recorta con precisión solo el área de video y guárdala en tmp/
  • Ver capturas de pantalla en tiempo real
  • Descargue todas las imágenes o las seleccionadas localmente como un archivo ZIP (se abre tanto en Mac como en Windows)

Vídeos de YouTube

  • Tomar una captura de pantalla cada n segundos
  • Hasta 60 tomas (si el vídeo dura 60 segundos o más)
  • Recorta con precisión solo el área de video y guárdala en tmp/
  • Ver capturas de pantalla en tiempo real
  • Descargue todas las imágenes o las seleccionadas localmente como un archivo ZIP (se abre tanto en Mac como en Windows)

TikTok

  • Actualmente en preparación
  • Utilice una URL de YouTube o YouTube Shorts

Pila de tecnología

  • Node.js 18
  • Expresar
  • Dramaturgo
  • Funciones de Firebase (Gen 2)
  • Alojamiento de Firebase
  • Almacenamiento de Firebase
  • Mecanografiado
  • CSS de Bootstrap

Configuración del proyecto

Playwrigh-MCP-Server/ ├── functions/ # Cloud Functions │ ├── src/ # ソースコード │ │ ├── index.ts # メインエントリーポイント │ │ ├── screenshot.ts # スクリーンショット機能 │ │ ├── screenshots.ts # スクリーンショット一覧取得 │ │ ├── download-zip.ts # ZIPダウンロード機能 │ │ └── types.ts # 型定義 │ ├── package.json # 依存関係 │ └── tsconfig.json # TypeScript設定 ├── public/ # 静的ファイル │ └── index.html # メインページ ├── firebase.json # Firebase設定 └── storage.rules # Storageセキュリティルール

Lista de API

Tomar captura de pantalla

  • Punto final : /screenshot
  • Método : POST
  • Parámetros :
    { "url": "YouTube URL", "interval": 1 // 間隔(秒) }
  • respuesta :
    { "success": true, "screenshots": [ { "imageUrl": "署名付きURL", "time": "タイムスタンプ", "filename": "ファイル名" } ], "interval": 1 }

Obtener lista de capturas de pantalla

  • Punto final : /screenshots
  • Método : OBTENER
  • respuesta :
    [ { "filename": "ファイル名", "imageUrl": "署名付きURL", "time": "タイムスタンプ" } ]

Descarga ZIP

  • Punto final : /download-zip
  • Método : POST
  • Parámetros :
    { "filenames": ["ファイル名1", "ファイル名2"] }
  • Respuesta : Archivo ZIP

Arquitectura de GCP

Servicios utilizados

  1. Funciones de Firebase (Gen 2)
    • Tiempo de ejecución: Node.js 18
    • Región: us-central1
    • Memoria: 1 GiB
    • Procesador: 1
    • Tiempo de espera: 540 segundos
    • Número máximo de instancias: 100
    • Concurrencia: 80
    • Punto final: https://api-ub7zp5pjra-uc.a.run.app
  2. Almacenamiento de Firebase
    • Cubo: mcp-5e4b5.firebasestorage.app
    • Reglas de seguridad: Acceso sólo a usuarios autenticados
  3. Alojamiento de Firebase

Configuración de permisos de IAM

Permisos de usuario

  • t@bonginkan.ai
    • roles/owner (propietario del proyecto)
    • roles/run.admin (administrador de Cloud Run)

Permisos de la cuenta de servicio

  1. Funciones en la nube
    • 33501462786-compute@developer.gserviceaccount.com
      • roles/run.admin
      • roles/run.developer
      • roles/run.invoker
      • roles/cloudfunctions.developer
      • roles/storage.admin
  2. Administrador de Firebase
    • firebase-adminsdk-fbsvc@mcp-5e4b5.iam.gserviceaccount.com
      • roles/firebase.sdkAdminServiceAgent
      • roles/firebaseauth.admin
      • roles/iam.serviceAccountTokenCreator
      • roles/storage.admin
  3. Construcción en la nube
    • 33501462786@cloudbuild.gserviceaccount.com
      • roles/run.admin
      • roles/cloudfunctions.developer
      • roles/storage.admin
      • roles/artifactregistry.admin
      • roles/eventarc.admin

Detalles de implementación

Función de captura de pantalla

  • Controlar navegadores sin cabeza con Playwright
  • Tamaño de la ventana gráfica: 1280x720
  • Utilice un directorio temporal para almacenar capturas de pantalla
  • Después de cargar en Firebase Storage, elimine el archivo temporal.
  • Las URL firmadas son válidas durante 15 minutos.

Manejo de errores

  • Detectar errores en cada punto final de la API
  • Devuelve un mensaje de error en formato JSON.
  • Manejo de puntos finales 404
  • Respuesta de error apropiada para errores 500

Configuración de CORS

Características de seguridad

  • Reglas de seguridad de almacenamiento de Firebase
  • Establecer tiempo de expiración para URL firmadas (15 minutos)
  • Eliminar correctamente los archivos temporales

Últimas revisiones (28/03/2024)

Corrección de errores

  1. Configuración CORS mejorada
    • Especificar explícitamente los orígenes permitidos
    • Habilitación de credenciales
  2. Manejo de errores mejorado
    • Respuesta JSON para errores 404
    • Mensaje de error detallado para errores 500
  3. Compatibilidad con almacenamiento de Firebase
    • Especificar un nombre de depósito explícitamente
    • Establezca el tiempo de expiración de las URL firmadas en 15 minutos
  4. Optimizaciones de Cloud Functions Gen 2
    • Optimizar la configuración de memoria (1 GiB)
    • Ajustar la configuración del tiempo de espera (540 segundos)
    • Establecer el número de ejecuciones simultáneas (80)

Funciones mejoradas

  1. Función de captura de pantalla
    • Optimización de la configuración de Playwright
    • Configuración de la ventana gráfica del navegador sin cabeza
    • Gestión mejorada de archivos temporales
    • Soporte mejorado para YouTube Shorts
    • Implementación de la función de visualización en tiempo real
  2. Respuesta de API mejorada
    • Mensajes de error en japonés
    • Formato de respuesta estandarizado
    • Estandarización de formatos de marcas de tiempo
    • Implementación de una respuesta de streaming
  3. Seguridad mejorada
    • Actualización de las reglas de seguridad de Firebase Storage
    • Asegúrese de que se eliminen los archivos temporales
    • Restricción adecuada de la información de error
  4. Mejoras en la interfaz
    • Optimización de la visualización en tiempo real
    • Corrección de URL de la imagen
    • Manejo de errores mejorado
    • Mejoras en la interfaz de usuario

configuración

  1. Clonar el repositorio
git clone https://github.com/tsubouchi/youtube_mcp.git cd youtube_mcp
  1. Instalación de dependencias
# プロジェクトルート npm install # Cloud Functions cd functions npm install
  1. Instalar Firebase CLI
npm install -g firebase-tools
  1. Iniciar sesión en Firebase
firebase login
  1. Inicializando el proyecto
firebase init
  1. Desplegar
# Cloud Functions cd functions npm run deploy # Firebase Hosting cd .. firebase deploy --only hosting

Creación de un entorno de desarrollo local

  1. Instalación de dependencias
# プロジェクトルート npm install # Cloud Functions cd functions npm install
  1. Configuración de la clave de la cuenta de servicio
  • Descargue la clave de su cuenta de servicio desde la consola de Firebase
  • Guardar como functions/service-account.json
  1. Configuración de variables de entorno
# functions/.env GOOGLE_APPLICATION_CREDENTIALS=./service-account.json
  1. Iniciando el emulador
cd functions npm run serve

Configuración del puerto del emulador

El emulador utiliza los siguientes puertos:

Pruebas de API

  1. Chequeo de salud
curl http://localhost:5001/mcp-5e4b5/us-central1/api
  1. Tomar captura de pantalla
curl -X POST http://localhost:5001/mcp-5e4b5/us-central1/api/screenshot \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -d '{"url": "YouTube URL", "interval": 5}'
  1. Obtener lista de capturas de pantalla
curl http://localhost:5001/mcp-5e4b5/us-central1/api/screenshots
  1. Descarga ZIP
curl -X POST http://localhost:5001/mcp-5e4b5/us-central1/api/download-zip \ -H "Content-Type: application/json" \ -d '{"filenames": ["ファイル名1", "ファイル名2"]}'

Notas

  • Al usar el emulador, accederá al almacenamiento real de Firebase.
  • La clave de la cuenta de servicio está incluida en .gitignore y no está comprometida con el repositorio
  • Puede comprobar el estado de ejecución y los registros de las funciones en la interfaz de usuario del emulador.

Notas

  • Node.js 18 quedará obsoleto el 30 de abril de 2025
  • Las capturas de pantalla se guardan en un directorio temporal y se eliminan después del procesamiento.
  • Si el vídeo dura más de 60 segundos, solo se guardarán las primeras 60 imágenes.
  • Las reglas de seguridad de Firebase Storage están configuradas para permitir el acceso solo a usuarios autenticados.
  • Las URL firmadas solo son válidas durante 15 minutos

IMPORTANTE

Especificaciones para guardar capturas de pantalla y comprimirlas

  1. Guardar una captura de pantalla
    • Todas las capturas de pantalla se guardan temporalmente en /tmp/screenshots/ .
    • El nombre del archivo tiene el formato screenshot_[タイムスタンプ]_[連番].png
    • El archivo temporal se conservará una vez finalizado el procesamiento y se sobrescribirá cuando tome una nueva captura de pantalla.
  2. Creando un archivo ZIP
    • La captura de pantalla seleccionada se cargará directamente desde /tmp/screenshots/
    • Se creará un archivo ZIP temporal en /tmp/screenshots/ y luego se eliminará después de la descarga.
    • El nombre del archivo ZIP tiene el formato screenshots_[タイムスタンプ].zip
  3. Administrar archivos temporales
    • Los archivos temporales deben limpiarse periódicamente
    • Recomendamos eliminar las capturas de pantalla antiguas antes de tomar otras nuevas.

licencia

Licencia MIT

ID: u2f5xij3z5