VideoGen MCP

Crea videos, imágenes, locuciones, música y avatares desde agentes de IA a través de la API oficial de VideoGen.

Servidor MCP alojado

npx add-mcp 'https://mcp.videogen.io/mcp'

Se instala en Claude Code, Codex, Cursor y más

Documentación

Para obtener Markdown limpio de cualquier página, añade .md a la URL de la página. Para un índice completo de documentación, consulta https://docs.videogen.io/llms.txt. Para integración con clientes de IA (Claude Code, Cursor, etc.), conéctate al servidor MCP en https://docs.videogen.io/_mcp/server.

Servidor MCP

Conecta el servidor MCP de VideoGen (remoto alojado o local) que expone todas las capacidades de la API de VideoGen como herramientas para Cursor, Claude Desktop, Windsurf y otros clientes MCP.

El servidor MCP de VideoGen es un servidor de Model Context Protocol que expone la API completa de VideoGen a cualquier cliente MCP. Apunta tu agente hacia él y podrá generar videos a partir de guiones, producir imágenes, voces en off, música y avatares, subir archivos, exportar y remezclar proyectos, y gestionar ejecuciones, todo autenticado con tu propia clave de API. Viene en dos transportes que exponen las mismas herramientas: un servidor remoto alojado (recomendado) y un servidor local.

Nota

Este es el servidor MCP de API, que ejecuta llamadas reales a la API. Es distinto del MCP de documentación alojado en https://docs.videogen.io/_mcp/server, que es de solo lectura y solo responde preguntas sobre la documentación. Consulta Documentation MCP a continuación.

Conectar

Ambos transportes envuelven el @videogen/sdk oficial y exponen las mismas herramientas. Obtén una clave de API en app.videogen.io/api primero: cada llamada a una herramienta se ejecuta como el equipo propietario de la clave.

Remoto (recomendado)

El servidor alojado no necesita instalar ni actualizar nada. Apunta tu cliente MCP al endpoint y envía tu clave como token de portador:

{
  "mcpServers": {
    "videogen": {
      "url": "https://mcp.videogen.io/mcp",
      "headers": {
        "Authorization": "Bearer sk_videogen_live_..."
      }
    }
  }
}

El servidor alojado es sin estado y multiinquilino. Tu clave se lee del encabezado de la solicitud, se reenvía solo a la API de VideoGen y nunca se almacena. Debido a que se ejecuta en la nube y no tiene acceso al sistema de archivos de tu máquina, upload_file no está disponible en el servidor remoto. Sube archivos directamente a través de la API de VideoGen (solicita una URL de subida prefirmada y PUT los bytes tú mismo), luego pasa el vg_file_... id devuelto a otras herramientas — o usa el servidor local para archivos en tu máquina.

Instalación en un clic

Instala el servidor alojado en un clic y luego autentícate con Iniciar sesión con VideoGen (o añade tu clave de API como encabezado Authorization después):

También puedes instalarlo desde la línea de comandos:

code --add-mcp '{"name":"videogen","type":"http","url":"https://mcp.videogen.io/mcp"}'

Local (stdio)

El servidor local se ejecuta como un subproceso que tu cliente MCP lanza con npx, por lo que no hay nada que instalar de antemano. Lee tu clave de la variable de entorno VIDEOGEN_API_KEY:

{
  "mcpServers": {
    "videogen": {
      "command": "npx",
      "args": ["-y", "@videogen/mcp"],
      "env": {
        "VIDEOGEN_API_KEY": "sk_videogen_live_..."
      }
    }
  }
}

Tu clave permanece en tu máquina. Se pasa directamente al proceso del servidor local y nunca se envía a ningún lugar excepto a la API de VideoGen.

VariableRequeridaPredeterminadaDescripción
VIDEOGEN_API_KEYsolo local—Tu clave de API de VideoGen (servidor local). En el servidor remoto, la clave viaja en el encabezado Authorization: Bearer en su lugar.
VIDEOGEN_BASE_URLnohttps://api.videogen.ioSobrescribe la URL base de la API ascendente (por ejemplo, para desarrollo local).

Otros clientes MCP

Windsurf, Cline, Goose, Claude Desktop y la mayoría de los otros clientes MCP aceptan el mismo JSON mcpServers mostrado arriba (remoto o local). Añade el bloque a la configuración MCP de ese cliente y luego recarga:

