MCP Video Gen
MCP Video Gen
Un servidor MCP autoalojado que puede exponer backends locales de generación de medios como ComfyUI y Blender, al mismo tiempo que proporciona análisis, edición, FFmpeg, HyperFrames, línea de tiempo, subtítulos, voz y utilidades de audio locales.
El proyecto está diseñado para implementaciones solo con Portainer: el repositorio público contiene una aplicación normal de varios archivos, mientras que un único Stack video-mcp.yml actúa como cargador de arranque para GitHub Releases inmutables.
Capacidades
Descubrir nodos de ComfyUI realmente registrados por
/object_infocuando ComfyUI está disponible.Escanear los directorios
models/ycustom_nodes/de ComfyUI en modo solo lectura cuando están montados.Inspeccionar archivos fuente/documentación de nodos personalizados compatibles.
Enviar cualquier JSON de flujo de trabajo de API de ComfyUI válido e inspeccionar el estado de la cola/historial/salida.
Controlar opcionalmente Blender instalado en el host a través de un puente autenticado para automatización
bpy, renderizado de animaciones, renderizado de fotogramas y exportación GLB.Importar archivos desde el cliente MCP/IA a la caché persistente usando texto, base64 de una sola vez o transferencia binaria fragmentada.
Devolver archivos en caché al cliente/IA a través de descarga HTTP autenticada, base64 en línea o lecturas base64 fragmentadas acotadas.
Subir entradas, almacenar en caché salidas y recuperar archivos de imagen, video, audio, 3D, escena, subtítulos y otros generados a través de un único contrato
file_id.Crear y renderizar proyectos HyperFrames locales usando HTML/CSS/medios.
Sondear, transcodificar, concatenar, superponer, multiplexar audio, recortar, invertir, repetir, variar la velocidad y extraer fotogramas con FFmpeg.
Detectar silencio, secciones negras/congeladas, sonoridad, entrelazado, regiones de recorte, fotogramas clave y diferencias objetivas SSIM/PSNR.
Crear hojas de contacto/storyboards y realizar análisis ligeros de similitud de fotogramas, movimiento, fotogramas duplicados y mejor fotograma.
Detectar y dividir escenas con PySceneDetect.
Crear, reajustar tiempo, convertir, estilizar y quemar subtítulos con pysubs2 + FFmpeg.
Mantener líneas de tiempo OpenTimelineIO persistentes con pistas, clips, transiciones, marcadores, reordenación, inspección y exportación.
Detectar ritmo, tempo, ataques y tono con aubio.
Eliminar el ruido del habla localmente con RNNoise.
Detectar segmentos de habla con un pequeño modelo Silero VAD ONNX.
Transcribir medios, generar subtítulos y obtener marcas de tiempo similares a palabras localmente con whisper.cpp.
Sintetizar voz opcionalmente con voces Piper proporcionadas por el usuario; Piper está deshabilitado por defecto.
Validar opcionalmente JWTs de Cloudflare Access en el origen y ejecutar un sidecar de Cloudflare Tunnel.
Este servidor intencionalmente no contiene flujos de trabajo fijos de generación de IA, memoria a largo plazo o habilidades de agente. Expone primitivas de ejecución para que un cliente o un MCP de conocimiento/habilidades separado decida cómo se deben construir los flujos de trabajo.
ComfyUI y Blender son backends externos opcionales. Si algún backend está deshabilitado, ausente o temporalmente inalcanzable, el MCP en sí permanece saludable. Las herramientas dependientes de la red devuelven un resultado available=false legible por el modelo en lugar de derribar el servidor o mostrar un error de herramienta por ausencia de backend.
Related MCP server: comfyui-mcp-server-node
Arquitectura
MCP client / AI
|
|<------ generic MCP file transfer ------>
v
MCP Video Gen + persistent file_id cache
|
|---------------- optional ComfyUI API
| |
| +-- installed models
| +-- custom nodes
| +-- image/video/audio generation
|
|---------------- optional Blender bridge on VM
| |
| +-- bpy scene creation/editing
| +-- .blend / GLB export
| +-- still / animation rendering
|
|---------------- HyperFrames
|---------------- OpenTimelineIO / subtitles
|---------------- scene / frame analysis
|---------------- whisper.cpp / Silero VAD / RNNoise / aubio
+---------------- FFmpeg
All execution paths exchange files through the same MCP cache.Implementación con Portainer
Usa video-mcp.yml como definición del Stack.
ComfyUI opcional
Las variables de conexión típicas de ComfyUI son:
COMFYUI_HOST=host.docker.internal
COMFYUI_PORT=8188
COMFYUI_SCHEME=httpPara el descubrimiento del sistema de archivos, establece las rutas del host cuando ComfyUI existe:
COMFYUI_MODELS_PATH=/host/path/to/ComfyUI/models
COMFYUI_CUSTOM_NODES_PATH=/host/path/to/ComfyUI/custom_nodesEstas variables de ruta ya no son necesarias para el inicio del MCP. El Stack tiene directorios vacíos genéricos de respaldo, por lo que puede iniciarse antes de que ComfyUI esté instalado. Si ComfyUI es inalcanzable, sus herramientas de red informan ese estado al modelo mientras las herramientas MCP locales continúan funcionando.
Blender opcional
Blender está deshabilitado por defecto:
BLENDER_ENABLED=false
BLENDER_BRIDGE_URL=http://host.docker.internal:9876
BLENDER_BRIDGE_TOKEN=
BLENDER_BRIDGE_TIMEOUT_SEC=7200La integración recomendada ejecuta scripts/blender_bridge.py directamente en la VM como una cuenta de sistema dedicada con pocos privilegios. El contenedor se comunica con él a través de un puente HTTP local autenticado; Blender se ejecuta sin interfaz gráfica en el host. Esto evita montar el sistema de archivos raíz del host o ejecutables del host en el contenedor MCP.
Después de instalar el puente, configúralo de forma privada en Portainer:
BLENDER_ENABLED=true
BLENDER_BRIDGE_URL=http://host.docker.internal:9876
BLENDER_BRIDGE_TOKEN=<same long random token used by the host bridge>Consulta docs/BLENDER_BRIDGE.md para la configuración, seguridad, endurecimiento de systemd, flujo de archivos y ejemplos.
Cloudflare Tunnel
Si usas el sidecar de Cloudflare Tunnel incluido, proporciona:
CLOUDFLARED_TUNNEL_TOKEN=<set privately in Portainer>Apunta el nombre de host del Tunnel remoto a:
http://video-mcp:8000El endpoint MCP es:
https://your-public-host.example/mcpCloudflare Access / Managed OAuth
La aplicación puede verificar el JWT de Cloudflare Access en el origen. Configura estos valores de forma privada en Portainer:
CF_ACCESS_VERIFY=true
CF_ACCESS_TEAM_DOMAIN=https://your-team.cloudflareaccess.com
CF_ACCESS_AUD=<Access application audience tag>
PUBLIC_BASE_URL=https://your-public-host.exampleNingún dominio real, audiencia, token de túnel, token de puente, IP interna o credencial pertenece a este repositorio público.
Disponibilidad del backend externo
external_backends_status informa el estado actual de ComfyUI y Blender. inventory_summary incluye el mismo estado del backend junto con las capacidades locales.
Cuando un backend externo no está disponible, las llamadas devuelven una estructura como:
{
"ok": false,
"available": false,
"backend": "blender",
"status": "unavailable",
"message": "Blender integration is disabled..."
}Esto es deliberadamente diferente de un fallo del servidor MCP: el modelo aprende que una ruta de ejecución opcional no está disponible y puede continuar con otra.
Transferencia de archivos y caché compartida
Cada artefacto generado/importado se normaliza en la caché MCP y se identifica por file_id. Esta es la capa de intercambio entre el cliente IA, ComfyUI, Blender, FFmpeg, HyperFrames, subtítulos, líneas de tiempo y utilidades de audio.
Cliente / IA -> MCP
Para archivos pequeños:
cache_text_file
cache_file_base64Para archivos binarios más grandes:
file_upload_begin
file_upload_chunk
file_upload_finish
file_upload_abortLas cargas fragmentadas pueden especificar la longitud de bytes esperada y SHA-256 antes de la promoción a la caché persistente.
MCP -> cliente / IA
Metadatos:
get_cached_file_infoRuta de compatibilidad existente para pequeños:
get_output_inline_base64Lecturas genéricas acotadas:
read_cached_file_chunk_base64Cada objeto de metadatos de caché normal también contiene /files/{file_id} y, cuando PUBLIC_BASE_URL está configurado, una URL de descarga autenticada completa.
Esto significa que una IA puede redactar un script de Python para Blender como texto, colocar activos referenciados arbitrarios en la caché, enviar esos valores file_id a Blender, recibir archivos .blend/.glb/renderizados como nuevos valores file_id, y luego alimentar esos archivos a ComfyUI o al stack de posprocesamiento local.
Utilidades avanzadas de medios locales
El tiempo de ejecución prepara varias utilidades locales pequeñas además de FFmpeg/HyperFrames. El venv de Python contiene PySceneDetect, OpenTimelineIO, pysubs2, ONNX Runtime, NumPy y OpenCV sin interfaz gráfica. Debian proporciona el pequeño paquete CLI aubio-tools. RNNoise y whisper.cpp se construyen localmente a partir de fuentes ascendentes fijadas en el volumen de datos persistente.
Los artefactos de modelo/fuente de Silero VAD, RNNoise y whisper.cpp se almacenan bajo el volumen de datos persistente. La fuente y el modelo de RNNoise más las descargas del modelo Silero/Whisper utilizan validación SHA-256 explícita. El modelo Whisper predeterminado es un modelo cuantizado pequeño destinado a la transcripción local ligera; las URL/hashes del modelo y las referencias de origen se pueden anular a través de variables del Stack.
Las variables relevantes incluyen:
SILERO_VAD_ENABLED=true
SILERO_VAD_MODEL_URL=<public model URL>
SILERO_VAD_MODEL_SHA256=<expected sha256>
RNNOISE_ENABLED=true
RNNOISE_REF=<pinned upstream commit>
RNNOISE_SOURCE_URL=<public source archive URL>
RNNOISE_SOURCE_SHA256=<expected sha256>
RNNOISE_MODEL_URL=<public model URL>
RNNOISE_MODEL_SHA256=<expected sha256>
WHISPER_CPP_ENABLED=true
WHISPER_CPP_REF=v1.8.6
WHISPER_CPP_BUILD_JOBS=2
WHISPER_MODEL_AUTO_DOWNLOAD=true
WHISPER_MODEL_NAME=tiny-q5_1
WHISPER_MODEL_URL=<public model URL>
WHISPER_MODEL_SHA256=<expected sha256>El primer inicio después de habilitar estas utilidades puede llevar más tiempo porque RNNoise y whisper.cpp se construyen localmente y los activos seleccionados se descargan. Sus compilaciones y modelos resultantes permanecen en /data, por lo que la recreación normal del contenedor no repite esas compilaciones cuando se conserva el volumen persistente. El Stack le da al primer inicio un período de gracia de verificación de salud extendido por esta razón.
Piper TTS opcional
Piper se implementa como un tiempo de ejecución opcional y está deshabilitado por defecto:
PIPER_ENABLED=false
PIPER_PACKAGE_SPEC=piper-ttsCuando está habilitado, no se descarga ninguna voz automáticamente. Los archivos de voz .onnx y los archivos de configuración coincidentes residen en /data/piper/voices; se pueden importar desde la caché de medios MCP con piper_import_voice_file. Esto mantiene TTS opcional porque ComfyUI también puede alojar flujos de trabajo de audio/TTS.
Consulta THIRD_PARTY.md para notas de licencias de terceros.
Selección de versión
El Stack soporta:
VIDEO_MCP_VERSION=latest
VIDEO_MCP_CHECK_UPDATES_ON_START=true
VIDEO_MCP_FORCE_REFRESH=falselatest significa la GitHub Release no borrador, no prelanzamiento más alta cuya etiqueta coincide exactamente con vX.Y.Z. No significa main.
También puedes fijar una versión:
VIDEO_MCP_VERSION=v2.4.0o un SHA de commit:
VIDEO_MCP_VERSION=<commit-sha>Cuando la comprobación de actualizaciones está deshabilitada y existe una fuente /current válida, el inicio es completamente primero en caché. Una búsqueda de versión, descarga o validación de archivo fallida recurre a la última fuente conocida buena cuando existe.
Volúmenes persistentes
El Stack separa tres preocupaciones:
video_mcp_code -> /opt/video-mcp versioned source cache + /current
video_mcp_venv -> /opt/venv persistent Python virtual environment
video_mcp_data -> /data media, timelines, models, local tooling, HyperFrames projects/cacheLa raíz de datos de tiempo de ejecución de la aplicación por defecto es /data. Las implementaciones directas/no Stack pueden anularla con VIDEO_MCP_DATA_ROOT; importar video_mcp.server o video_mcp.entrypoint no crea el directorio. Los directorios de tiempo de ejecución se crean solo cuando la aplicación se inicia.
El entorno de Python se reconstruye solo cuando requirements.txt cambia. La reconstrucción limpia el contenido del directorio venv montado; nunca elimina el punto de montaje de Docker en sí.
Seguridad del arranque de la fuente
Los archivos fuente se descargan de GitHub codeload en un directorio de preparación y se validan antes de la extracción. El arranque rechaza:
rutas absolutas;
traversal
..;enlaces simbólicos;
enlaces duros;
archivos con más de una raíz de nivel superior.
Una versión recibe .mcp-source-ready solo después de que la extracción y las comprobaciones del contrato de tiempo de ejecución tengan éxito. /current se cambia solo después de ese punto, por lo que una actualización interrumpida o mal formada no puede reemplazar la última fuente conocida buena.
Los montajes del sistema de archivos de modelos y nodos personalizados de ComfyUI son de solo lectura. Las descargas de modelo/fuente de utilidades de IA utilizan archivos temporales y verificación SHA-256 antes de reemplazar los artefactos en caché. El puente opcional de Blender utiliza autenticación de token portador y solo transporta entradas/salidas de trabajo declaradas, pero el Python arbitrario de Blender sigue siendo potente y, por lo tanto, el puente debe aislarse con una cuenta de sistema sin privilegios.
HyperFrames
HyperFrames se ejecuta localmente en el contenedor MCP y usa la misma área /data persistente que la caché de medios MCP. Los activos del navegador se almacenan en caché de forma persistente en /data/hyperframes-home.
La especificación del paquete predeterminado está fijada en el Stack para la reproducibilidad y se puede anular de forma privada:
HYPERFRAMES_NPM_SPEC=hyperframes@0.7.111Las habilidades de HyperFrames están intencionalmente deshabilitadas en este servidor de ejecución (HYPERFRAMES_SKIP_SKILLS=1).
Desarrollo
python -m venv .venv
. .venv/bin/activate
pip install -r requirements.txt pytest PyYAML
PYTHONPATH=src python -m pytest -q
python scripts/check_public_repo.pyCI verifica la compilación de Python, las importaciones del servidor/punto de entrada, las pruebas, el análisis YAML, la sintaxis de ayudantes de shell/Python, la representación de Compose, la consistencia de versión/changelog y las barreras de seguridad de secretos/red privada del repositorio público.
Proceso de lanzamiento
Desarrolla en una rama y abre un PR.
CI debe pasar.
Actualiza
VERSIONyCHANGELOG.md.Fusiona a
main.CI crea la etiqueta inmutable
vX.Y.Zy la GitHub Release estable coincidente si aún no existe.
Las etiquetas/lanzamientos de la aplicación están reservados para nombres exactos vX.Y.Z para que las versiones no relacionadas de modelos o activos no puedan afectar la resolución de VIDEO_MCP_VERSION=latest.
Licencia y atribución
Licenciado bajo la Apache License 2.0. Consulta LICENSE.
Las redistribuciones y trabajos derivados deben conservar el aviso de atribución en NOTICE de acuerdo con la Apache License 2.0. Los componentes de terceros conservan sus propias licencias; consulta THIRD_PARTY.md.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityBmaintenanceMCP server for AI-powered image, audio, and video generation, enabling media creation directly from Claude, Cursor, and other MCP clients.1144MIT
- Alicense-qualityCmaintenanceA lightweight MCP server that bridges AI agents with a local ComfyUI instance to generate and iteratively refine images, audio, and video through conversational tool calls.41MIT
- AlicenseAqualityCmaintenanceMulti-provider media generation MCP server that generates images, videos, audio, and transcriptions from text prompts using OpenAI, xAI, Gemini, ElevenLabs, and BFL through a single unified interface.6811MIT
- AlicenseAqualityBmaintenanceAn MCP server that enables local AI agents to generate images and videos through the OpenRouter API, manage a browsable media library, and track generation costs.11MIT
Related MCP Connectors
MCP server for Clipkit — gives AI agents a video toolbox via the Clipkit schema.
MCP server for Wan AI video generation
MCP server for Hailuo (MiniMax) AI video generation
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/the-code-learner/MCP-video-gen'
If you have feedback or need assistance with the MCP directory API, please join our Discord server