Skip to main content
Glama

Slideshow to video

slideshow_to_video

Use when an existing PDF or slide deck should become an editable narrated video, such as a product overview, sales presentation, or training lesson. Upload the file first and pass its fileId; this converts supplied slides rather than creating a slide deck. For avatar narration, pass actorEntityId and optionally avatarQuality. Creates a new project and uses team credits. Returns workflowRunId, projectId, and projectUrl; poll get_workflow_run for progress and downloadUrl after auto-export.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "fileId": "<fileId>"
    },
    "name": "slideshow_to_video"
  }
}

Input Schema

NameRequiredDescriptionDefault
fileIdYesUploaded PDF or slideshow file id.
voiceIdNoCatalog display name (e.g. Matilda) or voice id from list_tts_voices.
languageNoOutput language as a BCP-47 code, such as en, es, or fr.
autoExportNoWhen true (the default), the run stays in progress until an MP4 is ready. Use downloadUrl from the result. Set false only if you will call remix_project and then export_project yourself.
aspectRatioNoOutput aspect ratio as width:height units (not pixels). Example: { width: 16, height: 9 }.
slideScriptsNoOptional narration for each slide, in order.
actorEntityIdNoId of an ACTOR entity (vg_enti_...) with an image reference. When set, narration is delivered by that actor avatar.
avatarQualityNoAvatar generation quality tier. Applies when actorEntityId is provided. Omit to use workspace settings.
slideshowThemeEntityIdNoOptional id of a SLIDESHOW_THEME entity (vg_enti_...) whose reference board defines the shared slide design system. Omit when converting an uploaded deck's original pages; VideoGen derives a theme from those pages in the background.

Output Schema

NameRequiredDescriptionDefault
errorNoError details when status is failed; otherwise null.
statusNoJob status: pending, running, succeeded, failed, or cancelled.
exportIdNoExport id when autoExport succeeded (vg_expo_...).
projectIdYesProject created for this exact workflow attempt (vg_proj_...). A retry creates a different project.
projectUrlYesDeep link to the project created for this exact workflow attempt. Keep it paired with workflowRunId; a retry returns a new URL.
downloadUrlNoSigned MP4 download URL when autoExport succeeded. Give this to the user.
attemptIndexNoCurrent or latest attempt index.
exportFileIdNoFile id of the rendered MP4 when autoExport succeeded.
workflowTypeNoWorkflow type (present after polling).
workflowRunIdYesWorkflow run id (vg_work_...). Keep it paired with this response's projectId and projectUrl; a retry returns a new tuple.
remixActionIdsNoRemix action ids from the start response (empty when none requested).
progressPercentageNoCompletion progress 0-100 (present after polling).
downloadUrlExpiresAtNoUnix expiry for downloadUrl.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed9 schema fields changed
    • removedOutput schema / properties / downloadUrl / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / downloadUrl / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / downloadUrlExpiresAt / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / downloadUrlExpiresAt / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • changedOutput schema / properties / error / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": {},
      -    "properties": {
      -      "code": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Machine-readable error code."
      -      },
      -      "internalErrorCode": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Opaque code for support."
      -      },
      -      "message": {
      -        "description": "Human-readable error description.",
      -        "type": "string"
      -      },
      -      "requirement": {
      -        "anyOf": [
      -          {
      -            "additionalProperties": {},
      -            "properties": {
      -              "details": {
      -                "additionalProperties": {
      -                  "type": "string"
      -                },
      -                "propertyNames": {
      -                  "type": "string"
      -                },
      -                "type": "object"
      -              },
      -              "type": {
      -                "description": "Requirement type (e.g. purchase_add_on).",
      -                "type": "string"
      -              }
      -            },
      -            "required": [
      -              "type"
      -            ],
      -            "type": "object"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "What is needed to resolve the error, when applicable."
      -      }
      -    },
      -    "required": [
      -      "message"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": {},
      +    "properties": {
      +      "code": {
      +        "description": "Machine-readable error code.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "internalErrorCode": {
      +        "description": "Opaque code for support.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "message": {
      +        "description": "Human-readable error description.",
      +        "type": "string"
      +      },
      +      "requirement": {
      +        "anyOf": [
      +          {
      +            "additionalProperties": {},
      +            "properties": {
      +              "details": {
      +                "additionalProperties": {
      +                  "type": "string"
      +                },
      +                "propertyNames": {
      +                  "type": "string"
      +                },
      +                "type": "object"
      +              },
      +              "type": {
      +                "description": "Requirement type (e.g. purchase_add_on).",
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "type"
      +            ],
      +            "type": "object"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "What is needed to resolve the error, when applicable."
      +      }
      +    },
      +    "required": [
      +      "message"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedOutput schema / properties / exportFileId / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / exportFileId / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / exportId / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / exportId / type
      Added value: +[
      +  "string",
      +  "null"
      +]
  2. First observed

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations by disclosing that a new project is created, that team credits are consumed, that auto-export keeps the run in progress until an MP4 exists, and that get_workflow_run must be polled for progress and downloadUrl. It does not discuss permissions, reversibility, or failure modes, so it falls short of a full behavioral profile.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tightly packed sentences, front-loaded with the use case, then prerequisites, options, and return/polling contract. No filler, and each sentence carries distinct operational information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter mutation tool with an output schema, the description covers the trigger, prerequisite, key options, cost side effect, and the async follow-up (poll get_workflow_run, downloadUrl after auto-export). An agent has everything needed to invoke and then track the run.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, so the baseline is 3, but the description adds real meaning: fileId refers to a previously uploaded file, actorEntityId/avatarQuality select avatar narration, and supplied slides (vs generated) determine the output. Voice, language, and slideScripts are left entirely to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb+resource ('existing PDF or slide deck should become an editable narrated video') and immediately distinguishes itself from the deck-creating siblings: 'this converts supplied slides rather than creating a slide deck.' An agent can separate it from script_to_video and storyboard_to_video without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with an explicit 'Use when' trigger plus example scenarios, states the prerequisite ('Upload the file first and pass its fileId'), and gives a conditional path for avatar narration. The only thing missing is explicit when-not guidance, which is largely implied by the create-vs-convert statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.