ClienteDónde añadirlo
CursorConfiguración → MCP → Añadir, o el enlace de un clic arriba
VS Code.vscode/mcp.json, o el enlace de un clic arriba
Claude DesktopConfiguración → Desarrollador → Editar configuración (claude_desktop_config.json)
Claude (web/móvil)Configuración → Conectores → Añadir conector personalizado — consulta Conectar a Claude
Windsurf~/.codeium/windsurf/mcp_config.json
ClinePanel de servidores MCP → Configurar servidores MCP
GooseConfiguración → Extensiones → Añadir, o ~/.config/goose/config.yaml

Nota

Los clientes que admiten MCP remoto sobre OAuth (Cursor, VS Code, Claude) pueden conectarse solo con la URL del servidor y autenticarse mediante Iniciar sesión con VideoGen. Los clientes sin soporte remoto/OAuth usan el bloque local (stdio) con un VIDEOGEN_API_KEY.

Iniciar sesión con VideoGen (OAuth)

Los hosts MCP que admiten OAuth — incluido Claude — pueden conectarse al servidor alojado sin una clave de API. Cada usuario inicia sesión a través de Iniciar sesión con VideoGen y el host llama al servidor en su nombre. El servidor anuncia su servidor de autorización mediante metadatos de recurso protegido y admite Registro Dinámico de Clientes (RFC 7591), por lo que estos hosts descubren el servidor de autenticación y se registran automáticamente — no hay nada que pegar excepto la URL del servidor.

Usa https://mcp.videogen.io/mcp para Cursor, Claude, VS Code y otros hosts que siguen desafíos OAuth a nivel de transporte.

Nota

Cursor: Prefiere la configuración remota con una clave de API Authorization: Bearer arriba. El cliente OAuth de Cursor elimina los componentes de ruta de las URL del servidor de autorización (no sigue RFC 8414 para emisores de ruta), lo que rompe Iniciar sesión con VideoGen contra Supabase Auth (…/auth/v1). El endpoint alojado /mcp soluciona esto anunciando un servidor de autorización sin ruta en mcp.videogen.io; si OAuth aún falla después de una actualización de Cursor, usa una clave de API.

Conectar a Claude

  1. En Claude (claude.ai, Claude Desktop o las aplicaciones móviles), abre Configuración → Conectores y haz clic en Añadir conector personalizado.
  2. Ingresa la URL del servidor MCP https://mcp.videogen.io/mcp. Deja en blanco los campos de ID de cliente OAuth / Secreto en Configuración avanzada — VideoGen admite Registro Dinámico de Clientes, por lo que Claude se registra automáticamente.
  3. Haz clic en Conectar y aprueba el consentimiento de Iniciar sesión con VideoGen.

Cada host usa su propia URL de redirección (callback) OAuth. El servidor de autorización de VideoGen acepta estas automáticamente mediante Registro Dinámico de Clientes, por lo que no necesitas configurarlas — se enumeran aquí como referencia:

HostURL de callback (redirección) OAuth
Claude — web, Desktop, móvil, Coworkhttps://claude.ai/api/mcp/auth_callback
Claude Codehttp://localhost/callback y http://127.0.0.1/callback (loopback, independiente del puerto)

Los usuarios que han iniciado sesión pueden revisar y revocar aplicaciones conectadas en cualquier momento desde el panel de desarrollador.

Operaciones de larga duración

Los flujos de trabajo, las herramientas multimedia y las exportaciones de proyectos son asíncronos. El servidor MCP envuelve cada uno de estos como una herramienta compuesta que inicia la operación y, de forma predeterminada, sondea hasta que alcanza un estado terminal (succeeded, failed o cancelled) antes de devolver el resultado final. Cada herramienta compuesta acepta estos campos de control opcionales:

CampoTipoPredeterminadoDescripción
waitbooleanotrueBloquea hasta que la operación alcance un estado terminal. Establece false para devolver inmediatamente con el id de ejecución.
pollIntervalMsnúmero—Con qué frecuencia sondear mientras espera, en milisegundos.
timeoutMsnúmero—Tiempo máximo de espera para un estado terminal antes de rendirse, en milisegundos.

Cuando wait es false, usa la herramienta get_* correspondiente (por ejemplo, get_workflow_run, get_tool_execution) para sondear el id devuelto tú mismo.

