Skip to main content
Glama

create_short

Create AI-generated short-form video clips from a YouTube video or uploaded file. Returns a request ID instantly. Processing takes 5-30 minutes. Costs 1 credit.

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": {
      "start": "<start>",
      "end": "<end>"
    },
    "name": "create_short"
  }
}

Input Schema

NameRequiredDescriptionDefault
endYesEnd time in seconds (> start, max 1200s window)
urlNoYouTube video URL
musicNoAdd background music
startYesStart time in seconds (>= 0)
layoutNoVideo framing layoutauto
ctaTextNoCTA text (max 200 chars, required when ctaEnabled=true)
fileUrlNoPublic video file URL (alternative to url)
languageNoSpoken language (ISO 639-1)en
memeHookNoPrepend a meme hook clip (2-5s attention grabber)
gameVideoNoAdd split-screen gameplay overlay
hookTitleNoAdd animated hook title at start
maxShortsNoMaximum number of shorts to create (1-12). Keeps the highest-scoring clips and never pads, so short videos may return fewer. Omit to get up to 12.
musicNameNoExact track name from list_music (case-sensitive)
outroTextNoCustom outro text (max 80 chars). Omit for the localized default ("Please subscribe"). Requires outroEnabled=true.
ctaEnabledNoShow call-to-action text overlay
musicNamesNoSeveral exact track names from list_music (case-sensitive); each short uses one of them at random. Use instead of musicName. Requires music=true.
noClippingNoSkip AI clipping, process entire range as one clip
outroStingNoPlay the short bell sound on the outro (default true). Requires outroEnabled=true.
templateIdNoCaption template ID from list_templates (24-char hex)
webhookUrlNoOptional webhook URL for completion/failure notifications. Receives a POST with results when processing finishes.
musicVolumeNoMusic volume 0-100
outroHandleNoChannel handle shown on the outro card, e.g. "@mychannel" (max 40 chars). Requires outroEnabled=true.
memeHookNameNoExact meme hook name from list_meme_hooks (case-sensitive)
outroEnabledNoAppend an end-screen outro card (bell animation + "Please subscribe" text) after each clip. Default false.
outroSecondsNoOutro duration in seconds (1-3, default 2). Requires outroEnabled=true.
gameVideoNameNoExact game video name from list_game_videos (case-sensitive)
outroImageUrlNoPublic image URL for a custom outro card instead of the stock bell card. Requires outroEnabled=true.
blurBackgroundNoBackground behind the clip when the source does not fill the 9:16 canvas (mainly layout=fit): true = blurred copy of the video, false = solid color (backgroundColor, else the account's saved color, else the template color). Omit to use the account's saved editor preference (default: blurred).
hookTitleStyleNoYour own hook title design. Required when hookTitlePresetId is 'custom', not allowed otherwise. Titles in Korean, Japanese, Chinese, Arabic, Hebrew, Hindi or Thai use a font made for that script.
backgroundColorNoSolid background color as hex, e.g. "#000000". Only with blurBackground=false. Omit to use the account's saved background color, else the template color.
captionLanguageNoCaption language if different from spoken
captionsEnabledNoBurn captions into the clips (default true). Set false for sources that already have captions.
preferredLengthNoTarget clip durationunder60sec
customSourceLinkNoOwn link for the Source line, e.g. "mysite.com/videos" (https:// added if missing, max 300 chars). Requires includeSourceLink=true.
hookTitlePresetIdNoHook title style (requires hookTitle=true). classic-pill (default) = black text on white pills; dark-pill = white on dark pills; bold-outline = white text with black outline; classic = one white box; native = Regular style: plain white left-aligned text like an Instagram caption; editorial = serif with a lime keyword; statement = condensed setup + big payoff; custom = your own design, set in hookTitleStyle. editorial and statement animate in and leave after ~4s; the others stay for the whole clip. See ssemble://hook-title-presets.
includeSourceLinkNoWhen these clips are later scheduled from the Ssemble web app (Share / Calendar), end each caption with "Source: <link>": customSourceLink if set, else the original YouTube video. Omit to use the account's last scheduler choice. Does not change the clips.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • changedInput schema / properties / hookTitlePresetId / description
      Previous value: -"Hook title style (requires hookTitle=true). classic-pill (default) = black text on white pills; dark-pill = white on dark pills; bold-outline = white text with black outline; classic = one white box; native = Regular style: plain white left-aligned text like an Instagram caption; editorial = serif with a lime keyword; statement = condensed setup + big payoff. editorial and statement animate in and leave after ~4s; the others stay for the whole clip. See ssemble://hook-title-presets."New value: +"Hook title style (requires hookTitle=true). classic-pill (default) = black text on white pills; dark-pill = white on dark pills; bold-outline = white text with black outline; classic = one white box; native = Regular style: plain white left-aligned text like an Instagram caption; editorial = serif with a lime keyword; statement = condensed setup + big payoff; custom = your own design, set in hookTitleStyle. editorial and statement animate in and leave after ~4s; the others stay for the whole clip. See ssemble://hook-title-presets."
    • changedInput schema / properties / hookTitlePresetId / enum
      Previous value: -[
      -  "classic-pill",
      -  "dark-pill",
      -  "bold-outline",
      -  "editorial",
      -  "statement",
      -  "classic",
      -  "native"
      -]New value: +[
      +  "classic-pill",
      +  "dark-pill",
      +  "bold-outline",
      +  "editorial",
      +  "statement",
      +  "classic",
      +  "native",
      +  "custom"
      +]
    • addedInput schema / properties / hookTitleStyle
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Your own hook title design. Required when hookTitlePresetId is 'custom', not allowed otherwise. Titles in Korean, Japanese, Chinese, Arabic, Hebrew, Hindi or Thai use a font made for that script.",
      +  "properties": {
      +    "backgroundColor": {
      +      "description": "Box colour as hex (pill and box only). Pill also accepts 'none' for text without a box",
      +      "type": "string"
      +    },
      +    "cornerRadius": {
      +      "description": "Corner roundness: pill 0-60 (default 40), box 0-40 (default 10)",
      +      "type": "number"
      +    },
      +    "fontId": {
      +      "description": "Font id from ssemble://hook-title-fonts (default montserrat-black)",
      +      "type": "string"
      +    },
      +    "fontSize": {
      +      "description": "Text size: pill 30-90 (default 56), box 24-64 (default 40), plain 36-90 (default 58)",
      +      "type": "number"
      +    },
      +    "outlineColor": {
      +      "description": "Outline hex colour, pill only",
      +      "type": "string"
      +    },
      +    "outlineWidth": {
      +      "description": "Text outline 0-12, pill only (0 = none)",
      +      "maximum": 12,
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "shape": {
      +      "description": "pill = a rounded box behind each line; box = one box around the whole title; plain = text only",
      +      "enum": [
      +        "pill",
      +        "box",
      +        "plain"
      +      ],
      +      "type": "string"
      +    },
      +    "textCase": {
      +      "description": "upper = UPPERCASE (default); asis = keep the title as written",
      +      "enum": [
      +        "upper",
      +        "asis"
      +      ],
      +      "type": "string"
      +    },
      +    "textColor": {
      +      "description": "Hex colour like #FFFFFF",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "shape"
      +  ],
      +  "type": "object"
      +}
  2. Changed1 schema field changed
    • changedInput schema / properties / hookTitlePresetId / description
      Previous value: -"Hook title style (requires hookTitle=true). classic-pill (default) = black text on white pills; dark-pill = white on dark pills; bold-outline = white text with black outline; classic = one white box; native = plain white left-aligned text like an Instagram caption; editorial = serif with a lime keyword; statement = condensed setup + big payoff. editorial and statement animate in and leave after ~4s; the others stay for the whole clip. See ssemble://hook-title-presets."New value: +"Hook title style (requires hookTitle=true). classic-pill (default) = black text on white pills; dark-pill = white on dark pills; bold-outline = white text with black outline; classic = one white box; native = Regular style: plain white left-aligned text like an Instagram caption; editorial = serif with a lime keyword; statement = condensed setup + big payoff. editorial and statement animate in and leave after ~4s; the others stay for the whole clip. See ssemble://hook-title-presets."
  3. Changed2 schema fields changed
    • changedInput schema / properties / hookTitlePresetId / description
      Previous value: -"Hook title style (requires hookTitle=true). classic-pill (default) = black text on white pills; dark-pill = white on dark pills; bold-outline = white text with black outline; classic = one white box; editorial = serif with a lime keyword; statement = condensed setup + big payoff. editorial and statement animate in and leave after ~4s; the others stay for the whole clip. See ssemble://hook-title-presets."New value: +"Hook title style (requires hookTitle=true). classic-pill (default) = black text on white pills; dark-pill = white on dark pills; bold-outline = white text with black outline; classic = one white box; native = plain white left-aligned text like an Instagram caption; editorial = serif with a lime keyword; statement = condensed setup + big payoff. editorial and statement animate in and leave after ~4s; the others stay for the whole clip. See ssemble://hook-title-presets."
    • changedInput schema / properties / hookTitlePresetId / enum
      Previous value: -[
      -  "classic-pill",
      -  "dark-pill",
      -  "bold-outline",
      -  "editorial",
      -  "statement",
      -  "classic"
      -]New value: +[
      +  "classic-pill",
      +  "dark-pill",
      +  "bold-outline",
      +  "editorial",
      +  "statement",
      +  "classic",
      +  "native"
      +]
  4. Changed1 schema field changed
    • addedInput schema / properties / hookTitlePresetId
      Added value: +{
      +  "description": "Hook title style (requires hookTitle=true). classic-pill (default) = black text on white pills; dark-pill = white on dark pills; bold-outline = white text with black outline; classic = one white box; editorial = serif with a lime keyword; statement = condensed setup + big payoff. editorial and statement animate in and leave after ~4s; the others stay for the whole clip. See ssemble://hook-title-presets.",
      +  "enum": [
      +    "classic-pill",
      +    "dark-pill",
      +    "bold-outline",
      +    "editorial",
      +    "statement",
      +    "classic"
      +  ],
      +  "type": "string"
      +}
  5. Changed2 schema fields changed
    • addedInput schema / properties / customSourceLink
      Added value: +{
      +  "description": "Own link for the Source line, e.g. \"mysite.com/videos\" (https:// added if missing, max 300 chars). Requires includeSourceLink=true.",
      +  "maxLength": 300,
      +  "type": "string"
      +}
    • addedInput schema / properties / includeSourceLink
      Added value: +{
      +  "description": "When these clips are later scheduled from the Ssemble web app (Share / Calendar), end each caption with \"Source: <link>\": customSourceLink if set, else the original YouTube video. Omit to use the account's last scheduler choice. Does not change the clips.",
      +  "type": "boolean"
      +}
  6. Changed1 schema field changed
    • addedInput schema / properties / musicNames
      Added value: +{
      +  "description": "Several exact track names from list_music (case-sensitive); each short uses one of them at random. Use instead of musicName. Requires music=true.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "maxItems": 20,
      +  "minItems": 1,
      +  "type": "array"
      +}
  7. Changed2 schema fields changed
    • addedInput schema / properties / backgroundColor
      Added value: +{
      +  "description": "Solid background color as hex, e.g. \"#000000\". Only with blurBackground=false. Omit to use the account's saved background color, else the template color.",
      +  "pattern": "^#[0-9a-fA-F]{6}$",
      +  "type": "string"
      +}
    • changedInput schema / properties / blurBackground / description
      Previous value: -"Background behind the clip when the source does not fill the 9:16 canvas (mainly layout=fit): true = blurred copy of the video, false = solid template color. Omit to use the account's saved editor preference (default: blurred)."New value: +"Background behind the clip when the source does not fill the 9:16 canvas (mainly layout=fit): true = blurred copy of the video, false = solid color (backgroundColor, else the account's saved color, else the template color). Omit to use the account's saved editor preference (default: blurred)."
  8. Changed7 schema fields changed
    • addedInput schema / properties / captionsEnabled
      Added value: +{
      +  "default": true,
      +  "description": "Burn captions into the clips (default true). Set false for sources that already have captions.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / outroEnabled
      Added value: +{
      +  "default": false,
      +  "description": "Append an end-screen outro card (bell animation + \"Please subscribe\" text) after each clip. Default false.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / outroHandle
      Added value: +{
      +  "description": "Channel handle shown on the outro card, e.g. \"@mychannel\" (max 40 chars). Requires outroEnabled=true.",
      +  "maxLength": 40,
      +  "type": "string"
      +}
    • addedInput schema / properties / outroImageUrl
      Added value: +{
      +  "description": "Public image URL for a custom outro card instead of the stock bell card. Requires outroEnabled=true.",
      +  "format": "uri",
      +  "type": "string"
      +}
    • addedInput schema / properties / outroSeconds
      Added value: +{
      +  "default": 2,
      +  "description": "Outro duration in seconds (1-3, default 2). Requires outroEnabled=true.",
      +  "maximum": 3,
      +  "minimum": 1,
      +  "type": "integer"
      +}
    • addedInput schema / properties / outroSting
      Added value: +{
      +  "default": true,
      +  "description": "Play the short bell sound on the outro (default true). Requires outroEnabled=true.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / outroText
      Added value: +{
      +  "description": "Custom outro text (max 80 chars). Omit for the localized default (\"Please subscribe\"). Requires outroEnabled=true.",
      +  "maxLength": 80,
      +  "type": "string"
      +}
  9. Changed3 schema fields changed
    • addedInput schema / properties / blurBackground
      Added value: +{
      +  "description": "Background behind the clip when the source does not fill the 9:16 canvas (mainly layout=fit): true = blurred copy of the video, false = solid template color. Omit to use the account's saved editor preference (default: blurred).",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / captionLanguage / enum
      Previous value: -[
      -  "en",
      -  "es",
      -  "fr",
      -  "de",
      -  "it",
      -  "pt",
      -  "ru",
      -  "ja",
      -  "ko",
      -  "zh",
      -  "ar",
      -  "hi",
      -  "tr",
      -  "pl",
      -  "nl",
      -  "sv",
      -  "no",
      -  "da",
      -  "fi",
      -  "cs"
      -]New value: +[
      +  "en",
      +  "es",
      +  "fr",
      +  "de",
      +  "it",
      +  "pt",
      +  "ru",
      +  "ja",
      +  "ko",
      +  "zh",
      +  "ar",
      +  "hi",
      +  "tr",
      +  "pl",
      +  "nl",
      +  "sv",
      +  "no",
      +  "da",
      +  "fi",
      +  "cs",
      +  "vi",
      +  "id",
      +  "fa",
      +  "uk",
      +  "af",
      +  "ca",
      +  "et",
      +  "fo",
      +  "gl",
      +  "is",
      +  "ms",
      +  "sq",
      +  "sw",
      +  "tl",
      +  "ro",
      +  "sk",
      +  "hr",
      +  "sl",
      +  "hu",
      +  "lv",
      +  "lt",
      +  "bs",
      +  "az",
      +  "bg",
      +  "mk",
      +  "sr",
      +  "mt",
      +  "el",
      +  "ne",
      +  "mr",
      +  "ka",
      +  "hy",
      +  "ur",
      +  "he"
      +]
    • changedInput schema / properties / language / enum
      Previous value: -[
      -  "en",
      -  "es",
      -  "fr",
      -  "de",
      -  "it",
      -  "pt",
      -  "ru",
      -  "ja",
      -  "ko",
      -  "zh",
      -  "ar",
      -  "hi",
      -  "tr",
      -  "pl",
      -  "nl",
      -  "sv",
      -  "no",
      -  "da",
      -  "fi",
      -  "cs"
      -]New value: +[
      +  "en",
      +  "es",
      +  "fr",
      +  "de",
      +  "it",
      +  "pt",
      +  "ru",
      +  "ja",
      +  "ko",
      +  "zh",
      +  "ar",
      +  "hi",
      +  "tr",
      +  "pl",
      +  "nl",
      +  "sv",
      +  "no",
      +  "da",
      +  "fi",
      +  "cs",
      +  "vi",
      +  "id",
      +  "fa",
      +  "uk",
      +  "af",
      +  "ca",
      +  "et",
      +  "fo",
      +  "gl",
      +  "is",
      +  "ms",
      +  "sq",
      +  "sw",
      +  "tl",
      +  "ro",
      +  "sk",
      +  "hr",
      +  "sl",
      +  "hu",
      +  "lv",
      +  "lt",
      +  "bs",
      +  "az",
      +  "bg",
      +  "mk",
      +  "sr",
      +  "mt",
      +  "el",
      +  "ne",
      +  "mr",
      +  "ka",
      +  "hy",
      +  "ur",
      +  "he"
      +]
  10. Changed1 schema field changed
    • addedInput schema / properties / maxShorts
      Added value: +{
      +  "description": "Maximum number of shorts to create (1-12). Keeps the highest-scoring clips and never pads, so short videos may return fewer. Omit to get up to 12.",
      +  "maximum": 12,
      +  "minimum": 1,
      +  "type": "integer"
      +}
  11. Changed1 schema field changed
    • addedInput schema / properties / webhookUrl
      Added value: +{
      +  "description": "Optional webhook URL for completion/failure notifications. Receives a POST with results when processing finishes.",
      +  "format": "uri",
      +  "type": "string"
      +}
  12. First observed

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations at all, the description carries the full load and does deliver real behavioral facts: the call is asynchronous (instant request ID), processing takes 5-30 minutes, and it costs 1 credit. It omits failure behavior, whether credits are refunded on failure, public-URL requirements for fileUrl, and rate limits — significant gaps for an expensive 36-parameter mutation.

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?

Three short sentences, front-loaded with purpose and followed by the two facts an agent most needs before committing (latency and cost). Nothing is redundant or padded.

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

Completeness3/5

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

For a tool with 36 parameters, nested objects, 5 enums, no annotations and no output schema, the description is bare-minimum: it never explains the end-to-end flow (create → poll get_status with the request ID) or the credit semantics. It does state the return value is a request ID, which partly covers the missing output schema, but overall it under-supports a tool this complex.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already explains every parameter in detail, including dependencies like musicName coming from list_music and hookTitleStyle requiring hookTitlePresetId='custom'. The description adds no parameter-level meaning beyond that, so the baseline of 3 applies.

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

Purpose4/5

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

States a specific verb and resource (create AI-generated short-form clips) plus the accepted inputs (YouTube video or uploaded file), so an agent can distinguish it from the get_/list_ siblings at a glance. It never names a sibling or contrasts scope explicitly, which keeps it out of 5 territory.

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

Usage Guidelines2/5

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

There is no when-to-use versus when-not-to-use guidance and no mention of alternatives such as get_status for polling or list_music/list_templates for the 'exact name' parameters the schema requires. The async hints ('returns a request ID instantly', '5-30 minutes') only weakly imply a follow-up polling workflow.

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.