Skip to main content
Glama

Prepare an advert plan with Soclo skills

soclo_host_plan_prepare
Idempotent

Prepare an advert with Soclo’s selected skills, then author it in this host. Supply the brief and selections in either input (source-free: actors/references/voices empty) or selectedInput (exact ids and versions of selected Library/Brand Kit images and saved actors), plus clientRequestId. Returns guideEntries (selected skill documents and guide identities), planningPacket and authoringContract; carry catalogueVersion and guides unchanged into soclo_host_plan_import or soclo_host_plan_import_selected. Spends no credits and makes no quote, reservation or render call; if skill selection is unavailable, guides:[] is returned as a fallback. Read the connected brand and Library and use returned facts and versions verbatim. For a saved Soclo-hosted voice, play its audition with soclo_hosted_voices_preview and show previewText from soclo_hosted_voices_design_status before binding; autoload actor voices with soclo_hosted_voices_autoload into selectedInput.voices[].actorVoice.

Input Schema

NameRequiredDescriptionDefault
inputNo
formatNoMain-track film planning. Motion is available only on its separately admitted route.
selectedInputNo
clientRequestIdYes
catalogueVersionNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed8 schema fields changed
    • changedInput schema / properties / clientRequestId / pattern
      Previous value: -"^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"New value: +"^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"
    • changedInput schema / properties / selectedInput / properties / actors / items / properties / actorVersion / pattern
      Previous value: -"^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"New value: +"^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"
    • changedInput schema / properties / selectedInput / properties / actors / items / properties / id / pattern
      Previous value: -"^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"New value: +"^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"
    • changedInput schema / properties / selectedInput / properties / references / items / properties / id / pattern
      Previous value: -"^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"New value: +"^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"
    • changedInput schema / properties / selectedInput / properties / voices / items / properties / actorVoice / properties / actorId / pattern
      Previous value: -"^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"New value: +"^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"
    • changedInput schema / properties / selectedInput / properties / voices / items / properties / actorVoice / properties / actorVersion / pattern
      Previous value: -"^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"New value: +"^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"
    • changedInput schema / properties / selectedInput / properties / voices / items / properties / actorVoice / properties / bindingVersion / pattern
      Previous value: -"^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"New value: +"^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"
    • changedInput schema / properties / selectedInput / properties / voices / items / properties / actorVoice / properties / ownerId / pattern
      Previous value: -"^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"New value: +"^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"
  2. Changed3 schema fields changed
    • changedInput schema / properties / selectedInput / properties / actors / items / properties / referenceIds / description
      Previous value: -"Empty; MAIN resolves actor images itself."New value: +"Empty; Soclo finds the actor’s own photos itself."
    • changedInput schema / properties / selectedInput / properties / references / items / properties / mediaVersion / description
      Previous value: -"Exact current asset updated_at; MAIN checks version and reviewed evidence."New value: +"Exact current asset updated_at; Soclo checks it is still the current version."
    • changedInput schema / properties / selectedInput / properties / voices / description
      Previous value: -"Exact Soclo-hosted selection from soclo_hosted_voices_autoload after the owner hears its private audition and transcript. MAIN revalidates the original owner, actor and binding before new work."New value: +"Exact Soclo-hosted selection from soclo_hosted_voices_autoload after the owner hears its private audition and transcript. Soclo checks the owner, actor and voice again before new work."
  3. Changed53 schema fields changed
    • addedInput schema / definitions
      Added value: +{
      +  "s1": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "aspectRatio": {
      +        "description": "For example \"9:16\" or \"1:1\".",
      +        "type": "string"
      +      },
      +      "durationMode": {
      +        "description": "\"target\" requires a positive durationSeconds. Omitted keeps historical exact semantics.",
      +        "enum": [
      +          "target",
      +          "exact"
      +        ],
      +        "type": "string"
      +      },
      +      "durationSeconds": {
      +        "description": "Positive seconds, or null for no fixed length.",
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "exactLines": {
      +        "description": "Lines that must appear word-for-word in the spoken dialogue.",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "language": {
      +        "type": "string"
      +      },
      +      "productionNotes": {
      +        "type": "string"
      +      },
      +      "resolution": {
      +        "description": "Leave unset to use the chosen model’s default resolution.",
      +        "enum": [
      +          "480p",
      +          "720p",
      +          "768p",
      +          "1080p",
      +          "2k",
      +          "4k"
      +        ],
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "aspectRatio",
      +      "durationSeconds",
      +      "language",
      +      "exactLines",
      +      "productionNotes"
      +    ],
      +    "type": "object"
      +  },
      +  "s2": {
      +    "anyOf": [
      +      {
      +        "additionalProperties": false,
      +        "properties": {
      +          "tileId": {
      +            "description": "The chosen look’s tile id, exactly as the catalogue spells it.",
      +            "maxLength": 120,
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "tileVersion": {
      +            "description": "The tile version that id was chosen at.",
      +            "maximum": 9007199254740991,
      +            "minimum": -9007199254740991,
      +            "type": "integer"
      +          }
      +        },
      +        "required": [
      +          "tileId",
      +          "tileVersion"
      +        ],
      +        "type": "object"
      +      },
      +      {
      +        "type": "null"
      +      }
      +    ],
      +    "description": "The owner-facing look to plan against. Null or omitted means no template."
      +  },
      +  "s3": {
      +    "additionalProperties": false,
      +    "description": "Read the connected brand with soclo_brand_get and carry it here; do not invent brand facts.",
      +    "properties": {
      +      "enabled": {
      +        "type": "boolean"
      +      },
      +      "facts": {
      +        "description": "Brand facts the plan may rely on. Empty is allowed.",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "name": {
      +        "type": "string"
      +      },
      +      "visualDirection": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "enabled",
      +      "name",
      +      "facts",
      +      "visualDirection"
      +    ],
      +    "type": "object"
      +  },
      +  "s4": {
      +    "anyOf": [
      +      {
      +        "enum": [
      +          "wan3prime",
      +          "seedance25",
      +          "minimaxh3max",
      +          "kling3",
      +          "kling3pro",
      +          "veo31fast",
      +          "veo31",
      +          "veo31lite",
      +          "veo31lite720"
      +        ],
      +        "type": "string"
      +      },
      +      {
      +        "type": "null"
      +      }
      +    ],
      +    "default": null,
      +    "description": "A supported video model to preserve, or null/omitted for automatic model selection."
      +  },
      +  "s5": {
      +    "description": "\"advanced\" keeps an explicit modelId; when no model is named, either mode uses automatic selection.",
      +    "enum": [
      +      "easy",
      +      "advanced"
      +    ],
      +    "type": "string"
      +  },
      +  "s6": {
      +    "const": "manual",
      +    "description": "Always \"manual\" here. Autopilot is a server-owned source and is not importable by a host.",
      +    "type": "string"
      +  }
      +}
    • addedInput schema / properties / input / properties / brand / $ref
      Added value: +"#/definitions/s3"
    • removedInput schema / properties / input / properties / brand / additionalProperties
      Removed value: -false
    • removedInput schema / properties / input / properties / brand / description
      Removed value: -"Read the connected brand with soclo_brand_get and carry it here; do not invent brand facts."
    • removedInput schema / properties / input / properties / brand / properties
      Removed value: -{
      -  "enabled": {
      -    "type": "boolean"
      -  },
      -  "facts": {
      -    "description": "Brand facts the plan may rely on. Empty is allowed.",
      -    "items": {
      -      "type": "string"
      -    },
      -    "type": "array"
      -  },
      -  "name": {
      -    "type": "string"
      -  },
      -  "visualDirection": {
      -    "type": "string"
      -  }
      -}
    • removedInput schema / properties / input / properties / brand / required
      Removed value: -[
      -  "enabled",
      -  "name",
      -  "facts",
      -  "visualDirection"
      -]
    • removedInput schema / properties / input / properties / brand / type
      Removed value: -"object"
    • addedInput schema / properties / input / properties / constraints / $ref
      Added value: +"#/definitions/s1"
    • removedInput schema / properties / input / properties / constraints / additionalProperties
      Removed value: -false
    • removedInput schema / properties / input / properties / constraints / properties
      Removed value: -{
      -  "aspectRatio": {
      -    "description": "For example \"9:16\" or \"1:1\".",
      -    "type": "string"
      -  },
      -  "durationMode": {
      -    "description": "\"target\" requires a positive durationSeconds. Omitted keeps historical exact semantics.",
      -    "enum": [
      -      "target",
      -      "exact"
      -    ],
      -    "type": "string"
      -  },
      -  "durationSeconds": {
      -    "description": "Positive seconds, or null for no fixed length.",
      -    "type": [
      -      "number",
      -      "null"
      -    ]
      -  },
      -  "exactLines": {
      -    "description": "Lines that must appear word-for-word in the spoken dialogue.",
      -    "items": {
      -      "type": "string"
      -    },
      -    "type": "array"
      -  },
      -  "language": {
      -    "type": "string"
      -  },
      -  "productionNotes": {
      -    "type": "string"
      -  },
      -  "resolution": {
      -    "description": "Leave unset to use the chosen model’s default resolution.",
      -    "enum": [
      -      "480p",
      -      "720p",
      -      "768p",
      -      "1080p",
      -      "2k",
      -      "4k"
      -    ],
      -    "type": "string"
      -  }
      -}
    • removedInput schema / properties / input / properties / constraints / required
      Removed value: -[
      -  "aspectRatio",
      -  "durationSeconds",
      -  "language",
      -  "exactLines",
      -  "productionNotes"
      -]
    • removedInput schema / properties / input / properties / constraints / type
      Removed value: -"object"
    • addedInput schema / properties / input / properties / mode / $ref
      Added value: +"#/definitions/s5"
    • removedInput schema / properties / input / properties / mode / description
      Removed value: -"\"advanced\" keeps an explicit modelId; when no model is named, either mode uses automatic selection."
    • removedInput schema / properties / input / properties / mode / enum
      Removed value: -[
      -  "easy",
      -  "advanced"
      -]
    • removedInput schema / properties / input / properties / mode / type
      Removed value: -"string"
    • addedInput schema / properties / input / properties / modelId / $ref
      Added value: +"#/definitions/s4"
    • removedInput schema / properties / input / properties / modelId / anyOf
      Removed value: -[
      -  {
      -    "enum": [
      -      "wan3prime",
      -      "seedance25",
      -      "minimaxh3max",
      -      "kling3",
      -      "kling3pro",
      -      "veo31fast",
      -      "veo31",
      -      "veo31lite",
      -      "veo31lite720"
      -    ],
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / input / properties / modelId / default
      Removed value: -null
    • removedInput schema / properties / input / properties / modelId / description
      Removed value: -"A supported video model to preserve, or null/omitted for automatic model selection."
    • addedInput schema / properties / input / properties / source / $ref
      Added value: +"#/definitions/s6"
    • removedInput schema / properties / input / properties / source / const
      Removed value: -"manual"
    • removedInput schema / properties / input / properties / source / description
      Removed value: -"Always \"manual\" here. Autopilot is a server-owned source and is not importable by a host."
    • removedInput schema / properties / input / properties / source / type
      Removed value: -"string"
    • addedInput schema / properties / input / properties / template / $ref
      Added value: +"#/definitions/s2"
    • removedInput schema / properties / input / properties / template / anyOf
      Removed value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "tileId": {
      -        "description": "The chosen look’s tile id, exactly as the catalogue spells it.",
      -        "maxLength": 120,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "tileVersion": {
      -        "description": "The tile version that id was chosen at.",
      -        "maximum": 9007199254740991,
      -        "minimum": -9007199254740991,
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "tileId",
      -      "tileVersion"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / input / properties / template / description
      Removed value: -"The owner-facing look to plan against. Null or omitted means no template."
    • addedInput schema / properties / selectedInput / properties / brand / $ref
      Added value: +"#/definitions/s3"
    • removedInput schema / properties / selectedInput / properties / brand / additionalProperties
      Removed value: -false
    • removedInput schema / properties / selectedInput / properties / brand / description
      Removed value: -"Read the connected brand with soclo_brand_get and carry it here; do not invent brand facts."
    • removedInput schema / properties / selectedInput / properties / brand / properties
      Removed value: -{
      -  "enabled": {
      -    "type": "boolean"
      -  },
      -  "facts": {
      -    "description": "Brand facts the plan may rely on. Empty is allowed.",
      -    "items": {
      -      "type": "string"
      -    },
      -    "type": "array"
      -  },
      -  "name": {
      -    "type": "string"
      -  },
      -  "visualDirection": {
      -    "type": "string"
      -  }
      -}
    • removedInput schema / properties / selectedInput / properties / brand / required
      Removed value: -[
      -  "enabled",
      -  "name",
      -  "facts",
      -  "visualDirection"
      -]
    • removedInput schema / properties / selectedInput / properties / brand / type
      Removed value: -"object"
    • addedInput schema / properties / selectedInput / properties / constraints / $ref
      Added value: +"#/definitions/s1"
    • removedInput schema / properties / selectedInput / properties / constraints / additionalProperties
      Removed value: -false
    • removedInput schema / properties / selectedInput / properties / constraints / properties
      Removed value: -{
      -  "aspectRatio": {
      -    "description": "For example \"9:16\" or \"1:1\".",
      -    "type": "string"
      -  },
      -  "durationMode": {
      -    "description": "\"target\" requires a positive durationSeconds. Omitted keeps historical exact semantics.",
      -    "enum": [
      -      "target",
      -      "exact"
      -    ],
      -    "type": "string"
      -  },
      -  "durationSeconds": {
      -    "description": "Positive seconds, or null for no fixed length.",
      -    "type": [
      -      "number",
      -      "null"
      -    ]
      -  },
      -  "exactLines": {
      -    "description": "Lines that must appear word-for-word in the spoken dialogue.",
      -    "items": {
      -      "type": "string"
      -    },
      -    "type": "array"
      -  },
      -  "language": {
      -    "type": "string"
      -  },
      -  "productionNotes": {
      -    "type": "string"
      -  },
      -  "resolution": {
      -    "description": "Leave unset to use the chosen model’s default resolution.",
      -    "enum": [
      -      "480p",
      -      "720p",
      -      "768p",
      -      "1080p",
      -      "2k",
      -      "4k"
      -    ],
      -    "type": "string"
      -  }
      -}
    • removedInput schema / properties / selectedInput / properties / constraints / required
      Removed value: -[
      -  "aspectRatio",
      -  "durationSeconds",
      -  "language",
      -  "exactLines",
      -  "productionNotes"
      -]
    • removedInput schema / properties / selectedInput / properties / constraints / type
      Removed value: -"object"
    • addedInput schema / properties / selectedInput / properties / mode / $ref
      Added value: +"#/definitions/s5"
    • removedInput schema / properties / selectedInput / properties / mode / description
      Removed value: -"\"advanced\" keeps an explicit modelId; when no model is named, either mode uses automatic selection."
    • removedInput schema / properties / selectedInput / properties / mode / enum
      Removed value: -[
      -  "easy",
      -  "advanced"
      -]
    • removedInput schema / properties / selectedInput / properties / mode / type
      Removed value: -"string"
    • addedInput schema / properties / selectedInput / properties / modelId / $ref
      Added value: +"#/definitions/s4"
    • removedInput schema / properties / selectedInput / properties / modelId / anyOf
      Removed value: -[
      -  {
      -    "enum": [
      -      "wan3prime",
      -      "seedance25",
      -      "minimaxh3max",
      -      "kling3",
      -      "kling3pro",
      -      "veo31fast",
      -      "veo31",
      -      "veo31lite",
      -      "veo31lite720"
      -    ],
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / selectedInput / properties / modelId / default
      Removed value: -null
    • removedInput schema / properties / selectedInput / properties / modelId / description
      Removed value: -"A supported video model to preserve, or null/omitted for automatic model selection."
    • addedInput schema / properties / selectedInput / properties / source / $ref
      Added value: +"#/definitions/s6"
    • removedInput schema / properties / selectedInput / properties / source / const
      Removed value: -"manual"
    • removedInput schema / properties / selectedInput / properties / source / description
      Removed value: -"Always \"manual\" here. Autopilot is a server-owned source and is not importable by a host."
    • removedInput schema / properties / selectedInput / properties / source / type
      Removed value: -"string"
    • addedInput schema / properties / selectedInput / properties / template / $ref
      Added value: +"#/definitions/s2"
    • removedInput schema / properties / selectedInput / properties / template / anyOf
      Removed value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "tileId": {
      -        "description": "The chosen look’s tile id, exactly as the catalogue spells it.",
      -        "maxLength": 120,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "tileVersion": {
      -        "description": "The tile version that id was chosen at.",
      -        "maximum": 9007199254740991,
      -        "minimum": -9007199254740991,
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "tileId",
      -      "tileVersion"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / selectedInput / properties / template / description
      Removed value: -"The owner-facing look to plan against. Null or omitted means no template."
  4. First observed

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare non-read-only, open-world, idempotent and non-destructive behavior. The description adds important context beyond them: no credit spend, no quote/reservation/render call, a guides:[] fallback when skill selection is unavailable, and explicit read-brand/Library instructions, though it still does not fully explain what non-read-only state this preparation persists.

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?

The description is dense but front-loads the purpose, then moves through inputs, outputs, side effects, brand guidance and voice prerequisites. For a complex nested schema it is appropriately sized, though the long middle sentence reduces scanability.

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 complex tool with no output schema and low top-level schema coverage, the description supplies the key return fields, downstream import path, fallback behavior and voice-selection procedure. It is nearly complete for invocation, with the main remaining gap being the exact nature of the non-read-only state it prepares.

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 only 20%, so the description must carry significant parameter meaning. It does well on the major branch between input and selectedInput, clientRequestId, catalogueVersion and selectedInput.voices[].actorVoice, but it leaves several parameters such as format, modelId, constraints, source and mode largely 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?

The description states a specific verb and resource: prepare an advert plan using Soclo’s selected skills, with output guideEntries, planningPacket and authoringContract. It clearly distinguishes this preparation step from the downstream soclo_host_plan_import and soclo_host_plan_import_selected calls.

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?

It explicitly explains the two supported input paths (source-free input vs selectedInput), says to carry catalogueVersion and guides unchanged into the import tools, and gives a specific voice workflow using soclo_hosted_voices_preview, soclo_hosted_voices_design_status and soclo_hosted_voices_autoload. This is actionable when-to-use and next-step guidance rather than implied usage.

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