Skip to main content
Glama

create_topic_short_story

Read-only

Preview a Topic Short story with hook, setup, reveal, and payoff beats, narration, and English Pexels search terms. Narration is written to fill the selected length (about 2.6 words per second). A short supplied script is expanded; a too-long script is packed down to the speaking-pace envelope. A script that already fills the length is kept word for word. Keep topic nouns in the queries (Messi, soccer, football). Prefer on-topic action over unrelated lifestyle B-roll. Put the strongest hook visual first. Generate fail-opens with broader topic-near sports footage if a beat misses on Pexels, then unused clips, then a neutral scenery catalog, then cached or synthesized last-resort clips if the provider is down — never the same clip on every shot when unused footage exists. Does not render. Choose any storyFormat (mini_documentary, myth_check, story_twist, how_it_works, ranking, quiz, scary_story, history_pov, reddit_story, what_if); edit the returned plan before quoting and generating. language writes the narration in en, es, pt, de, fr or hi. sourced (or sourceUrl / sourceUrls / sourceText) researches the topic and plans only claims it can cite. seriesEpisodeId plans an approved series episode. Optional hookTemplateId seeds the topic from Opening hooks (script opening, not Hook captions).

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
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
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.
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.
clipDurationSecondsNoLength of each stock B-roll clip in seconds (2–6, default 3). Not the full short length.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
beatsNoHook, setup, reveal, and payoff beats.
titleNoPlanned title when returned at the top level.
storyPlanNoReviewed plan with title and beats. Pass this to quote_topic_short and generate_topic_short.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed23 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"
      +]
    • 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 / 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/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description usefully reinforces this with 'Does not render.' Beyond that it discloses real behavior: the fail-open chain for Pexels misses, the 2-minute AI-shot deadline fallback to stock, and the never-reuse rule. Mostly about the produced artifact's internals rather than call semantics, but still substantial added context.

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

Conciseness3/5

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

Front-loaded with the key purpose, but the body is a dense wall of text whose final sentence crams many unrelated argument behaviors ('Does not render. Choose any storyFormat...; edit the returned plan...') into one run-on paragraph. Information density is high, but the lack of structure and heavy redundancy with the schema hurt readability.

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 24-parameter, nested-schema tool with an output schema present, the description covers formats, language limits, sourcing, seeding, and rendering behavior adequately. Return values need not be explained given the output schema, but the description could route more clearly between the plan/preview/quote/generate lifecycle.

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 documents all 24 params and the baseline is 3. The description adds some cross-parameter meaning (sourceUrl/Urls/Text imply sourced, storyFormat wins over format, hookTemplateId seeds the topic), but much is restated and the nested storyPlan semantics largely duplicate 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?

The first clause states a specific verb and resource: 'Preview a Topic Short story with hook, setup, reveal, and payoff beats, narration, and English Pexels search terms.' It enumerates the concrete outputs (beats, narration, search terms) and implicitly separates itself from render/generate siblings by noting it 'Does not render.'

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?

Gives clear context: 'edit the returned plan before quoting and generating,' and conditionals for seeded topics ('Required unless hookTemplateId seeds it or seriesEpisodeId supplies it. An explicit topic wins'). However it never states when NOT to use this vs. generate_topic_short or edit_topic_short explicitly, so exclusions are left to inference.

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