Recursos de orientación

El MCP de API también expone orientación operativa como recursos MCP estáticos (guidance://getting-started, guidance://async-tasks, guidance://workflows, guidance://tools-vs-workflows) más herramientas sin argumentos correspondientes (get_getting_started_guidance, get_async_tasks_guidance, get_workflows_guidance, get_tools_vs_workflows_guidance). Los agentes deben llamar a esas herramientas al elegir entre flujos de trabajo y herramientas multimedia, manejar el sondeo asíncrono en el servidor alojado o seguir el flujo de ejecución → remezcla → exportación. Esto es separado del MCP de documentación, que sirve el sitio completo de documentación de Fern en modo de solo lectura.

Referencia de herramientas

El servidor registra 49 herramientas: 45 herramientas de API más cuatro herramientas de orientación. El transporte remoto también proporciona un widget open_uploader solo alojado. Los ids son cadenas opacas con prefijo vg (vg_file_..., vg_enti_..., vg_work_..., vg_tool_..., vg_voic_...).

Flujos de trabajo (video de extremo a extremo)

HerramientaDescripciónParámetros clave
script_to_videoConvierte un guion en un video narrado terminado con imágenes y subtítulos. El guion se narra textualmente. Compuesto (espera por defecto).script, visualStyle, aspectRatio, visualPacing, quality, language, voiceId, voiceSpeed, actorEntityId, avatarQuality, featuredBRollFileIds, workflowAgentContext, scenes, remixActions, + controles de sondeo
voiceover_to_videoCrea un video narrado a partir de un archivo de audio de voz ya subido. Súbelo con upload_file primero. Compuesto.fileId, visualStyle, aspectRatio, visualPacing, quality, language, captionStyle, logoFileId, workflowAgentContext, scenes, remixActions, + controles de sondeo
slideshow_to_videoCrea un video narrado a partir de un archivo PDF o presentación ya subido. Súbelo con upload_file primero. Compuesto.fileId, slideScripts, aspectRatio, language, voiceId, voiceSpeed, actorEntityId, avatarQuality, captionStyle, logoFileId, remixActions, + controles de sondeo
storyboard_to_videoCrea un video a partir de un guion gráfico estructurado de escenas. Compuesto.scenes, actorEntityIds, productEntityIds, defaultGeneration, defaultDurationSeconds, quality, aspectRatio, workflowAgentContext, remixActions, + controles de sondeo
prompt_to_video_clipCrea un proyecto y genera un clip de video AI corto a partir de un prompt de texto (fotograma inicial, luego animar). Compuesto. No acepta remixActions.prompt, imageFileIds, durationSeconds, aspectRatio, quality, + controles de sondeo
list_workflow_runsLista las ejecuciones de flujos de trabajo, las más recientes primero.cursor, limit, selfOnly
get_workflow_runObtiene el estado actual y el resultado de una ejecución de flujo de trabajo individual.workflowRunId
cancel_workflow_runSolicita la cancelación de una ejecución de flujo de trabajo en curso.workflowRunId

Proporciona al menos dos remixActions (p. ej. ENABLE_CAPTIONS + SET_BACKGROUND_MUSIC) para un resultado pulido. Tipos de acciones de remezcla disponibles: SET_BACKGROUND_MUSIC, SET_LOGO, ENABLE_CAPTIONS, DISABLE_CAPTIONS, ADD_TRANSITIONS, ADD_ZOOM, RESIZE_PROJECT, CLEAN_UP_TRANSCRIPT, CONVERT_IMAGES_TO_VIDEOS.

Herramientas de medios

HerramientaDescripciónParámetros clave
generate_imageGenera una imagen a partir de un prompt de texto, opcionalmente condicionada por imágenes de origen. Compuesta.prompt, quality, imageFileIds, aspectRatio, watermarkMode, numResults, isOutputTemporary, + controles de sondeo
generate_video_clipGenera un clip de video a partir de un prompt de texto, imágenes de origen o videos de origen. Compuesta.quality (LOW | STANDARD | HIGH | MAX), prompt, startFrameFileId, imageFileIds, videoFileIds, audioFileIds, spokenDialogue, voiceDescription, generateAudio, suppressBackgroundMusic, durationSeconds, aspectRatio, watermarkMode, numResults, isOutputTemporary, + controles de sondeo
text_to_speechConvierte texto en audio hablado usando una voz seleccionable. Compuesta.ttsText, voiceId, speechLanguageCode, pronunciationReplacements, autoExpandPronunciationReplacements, voiceSpeed, numResults, isOutputTemporary, + controles de sondeo
generate_sound_effectGenera un efecto de sonido a partir de un prompt de texto. Compuesta.prompt, durationSeconds, promptInfluence, numResults, isOutputTemporary, + controles de sondeo
generate_musicGenera una pista musical a partir de un prompt de texto. Compuesta.prompt, numResults, isOutputTemporary, + controles de sondeo
generate_motion_graphicGenera un video de gráficos animados a partir de un prompt de texto (experimental, agéntico). Produce una superposición WebM transparente por defecto; establece transparentBackground en false para un MP4 opaco. Compuesta.prompt, fileIds, durationSeconds, aspectRatio, transparentBackground
generate_avatarGenera un video de avatar con cabeza parlante a partir de una entidad de actor y un archivo de audio subido. Compuesta.actorEntityId, audioFileId, avatarQuality, watermarkMode, numResults, isOutputTemporary, + controles de sondeo
vectorize_imageConvierte una imagen rasterizada en un vector (SVG). Compuesta.imageFileId, watermarkMode, numResults, isOutputTemporary, + controles de sondeo
remove_image_backgroundElimina el fondo de una imagen. Compuesta.imageFileId, watermarkMode, numResults, isOutputTemporary, + controles de sondeo
remove_video_backgroundElimina el fondo de un video. Compuesta.videoFileId, watermarkMode, numResults, isOutputTemporary, + controles de sondeo
upscale_imageAumenta la resolución de una imagen. Compuesta.imageFileId, watermarkMode, numResults, isOutputTemporary, + controles de sondeo
upscale_videoAumenta la resolución de un video. Compuesta.videoFileId, watermarkMode, numResults, isOutputTemporary, + controles de sondeo
image_3d_effectAñade movimiento de paralaje 3D a una imagen fija, produciendo un video. Compuesta.imageFileId, watermarkMode, numResults, isOutputTemporary, + controles de sondeo
list_tool_executionsLista ejecuciones de herramientas pasadas, las más recientes primero.cursor, limit, selfOnly
get_tool_executionObtiene el estado actual y los resultados de una única ejecución de herramienta.toolExecutionId
cancel_tool_executionSolicita la cancelación de una ejecución de herramienta en curso.toolExecutionId

Proyectos

HerramientaDescripciónParámetros clave
list_projectsListar proyectos. Solo los creados por API de forma predeterminada; pasa includeUiProjects para proyectos del panel también.cursor, limit, selfOnly, includeUiProjects
get_projectObtener metadatos y la URL compartible de un solo proyecto.projectId
export_projectExportar un proyecto a MP4. Compuesto: espera hasta que la URL de descarga esté lista de forma predeterminada.projectId, quality (STANDARD | HIGH | FULL_HIGH | ULTRA_HIGH), + controles de sondeo
get_project_exportObtener el estado actual de una exportación de proyecto. Sondea hasta que el estado sea exitoso, fallido o cancelado.projectId, exportId
remix_projectAplicar acciones de remezcla (música, logotipo, subtítulos, transiciones, ediciones en lenguaje natural) a un proyecto existente.projectId, remixActions, saveAsNewProject
list_project_remix_actionsListar el estado de las acciones de remezcla aplicadas a un proyecto.projectId

Archivos

HerramientaDescripciónParámetros clave
upload_fileSubir un archivo local y esperar hasta que se procese. Devuelve el id del archivo (vg_file_...). Úsalo para voiceover_to_video, slideshow_to_video, logotipos o material de archivo (B-roll). Para subir un recurso remoto, descárgalo primero y pasa su ruta local. Solo servidor local (stdio).filePath, displayName, type (IMAGE | VIDEO | AUDIO)
create_file_uploadCrear un archivo pendiente y devolver una URL de subida prefirmada (igual que POST /v1/files/upload). Envía los bytes tú mismo con PUT y luego sondea con get_file.displayName, type, isTemporary, transcript
get_fileObtener un archivo por id con URLs firmadas recién hidratadas para miniaturas, vistas previas y versiones de descarga.fileId
list_filesListar archivos visibles para la clave API actual.cursor, limit

Solo remoto alojado:

HerramientaDescripciónParámetros clave
open_uploaderAbrir el widget de subida alojado para que una persona pueda elegir archivos en el navegador (ChatGPT MCP Apps). No se cuenta entre las 46 herramientas API anteriores.—

Entidades

HerramientaDescripciónParámetros clave
list_entitiesListar entidades del catálogo integrado más las entidades de equipo ACTOR, PRODUCT, VISUAL_STYLE y SLIDESHOW_THEME. Las filas integradas tienen isBuiltIn: true y no se pueden actualizar ni archivar.entityType, cursor, limit
create_entityCrear una entidad. Adjunta al menos una imagen después con add_entity_reference.entityType (ACTOR | PRODUCT | VISUAL_STYLE | SLIDESHOW_THEME), name, description
get_entityObtener una entidad y sus imágenes de referencia.entityId
update_entityActualizar el nombre visible y/o la descripción de una entidad.entityId, name, description
archive_entityArchivar una entidad para que ya no aparezca en listas o selectores.entityId
add_entity_referenceAdjuntar una imagen subida (vg_file_...) como referencia. Usa isDefault: true para la miniatura principal.entityId, fileId, description, isDefault
remove_entity_referenceDesadjuntar una imagen de referencia de una entidad.entityId, fileId

Guía

HerramientaDescripciónParámetros clave
get_getting_started_guidanceAutenticación, verifica con get_me, convenciones de id, MCP vs SDK. Refleja guidance://getting-started.—
get_async_tasks_guidanceSondeo, límites de espera alojados, webhooks fuera de MCP. Refleja guidance://async-tasks.—
get_workflows_guidanceEjecutar → remezclar → exportar y cada herramienta de flujo de trabajo. Refleja guidance://workflows.—
get_tools_vs_workflows_guidanceHerramientas de un solo recurso (enrutamiento automático de modelos) vs flujos de trabajo de video completos. Refleja guidance://tools-vs-workflows.—

Recursos y cuenta

HerramientaDescripciónParámetros clave
list_tts_voicesListar voces de texto a voz disponibles para narración, text_to_speech y flujos de trabajo.cursor, limit, includeDeprecatedVoices, query
list_languagesListar idiomas admitidos para narración y subtítulos.query
get_meObtener la cuenta y el equipo detrás de la clave API (apiKeyId, apiKeyNickname, email, displayName, teamId). Úsalo como prueba de conexión.—
get_app_deep_linkConstruir una URL de la app VideoGen que abre un modal o navega después del inicio de sesión (mejora, compra de créditos, invitar compañeros, comentarios, integraciones, configuración de cuenta o un destino NAVIGATE). Prefiere esto cuando el usuario debe completar algo en la interfaz de VideoGen que las herramientas MCP no pueden hacer en línea. No se requiere clave API.action, más campos específicos de la acción (destination, articleSlug, provider)

Herramienta MCP a endpoint REST

Cada herramienta MCP se asigna a uno o más endpoints REST de VideoGen. Las herramientas compuestas llaman al endpoint start y luego sondean el endpoint get hasta llegar a un estado terminal.

Herramienta MCPEndpoint(s) REST
script_to_videoPOST /v1/workflows/script-to-video, luego GET /v1/workflows/runs/{workflowRunId}
voiceover_to_videoPOST /v1/workflows/voiceover-to-video, luego GET /v1/workflows/runs/{workflowRunId}
slideshow_to_videoPOST /v1/workflows/slideshow-to-video, luego GET /v1/workflows/runs/{workflowRunId}
storyboard_to_videoPOST /v1/workflows/storyboard-to-video, luego GET /v1/workflows/runs/{workflowRunId}
prompt_to_video_clipPOST /v1/workflows/prompt-to-video-clip, luego GET /v1/workflows/runs/{workflowRunId}
list_workflow_runsGET /v1/workflows/runs
get_workflow_runGET /v1/workflows/runs/{workflowRunId}
cancel_workflow_runPOST /v1/workflows/runs/{workflowRunId}/cancel
generate_imagePOST /v1/tools/generate-image, luego GET /v1/tools/executions/{toolExecutionId}
generate_video_clipPOST /v1/tools/generate-video-clip, luego GET /v1/tools/executions/{toolExecutionId}
text_to_speechPOST /v1/tools/text-to-speech, luego GET /v1/tools/executions/{toolExecutionId}
generate_sound_effectPOST /v1/tools/generate-sound-effect, luego GET /v1/tools/executions/{toolExecutionId}
generate_musicPOST /v1/tools/generate-music, luego GET /v1/tools/executions/{toolExecutionId}
generate_motion_graphicPOST /v1/tools/generate-motion-graphic, luego GET /v1/tools/executions/{toolExecutionId}
generate_avatarPOST /v1/tools/generate-avatar, luego GET /v1/tools/executions/{toolExecutionId}
vectorize_imagePOST /v1/tools/vectorize-image, luego GET /v1/tools/executions/{toolExecutionId}
remove_image_backgroundPOST /v1/tools/remove-image-background, luego GET /v1/tools/executions/{toolExecutionId}
remove_video_backgroundPOST /v1/tools/remove-video-background, luego GET /v1/tools/executions/{toolExecutionId}
upscale_imagePOST /v1/tools/upscale-image, luego GET /v1/tools/executions/{toolExecutionId}
upscale_videoPOST /v1/tools/upscale-video, luego GET /v1/tools/executions/{toolExecutionId}
image_3d_effectPOST /v1/tools/image-3d-effect, luego GET /v1/tools/executions/{toolExecutionId}
list_tool_executionsGET /v1/tools/executions
get_tool_executionGET /v1/tools/executions/{toolExecutionId}
cancel_tool_executionPOST /v1/tools/executions/{toolExecutionId}/cancel
list_projectsGET /v1/projects
get_projectGET /v1/projects/{projectId}
export_projectPOST /v1/projects/{projectId}/export, luego GET /v1/projects/{projectId}/exports/{exportId}
get_project_exportGET /v1/projects/{projectId}/exports/{exportId}
remix_projectPOST /v1/projects/{projectId}/remix
list_project_remix_actionsGET /v1/projects/{projectId}/remix-actions
upload_filePOST /v1/files/upload, bytes PUT, luego GET /v1/files/{fileId}
create_file_uploadPOST /v1/files/upload
get_filePOST /v1/files/{fileId}/hydrate
list_filesGET /v1/files
open_uploaderWidget de carga alojado (sin equivalente REST directo)
list_entitiesGET /v1/entities
create_entityPOST /v1/entities
get_entityGET /v1/entities/{entityId}
update_entityPOST /v1/entities/{entityId}/update
archive_entityPOST /v1/entities/{entityId}/archive
add_entity_referencePOST /v1/entities/{entityId}/references
remove_entity_referencePOST /v1/entities/{entityId}/references/remove
list_tts_voicesGET /v1/resources/tts-voices
list_languagesGET /v1/resources/languages
get_meGET /v1/me
get_app_deep_linkEnlace profundo de la aplicación (sin equivalente REST directo)

Ejemplos de indicaciones

Una vez que el servidor esté conectado, haz tu petición a tu agente en lenguaje natural. Este selecciona automáticamente la herramienta adecuada:

  • "Genera un video narrado a partir de este guion con subtítulos y música de fondo" → script_to_video
  • "Sube esta locución y conviértela en un video" → upload_file luego voiceover_to_video
  • "Crea una imagen de un auto deportivo rojo al atardecer" → generate_image
  • "Crea una entidad de producto a partir de esta imagen de pack-shot" → upload_file / open_uploader, luego create_entity + add_entity_reference
  • "Lee este texto en voz alta con un tono calmado" → list_tts_voices luego text_to_speech
  • "Mejora la resolución de este video" → upload_file luego upscale_video
  • "Exporta mi proyecto como MP4" → export_project
  • "Añade música de fondo y un logotipo a mi proyecto" → remix_project
  • "¿A qué cuenta y equipo pertenece esta clave de API?" → get_me

Documentación MCP

VideoGen también aloja un servidor MCP de documentación de solo lectura que permite a los clientes de IA consultar la documentación de la API en tiempo real. Responde preguntas sobre la API pero no la invoca. Conéctalo junto con (o en lugar de) el servidor de API:

{
  "mcpServers": {
    "videogen-docs": {
      "url": "https://docs.videogen.io/_mcp/server"
    }
  }
}

Enlaces