Skip to main content
Glama

quote_topic_short

Read-only

Quote a Topic Short. Does not render. Spoken narration is planned to fill the selected length; that does not change the quote (quoted on duration, not word count). captionStyle defaults to spotlight (same seven looks as Story: off, spotlight, impact, highlighter, editorial, boxed, kicker); transitionMode defaults to dynamic. Neither changes the quote. Legacy captionMode values are aliased onto captionStyle. Optional hookTemplateId seeds the topic from Opening hooks (script opening, not a caption look) and does not change the quote. The setup that does change the quote: length, visualStyle cinematic, aiHook (and the recurring characters they bring on story formats), a host (hostNarratorId) and sourced research; language, aspectRatio (9:16, 16:9, 1:1), storyFormat and a cloned voice (voiceCloneId) do not change the price. Cinematic, aiHook, host, sourced and voice clone are paid options, not available on the free short. seriesEpisodeId quotes an approved series episode with its series style.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
topicNoTopic to plan from. Required unless hookTemplateId seeds it or seriesEpisodeId supplies it. An explicit topic wins over either seed.
voiceNoNarration voice id from list_audio_lab_voices. Defaults to the product default voice.
aiHookNoOptional AI hook: the opening shot is an AI clip and abstract beats can get AI stills; the rest stays judged stock. Quoted higher. Any AI shot that misses its 2-minute deadline falls back to the best stock clip. Not available on the free short.
formatNoAlias of storyFormat. storyFormat wins when both are set.
scriptNoOptional supplied narration. If it already fills the selected length it is preserved word for word; if it is too short the planner expands it so speech fills the duration. Too-long scripts are packed down to the speaking-pace envelope (never fail generate for narration length). Maximum 8,192 UTF-8 bytes.
sourcedNoSourced script: research the topic, cite real sources, and soften or drop claims it cannot verify. The finished short carries a Sources card; get_topic_short returns the citations. Implied by sourceUrl, sourceUrls or sourceText. Not available on the free short.
languageNoNarration and caption language: en (English), es (Spanish), pt (Portuguese), de (German), fr (French), hi (Hindi). Default en. The planner writes the script in this language; pass a script already written in it. Stock search terms stay English.en
sourceUrlNoOne https article or page link that grounds a sourced script. Same as a one-item sourceUrls.
storyPlanNoOptional reviewed story from create_topic_short_story. Pass the same plan when quoting and generating; omit to plan automatically. A plan whose narration is too short for the selected length is expanded at generate so speech fills the duration. A too-long plan is packed down; generate never fails for narration length.
charactersNoauto (default) keeps one recurring fictional character consistent across shots on story formats (story_twist, mini_documentary) with cinematic or aiHook; off turns that off. Real people are never generated.
hookBlanksNoFill [bracket] keys from the Opening hooks seed. Example: { "the annoying thing": "soggy leftovers" }. Does not change the quote.
hookIntentNoOptional Opening hooks intent. Browse with list_hook_bank. Ignored when seeding if hookTemplateId is set.
hostLayoutNoWhere the host appears: pip_circle (default), pip_corner, or full frame. Only with hostNarratorId.pip_circle
sourceTextNoPasted article text (200–20,000 characters) that grounds a sourced script.
sourceUrlsNoUp to 3 https links that ground a sourced script. PDF uploads are website-only; paste the text with sourceText instead.
aspectRatioNoFrame size. 9:16 vertical (default), 16:9 landscape, or 1:1 square for feeds.9:16
captionModeNoLegacy Topic Shorts caption mode, accepted for old clients only. current maps to spotlight, hook to impact, phrase to kicker, off to off. Prefer captionStyle.
storyFormatNoStorytelling format: mini_documentary (Mini documentary), myth_check (Myth check), story_twist (Story with a twist), how_it_works (How it works), ranking (Top 5), quiz (Quiz), scary_story (Scary story), history_pov (History POV), reddit_story (Post story), what_if (What if). Defaults to mini_documentary. Each format has its own pacing, cards and music mood.
visualStyleNoVisual style: standard (judged stock footage, default) or cinematic (every shot is an AI keyframe animated to video). Cinematic is quoted higher and takes a few minutes longer. Not available on the free short. Real people and brands are never AI-generated.standard
captionStyleNoTopic Short caption look: off, spotlight (default — each spoken word lights up on a blue highlight), impact (bold outlined caps, two words at a time), highlighter (caps with one yellow key word), editorial (quiet lower-third phrases), boxed (phrases on a rounded dark pill), or kicker (phrase chunks with one oversized cyan word up top). Same seven looks as Story; burned by the API from the voiceover word timings, in the narration language (Hindi uses a Devanagari font). Does not change the quote amount. Caption failure still returns a finished short.spotlight
recipeSourceNoWith recipeGenerationId: part_two makes Part 2 of that short; same_style reuses only its setup for a new topic. Pass the same value when quoting and generating.part_two
voiceCloneIdNoOptional id of one of your ready cloned voices (list_topic_short_voice_clones). Replaces voice. Paid plans only. Shorts narrated with a clone keep the AI-voice disclosure unless it was turned off when the voice was recorded.
hookTemplateIdNoOptional Opening hooks template (catalog id hook_bank). The workspace picker is hidden. Seeds topic or Talking Shorts brief when that field is empty. Fill [brackets] via hookBlanks or by editing the seeded text. This is a script opening, not a caption look (captionStyle). Does not change the quote, consume, or refund.
hostNarratorIdNoOptional recurring host: a Character Films narrator (list_character_film_catalog) who appears lip-synced in the hook and outro. Quoted higher. Not available on the free short.
transitionModeNoClassic current cuts and dissolves, Dynamic punchier motion (default), or Off hard cuts. Does not change the quote.dynamic
captionsEnabledNoLegacy on/off. Prefer captionStyle. false selects Off captions.
durationSecondsNoTarget length of the finished short in seconds (15–180). Spoken narration is written to fill this length. Quoted on this duration, not word count.
seriesEpisodeIdNoOptional approved episode id from queue_topic_short_episodes. Uses that episode as the topic (when topic is empty) and the series style as the setup; explicit arguments still win. The short is linked to the episode. Quoted like any other short.
recipeGenerationIdNoOptional id of one of your earlier Topic Shorts (from generate_topic_short or get_topic_short). Copies its setup: voice, caption look, transitions, format, frame size, length and shot length. Any setting you pass explicitly wins. Never copies the topic, script or plan. Does not change how the short is priced. Pass the same value when quoting and generating.
clipDurationSecondsNoLength of each stock B-roll clip in seconds (2–6, default 3). Not the full short length.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
creditsNoUsage this quote would consume from this month’s generation allowance (internal units).
quoteIdYesQuote id. Pass this to the matching generate tool. Quotes expire.
expiresAtNoISO timestamp when this quote expires.
pricingVersionNoPricing version used for this quote.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed26 schema fields changed
    • addedInput schema / properties / aiHook
      Added value: +{
      +  "description": "Optional AI hook: the opening shot is an AI clip and abstract beats can get AI stills; the rest stays judged stock. Quoted higher. Any AI shot that misses its 2-minute deadline falls back to the best stock clip. Not available on the free short.",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / aspectRatio / description
      Previous value: -"Frame size. 9:16 vertical (default) or 16:9 landscape."New value: +"Frame size. 9:16 vertical (default), 16:9 landscape, or 1:1 square for feeds."
    • changedInput schema / properties / aspectRatio / enum
      Previous value: -[
      -  "9:16",
      -  "16:9"
      -]New value: +[
      +  "9:16",
      +  "16:9",
      +  "1:1"
      +]
    • changedInput schema / properties / captionStyle / description
      Previous value: -"Topic Short caption look: off, spotlight (default — each spoken word lights up on a blue highlight), impact (bold outlined caps, two words at a time), highlighter (caps with one yellow key word), editorial (quiet lower-third phrases), boxed (phrases on a rounded dark pill), or kicker (phrase chunks with one oversized cyan word up top). Same seven looks as Story; burned by the API from the voiceover word timings. English only. Does not change the quote amount. Caption failure still returns a finished short."New value: +"Topic Short caption look: off, spotlight (default — each spoken word lights up on a blue highlight), impact (bold outlined caps, two words at a time), highlighter (caps with one yellow key word), editorial (quiet lower-third phrases), boxed (phrases on a rounded dark pill), or kicker (phrase chunks with one oversized cyan word up top). Same seven looks as Story; burned by the API from the voiceover word timings, in the narration language (Hindi uses a Devanagari font). Does not change the quote amount. Caption failure still returns a finished short."
    • addedInput schema / properties / characters
      Added value: +{
      +  "description": "auto (default) keeps one recurring fictional character consistent across shots on story formats (story_twist, mini_documentary) with cinematic or aiHook; off turns that off. Real people are never generated.",
      +  "enum": [
      +    "auto",
      +    "off"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / clipDurationSeconds / default
      Previous value: -5New value: +3
    • changedInput schema / properties / clipDurationSeconds / description
      Previous value: -"Length of each stock B-roll clip in seconds (2–6, default 5). Not the full short length."New value: +"Length of each stock B-roll clip in seconds (2–6, default 3). Not the full short length."
    • addedInput schema / properties / format
      Added value: +{
      +  "description": "Alias of storyFormat. storyFormat wins when both are set.",
      +  "enum": [
      +    "mini_documentary",
      +    "myth_check",
      +    "story_twist",
      +    "how_it_works",
      +    "ranking",
      +    "quiz",
      +    "scary_story",
      +    "history_pov",
      +    "reddit_story",
      +    "what_if"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / hostLayout
      Added value: +{
      +  "default": "pip_circle",
      +  "description": "Where the host appears: pip_circle (default), pip_corner, or full frame. Only with hostNarratorId.",
      +  "enum": [
      +    "pip_circle",
      +    "pip_corner",
      +    "full"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / hostNarratorId
      Added value: +{
      +  "description": "Optional recurring host: a Character Films narrator (list_character_film_catalog) who appears lip-synced in the hook and outro. Quoted higher. Not available on the free short.",
      +  "enum": [
      +    "pip",
      +    "mo",
      +    "lulu",
      +    "hazel",
      +    "otto",
      +    "rose",
      +    "bo",
      +    "sage",
      +    "wren",
      +    "kiko",
      +    "tally",
      +    "nib",
      +    "chalk",
      +    "rio",
      +    "juno",
      +    "yumi",
      +    "kenji",
      +    "dot",
      +    "patch",
      +    "ada",
      +    "marlo",
      +    "ollie",
      +    "zara",
      +    "barnaby",
      +    "momo",
      +    "bea",
      +    "rex",
      +    "nova",
      +    "gus",
      +    "tock",
      +    "fern",
      +    "duke",
      +    "lumi",
      +    "taro",
      +    "oya",
      +    "bolt",
      +    "reginald",
      +    "pepper",
      +    "lola",
      +    "moss",
      +    "noor",
      +    "arlo",
      +    "mei",
      +    "chip",
      +    "bruno",
      +    "stella",
      +    "kai",
      +    "plume",
      +    "grumble",
      +    "quill"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / language
      Added value: +{
      +  "default": "en",
      +  "description": "Narration and caption language: en (English), es (Spanish), pt (Portuguese), de (German), fr (French), hi (Hindi). Default en. The planner writes the script in this language; pass a script already written in it. Stock search terms stay English.",
      +  "enum": [
      +    "en",
      +    "es",
      +    "pt",
      +    "de",
      +    "fr",
      +    "hi"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / recipeGenerationId
      Added value: +{
      +  "description": "Optional id of one of your earlier Topic Shorts (from generate_topic_short or get_topic_short). Copies its setup: voice, caption look, transitions, format, frame size, length and shot length. Any setting you pass explicitly wins. Never copies the topic, script or plan. Does not change how the short is priced. Pass the same value when quoting and generating.",
      +  "type": "string"
      +}
    • addedInput schema / properties / recipeSource
      Added value: +{
      +  "default": "part_two",
      +  "description": "With recipeGenerationId: part_two makes Part 2 of that short; same_style reuses only its setup for a new topic. Pass the same value when quoting and generating.",
      +  "enum": [
      +    "part_two",
      +    "same_style"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / seriesEpisodeId
      Added value: +{
      +  "description": "Optional approved episode id from queue_topic_short_episodes. Uses that episode as the topic (when topic is empty) and the series style as the setup; explicit arguments still win. The short is linked to the episode. Quoted like any other short.",
      +  "type": "string"
      +}
    • addedInput schema / properties / sourceText
      Added value: +{
      +  "description": "Pasted article text (200–20,000 characters) that grounds a sourced script.",
      +  "maxLength": 20000,
      +  "type": "string"
      +}
    • addedInput schema / properties / sourceUrl
      Added value: +{
      +  "description": "One https article or page link that grounds a sourced script. Same as a one-item sourceUrls.",
      +  "type": "string"
      +}
    • addedInput schema / properties / sourceUrls
      Added value: +{
      +  "description": "Up to 3 https links that ground a sourced script. PDF uploads are website-only; paste the text with sourceText instead.",
      +  "items": {
      +    "description": "An https article or page link.",
      +    "type": "string"
      +  },
      +  "maxItems": 3,
      +  "type": "array"
      +}
    • addedInput schema / properties / sourced
      Added value: +{
      +  "description": "Sourced script: research the topic, cite real sources, and soften or drop claims it cannot verify. The finished short carries a Sources card; get_topic_short returns the citations. Implied by sourceUrl, sourceUrls or sourceText. Not available on the free short.",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / storyFormat / description
      Previous value: -"Storytelling format: mini_documentary, myth_check, story_twist, or how_it_works. Defaults to mini_documentary."New value: +"Storytelling format: mini_documentary (Mini documentary), myth_check (Myth check), story_twist (Story with a twist), how_it_works (How it works), ranking (Top 5), quiz (Quiz), scary_story (Scary story), history_pov (History POV), reddit_story (Post story), what_if (What if). Defaults to mini_documentary. Each format has its own pacing, cards and music mood."
    • changedInput schema / properties / storyFormat / enum
      Previous value: -[
      -  "mini_documentary",
      -  "myth_check",
      -  "story_twist",
      -  "how_it_works"
      -]New value: +[
      +  "mini_documentary",
      +  "myth_check",
      +  "story_twist",
      +  "how_it_works",
      +  "ranking",
      +  "quiz",
      +  "scary_story",
      +  "history_pov",
      +  "reddit_story",
      +  "what_if"
      +]
    • changedInput schema / properties / storyPlan / properties / beats / items / properties / narration / description
      Previous value: -"Spoken line for this beat. Combined beats fill the selected length at about 2.3 words per second."New value: +"Spoken line for this beat. Combined beats fill the selected length at about 2.6 words per second."
    • changedInput schema / properties / storyPlan / properties / format / enum
      Previous value: -[
      -  "mini_documentary",
      -  "myth_check",
      -  "story_twist",
      -  "how_it_works"
      -]New value: +[
      +  "mini_documentary",
      +  "myth_check",
      +  "story_twist",
      +  "how_it_works",
      +  "ranking",
      +  "quiz",
      +  "scary_story",
      +  "history_pov",
      +  "reddit_story",
      +  "what_if"
      +]
    • changedInput schema / properties / topic / description
      Previous value: -"Topic to plan from. Optional when hookTemplateId seeds it. An explicit topic wins over the Opening hooks seed."New value: +"Topic to plan from. Required unless hookTemplateId seeds it or seriesEpisodeId supplies it. An explicit topic wins over either seed."
    • addedInput schema / properties / visualStyle
      Added value: +{
      +  "default": "standard",
      +  "description": "Visual style: standard (judged stock footage, default) or cinematic (every shot is an AI keyframe animated to video). Cinematic is quoted higher and takes a few minutes longer. Not available on the free short. Real people and brands are never AI-generated.",
      +  "enum": [
      +    "standard",
      +    "cinematic"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / voiceCloneId
      Added value: +{
      +  "description": "Optional id of one of your ready cloned voices (list_topic_short_voice_clones). Replaces voice. Paid plans only. Shorts narrated with a clone keep the AI-voice disclosure unless it was turned off when the voice was recorded.",
      +  "type": "string"
      +}
    • removedInput schema / required
      Removed value: -[
      -  "topic"
      -]
  2. Changed2 schema fields changed
    • changedInput schema / properties / storyPlan / properties / beats / items / properties / searchTerms / description
      Previous value: -"English Pexels queries for this beat. Keep the topic’s concrete nouns (people, places, sports, objects). Relatable faces, hands, and motion when they belong to that topic — not generic stock abstraction. English only. Put the strongest on-topic visual first (hook beat plays in the first 1.2s). Later terms should be broader on-topic fallbacks (soccer / football / stadium, not cooking or cafe). Generate fail-opens with topic-near sports footage before lifestyle catalog if Pexels misses, and still ships last-resort clips if Pexels is down. Distinct clips per shot and per beat; identical reuse is last resort."New value: +"English Pexels queries for this beat. Name what this narration is saying (people, places, objects, actions), then the topic. Relatable faces, hands, and motion only when they belong to that spoken line — not a reused talking-head or walking-street clip. English only. Put the strongest visual for this line first (hook beat plays in the first 1.2s). Later terms should be broader on-topic fallbacks (soccer / football / stadium, not cooking or cafe). Generate searches this beat’s narration first, then topic-near sports footage, then lifestyle catalog if Pexels misses, and still ships last-resort clips if Pexels is down. Distinct clips per shot and per beat; identical reuse is last resort."
    • changedInput schema / properties / storyPlan / properties / beats / items / properties / searchTerms / items / description
      Previous value: -"One English Pexels query for this beat (people, places, sports, or objects named in the topic)."New value: +"One English Pexels query for this beat (people, places, objects, or actions named in this spoken line)."
  3. First observed

TDQS

A4.3/5.0
Behavior4/5

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

Annotations are minimal (readOnlyHint=true, destructiveHint=false), so the description carries the load and delivers real behavioral context: what changes the quote vs. what doesn't, which options are paid and unavailable on the free short, and that a caption failure still returns a finished short. It stops short of permissions/auth or refund semantics beyond a passing 'consume, or refund' mention.

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

Conciseness4/5

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

Front-loaded with purpose and the non-render constraint, then grouped by pricing relevance, so the structure is purposeful rather than rambling. It is dense and repeats 'does not change the quote' several times, but each instance earns its place by mapping a specific parameter group to pricing.

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

Completeness4/5

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

For a 30-parameter tool with nested objects and an existing output schema, the description supplies the conceptual model an agent needs: pricing drivers, paid/free tier gating, seeding precedence (topic vs hookTemplateId vs seriesEpisodeId), and the quote-vs-generate handoff. It omits any mention of the edit quote sibling and does not address auth or rate limits.

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 100%, so baseline is 3; the description adds a genuine layer the schema lacks by classifying parameters into quote-affecting (length, visualStyle cinematic, aiHook, host, sourced research, voice clone) versus quote-neutral (language, aspectRatio, storyFormat, captionStyle, transitionMode). It also flags that legacy captionMode is aliased onto captionStyle, aiding correct invocation.

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 specific verb+resource ('Quote a Topic Short') and immediately adds the disambiguating constraint 'Does not render', which cleanly separates it from generate_topic_short. An agent can tell what it produces (a price estimate) without opening the schema.

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

Usage Guidelines4/5

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

The 'Does not render' clause and the repeated 'does not change the quote' framing give clear context for using this as a cost-preview step before generation. It never explicitly names generate_topic_short as the alternative or states when-not to use it, and it does not distinguish from the sibling quote_topic_short_edit.

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.

Resources