Skip to main content
Glama

Create a project

generate_script
Destructive

Spends from the organization's balance by default, behind the same gates the human passes (the org's quota, the daily free-action cap and the balance): with production.auto_produce=true (the default) the whole production line runs without further calls. Creates a NEW project from an idea and launches it — the creation→edition crossing (a project is a conversation that starts from an idea). By default the same production line the human's button runs takes the piece to the final video: script → studio build → final render; publishing is not part of it. The script (first station) is written before the balance is checked and settles with the first render; the studio build and the final render check the balance and stop the line with waitingForFunds when it does not cover them. With auto_produce=false the line stops after the script, so the piece can be edited before production. Returns the project id and the cast as pinned (cast.voice / cast.face with id and @handle); the project status reports progress until finalVideoUrl is set (typically 20-60 min). Requires write. creative_referent: a referent id from the catalogue of formats. Premium formats (requiresSpendConfirmation) also need production.confirm_spend=true.

Input Schema

NameRequiredDescriptionDefault
castNoWho narrates and who appears, in THREE ways that combine: (a) a name from the catalogue of voices and presenters, by `id` or `@handle` (`voice` / `face`) — a name that does not resolve is an error, not a silent fallback; (b) the wanted presenter DESCRIBED in `describe_face`, which casting resolves to the closest face of the catalogue — with enough detail (features, or two of gender/age/ethnicity) it can GENERATE a new one for this piece, which costs money and needs `production.confirm_spend=true`; (c) nothing, and casting decides by ear. `on_camera` puts the presenter on screen. A named `face` wins over `describe_face`.
titleNoOptional project title (else derived from the idea).
sourceNoThe creator's OWN material. `kind=script` + `respect=strict`: the piece narrates the text verbatim (word-level control from the start); `kind=content`: an article or notes the Director adapts (`respect` guided|adaptive). Without it the Director writes from `prompt_seed`.
materialNoThe creator's own uploaded files that belong to this piece (footage, photos, a recorded voice). Each item names one file of the personal library by its `assetId`: the id alone, or an object with `asset_id` and a `purpose` (what the file is for in the piece). The files are stored with the piece; the answer says what the piece does with them (`direction`), and they are not part of the price. While a file is still being verified, the `handle` of its upload is accepted in place of the id, and the request is answered as not ready; a file that is not in the caller's library is answered as not usable.
productionNoThe production settings; without them, the platform defaults apply.
referencesNoThe addresses the creator pointed to, each with the role they give it, apart from the idea. `parecido_a_este`: a video or page whose FORM the piece resembles (pace, tone, format); it is not read as a source of facts and does not close the corpus. `fuente`: the facts come from there; it is read as primary material, like a URL in `prompt_seed`. `otra`: neither is certain; it is read as primary material, as any URL of the request is. The writers receive each one with its role.
prompt_seedNoThe request, in the creator's words. A single idea is enough; a full brief is honored whole: title, thesis, structure and timing, how the piece opens and closes, what it may claim and from which sources, its look and sound, what to avoid, text that appears on screen. The writers and the direction receive it complete, up to 16000 characters; a longer request is rejected, and long reference material travels in `source`. Sources named by URL are read as primary material; when the request states that facts come only from them, nothing outside those sites is used. An address that only shows the form to resemble travels in `references` (`parecido_a_este`), not here.
target_languageNoISO-639-1 of the piece (en, es, pt, …). Default en.
creative_referentYesThe format referent id from Vixdeo's catalogue of formats.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedInput schema / properties / production / properties / acepta_sin_respaldo
      Added value: +{
      +  "description": "True declares that the piece states NO facts (a story, an opinion), so the house writes it even when nothing verifiable is found. Without it, a piece whose research comes back empty and that has no source read, no own text and no heard recording is REFUSED before its script (the editorial run ends with `refusal: sin_respaldo`): give it a source (`references` with role `fuente`, or `source`) or relaunch with this flag. Set it only when the person said so; it does not change the price.",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / production / properties / duration_profile / enum
      Previous value: -[
      -  "short_discovery",
      -  "short_deep",
      -  "watch_bridge",
      -  "watch_standard",
      -  "longform_monetizable",
      -  "longform_feature",
      -  "feature_documentary"
      -]New value: +[
      +  "short_discovery",
      +  "short_deep",
      +  "watch_bridge",
      +  "watch_standard",
      +  "longform_monetizable",
      +  "longform_feature",
      +  "feature_documentary",
      +  "short_feed"
      +]
  2. Changed1 schema field changed
    • changedInput schema / properties / production / properties / piece_composition / description
      Previous value: -"How many narrated scenes the piece has. `escenas` (the default) splits it into the scenes its length calls for. `una_escena` composes the whole piece as ONE narrated scene written by a single author (one object assembled step by step); honoured only in formats that admit it (`pieceComposition.appliesTo` in the catalogue of formats), for pieces of up to 180 s, with the scene author writing, and only for platform operators while the gate is in `operadores` (`pieceComposition.scope`); otherwise the request is recorded and the piece is composed in scenes, with the typed reason in the project status (`pieceComposition.reason`). An experiment: its cost is not measured yet on a long scene; the price quote says whether it is honoured (`pricedRequest.pieceComposition`)."New value: +"How many narrated scenes the piece has. `escenas` (the default) splits it into the scenes its length calls for. `una_escena` composes the whole piece as ONE narrated scene written by a single author (one object assembled step by step); honoured only in formats that admit it (`pieceComposition.appliesTo` in the catalogue of formats), for pieces of up to 180 s, with the scene author writing, and for the accounts its gate admits (`pieceComposition.scope`: `todos` everyone, `operadores` platform operators only, `apagado` nobody; `offeredToYou` says it for the caller); otherwise the request is recorded and the piece is composed in scenes, with the typed reason in the project status (`pieceComposition.reason`). An experiment: its cost is not measured yet on a long scene; the price quote says whether it is honoured (`pricedRequest.pieceComposition`)."
  3. Changed2 schema fields changed
    • changedInput schema / properties / prompt_seed / description
      Previous value: -"The request, in the creator's words. A single idea is enough; a full brief is honored whole: title, thesis, structure and timing, how the piece opens and closes, what it may claim and from which sources, its look and sound, what to avoid, text that appears on screen. The writers and the direction receive it complete, up to 16000 characters; a longer request is rejected, and long reference material travels in `source`. Sources named by URL are read as primary material; when the request states that facts come only from them, nothing outside those sites is used."New value: +"The request, in the creator's words. A single idea is enough; a full brief is honored whole: title, thesis, structure and timing, how the piece opens and closes, what it may claim and from which sources, its look and sound, what to avoid, text that appears on screen. The writers and the direction receive it complete, up to 16000 characters; a longer request is rejected, and long reference material travels in `source`. Sources named by URL are read as primary material; when the request states that facts come only from them, nothing outside those sites is used. An address that only shows the form to resemble travels in `references` (`parecido_a_este`), not here."
    • addedInput schema / properties / references
      Added value: +{
      +  "description": "The addresses the creator pointed to, each with the role they give it, apart from the idea. `parecido_a_este`: a video or page whose FORM the piece resembles (pace, tone, format); it is not read as a source of facts and does not close the corpus. `fuente`: the facts come from there; it is read as primary material, like a URL in `prompt_seed`. `otra`: neither is certain; it is read as primary material, as any URL of the request is. The writers receive each one with its role.",
      +  "items": {
      +    "properties": {
      +      "note": {
      +        "description": "What the creator said about it, in a few words.",
      +        "maxLength": 240,
      +        "type": "string"
      +      },
      +      "role": {
      +        "enum": [
      +          "parecido_a_este",
      +          "fuente",
      +          "otra"
      +        ],
      +        "type": "string"
      +      },
      +      "url": {
      +        "description": "One http(s) address, as the creator pasted it.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "url",
      +      "role"
      +    ],
      +    "type": "object"
      +  },
      +  "maxItems": 12,
      +  "type": "array"
      +}
  4. Changed1 schema field changed
    • addedInput schema / properties / production / properties / subtitle_mode
      Added value: +{
      +  "description": "The burned subtitle track: `transcription` (the narration, default when nobody declares), `translation` (in `subtitle_language`) or `off` (no track: the scene author owns the whole frame and writes the key words into the world).",
      +  "enum": [
      +    "translation",
      +    "transcription",
      +    "off"
      +  ],
      +  "type": "string"
      +}
  5. Changed1 schema field changed
    • addedInput schema / properties / production / properties / piece_composition
      Added value: +{
      +  "description": "How many narrated scenes the piece has. `escenas` (the default) splits it into the scenes its length calls for. `una_escena` composes the whole piece as ONE narrated scene written by a single author (one object assembled step by step); honoured only in formats that admit it (`pieceComposition.appliesTo` in the catalogue of formats), for pieces of up to 180 s, with the scene author writing, and only for platform operators while the gate is in `operadores` (`pieceComposition.scope`); otherwise the request is recorded and the piece is composed in scenes, with the typed reason in the project status (`pieceComposition.reason`). An experiment: its cost is not measured yet on a long scene; the price quote says whether it is honoured (`pricedRequest.pieceComposition`).",
      +  "enum": [
      +    "escenas",
      +    "una_escena"
      +  ],
      +  "type": "string"
      +}
  6. Changed1 schema field changed
    • changedInput schema / properties / material / items / anyOf
      Previous value: -[
      -  {
      -    "description": "The `assetId` of a file of the personal library.",
      -    "type": "string"
      -  },
      -  {
      -    "properties": {
      -      "asset_id": {
      -        "description": "The `assetId` of a file of the personal library.",
      -        "type": "string"
      -      },
      -      "purpose": {
      -        "description": "What the file is for in the piece, e.g. 'the interview that closes the piece'.",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "asset_id"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "description": "The `assetId` of a file of the personal library.",
      +    "type": "string"
      +  },
      +  {
      +    "properties": {
      +      "asset_id": {
      +        "description": "The `assetId` of a file of the personal library.",
      +        "type": "string"
      +      },
      +      "purpose": {
      +        "description": "What the file is for in the piece, e.g. 'the interview that closes the piece'.",
      +        "type": "string"
      +      },
      +      "speaker": {
      +        "description": "Who speaks in the recording: `el_autor` (the creator), `otra_persona` (another real person, not the creator), `nadie` (nobody speaks) or `sin_declarar` (not stated; clears a previous statement). It belongs to the file, so it holds in every piece that uses it.",
      +        "enum": [
      +          "el_autor",
      +          "otra_persona",
      +          "nadie",
      +          "sin_declarar"
      +        ],
      +        "type": "string"
      +      },
      +      "speaker_name": {
      +        "description": "The name of the other person who speaks; only with `speaker: otra_persona`.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "asset_id"
      +    ],
      +    "type": "object"
      +  }
      +]
  7. Changed2 schema fields changed
    • changedInput schema / properties / production / properties / scene_author_profile / description
      Previous value: -"Who writes the data scenes of a format that writes them (`sceneOptions.appliesTo`): `estandar` is the production author; `premium` a costlier one (about three times the per-scene cost, `sceneOptions` gives the measure). Without it the budget tier sets it (`estandar` in every tier). Choosing `premium` requires a spend confirmation."New value: +"Who writes the data scenes of a format that writes them (`sceneOptions.appliesTo`): `estandar` is the production author (Claude Opus 5.5 at the usual effort); `premium` is the same model thinking harder (maximum effort, more time and turns per scene; measured at $4.75-5.36 per scene, about 5-6x the standard author, and 26-30 min per scene — `sceneOptions` gives the measure). Without it the budget tier sets it (`estandar` in every tier). Choosing `premium` requires a spend confirmation."
    • changedInput schema / properties / production / properties / scene_finish / description
      Previous value: -"Photoreal finish of the data scenes: `seedance` restyles each scene's world into generated footage (text and figures stay Vixdeo's own), priced per scene in `sceneOptions`; `ninguno` ships the scene as drawn. Without it the budget tier sets it (`premium` → `seedance`, others → `ninguno`). Honored only where the tier pays for generated video; choosing `seedance` there requires a spend confirmation."New value: +"Photoreal finish of the data scenes: `seedance` restyles each scene's world into generated footage (text and figures stay Vixdeo's own); `ninguno` ships the scene as drawn. Without it: `ninguno` in every tier. The finish is PAUSED by a product decision (2026-10-20) until a new experiment: while `sceneOptions.sceneFinish[].paused` is true, declaring `seedance` is accepted, buys nothing and resolves to `ninguno` with reason `pausado` (the priced request echoes it as `sceneFinishReason`). When not paused it is honored only where the tier pays for generated video, and choosing it there requires a spend confirmation."
  8. Changed2 schema fields changed
    • addedInput schema / properties / production / properties / scene_author_profile
      Added value: +{
      +  "description": "Who writes the data scenes of a format that writes them (`sceneOptions.appliesTo`): `estandar` is the production author; `premium` a costlier one (about three times the per-scene cost, `sceneOptions` gives the measure). Without it the budget tier sets it (`estandar` in every tier). Choosing `premium` requires a spend confirmation.",
      +  "enum": [
      +    "estandar",
      +    "premium"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / production / properties / scene_finish
      Added value: +{
      +  "description": "Photoreal finish of the data scenes: `seedance` restyles each scene's world into generated footage (text and figures stay Vixdeo's own), priced per scene in `sceneOptions`; `ninguno` ships the scene as drawn. Without it the budget tier sets it (`premium` → `seedance`, others → `ninguno`). Honored only where the tier pays for generated video; choosing `seedance` there requires a spend confirmation.",
      +  "enum": [
      +    "ninguno",
      +    "seedance"
      +  ],
      +  "type": "string"
      +}
  9. Changed1 schema field changed
    • changedInput schema / properties / production / properties / budget_tier / description
      Previous value: -"Material budget: economy | standard | premium (premium unlocks generated video)."New value: +"Material budget of THIS piece: economy | standard | premium — which visual sources the piece buys (generated video only under premium). A production setting, chosen per piece."
  10. Changed1 schema field changed
    • changedInput schema / properties / production / properties / target_duration_sec / description
      Previous value: -"Exact target length in seconds, inside the duration_profile's range (e.g. 300 for «five minutes» in watch_standard). Without it the profile's own target governs."New value: +"Exact target length in seconds (e.g. 210 for «3:30»). It governs the duration profile: if it falls outside the profile's range, the profile whose range contains it governs and the response says so (`durationProfileSource: target_duration_sec`, `durationProfileDisplaced` names the profile it replaced). Without a profile it picks the one that contains it. Without it the profile's own target governs."
  11. Changed2 schema fields changed
    • changedInput schema / properties / prompt_seed / description
      Previous value: -"The idea, in the creator's words (topic, angle, what the viewer takes away)."New value: +"The request, in the creator's words. A single idea is enough; a full brief is honored whole: title, thesis, structure and timing, how the piece opens and closes, what it may claim and from which sources, its look and sound, what to avoid, text that appears on screen. The writers and the direction receive it complete, up to 16000 characters; a longer request is rejected, and long reference material travels in `source`. Sources named by URL are read as primary material; when the request states that facts come only from them, nothing outside those sites is used."
    • addedInput schema / properties / prompt_seed / maxLength
      Added value: +16000
  12. Changed1 schema field changed
    • addedInput schema / properties / material
      Added value: +{
      +  "description": "The creator's own uploaded files that belong to this piece (footage, photos, a recorded voice). Each item names one file of the personal library by its `assetId`: the id alone, or an object with `asset_id` and a `purpose` (what the file is for in the piece). The files are stored with the piece; the answer says what the piece does with them (`direction`), and they are not part of the price. While a file is still being verified, the `handle` of its upload is accepted in place of the id, and the request is answered as not ready; a file that is not in the caller's library is answered as not usable.",
      +  "items": {
      +    "anyOf": [
      +      {
      +        "description": "The `assetId` of a file of the personal library.",
      +        "type": "string"
      +      },
      +      {
      +        "properties": {
      +          "asset_id": {
      +            "description": "The `assetId` of a file of the personal library.",
      +            "type": "string"
      +          },
      +          "purpose": {
      +            "description": "What the file is for in the piece, e.g. 'the interview that closes the piece'.",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "asset_id"
      +        ],
      +        "type": "object"
      +      }
      +    ]
      +  },
      +  "type": "array"
      +}
  13. Changed15 schema fields changed
    • changedInput schema / properties / cast / description
      Previous value: -"Who narrates and who appears. THREE ways, and you can mix them: (a) name someone from `list_cast` by `id` or `@handle` (`voice` / `face`) — a name that does not resolve is an error, never a silent fallback; (b) DESCRIBE the presenter you want in `describe_face` and casting picks the closest face from the catalogue — with enough detail (features, or two of gender/age/ethnicity) it can GENERATE a new one for this piece, which costs money and needs `production.confirm_spend=true`; (c) say nothing and the casting decides by ear. `on_camera` puts the presenter on screen. A named `face` wins over `describe_face`."New value: +"Who narrates and who appears, in THREE ways that combine: (a) a name from the catalogue of voices and presenters, by `id` or `@handle` (`voice` / `face`) — a name that does not resolve is an error, not a silent fallback; (b) the wanted presenter DESCRIBED in `describe_face`, which casting resolves to the closest face of the catalogue — with enough detail (features, or two of gender/age/ethnicity) it can GENERATE a new one for this piece, which costs money and needs `production.confirm_spend=true`; (c) nothing, and casting decides by ear. `on_camera` puts the presenter on screen. A named `face` wins over `describe_face`."
    • changedInput schema / properties / cast / properties / describe_face / description
      Previous value: -"The presenter you want, in words, when no catalogue handle fits. Casting resolves it against the catalogue and may generate."New value: +"The wanted presenter, in words, for when no catalogue handle fits. Casting resolves it against the catalogue and may generate one."
    • changedInput schema / properties / cast / properties / face / description
      Previous value: -"Presenter `id` or `@handle` from `list_cast`."New value: +"A presenter `id` or `@handle` from the catalogue of nameable presenters."
    • changedInput schema / properties / cast / properties / voice / description
      Previous value: -"Voice `id` or `@handle` from `list_cast`."New value: +"A voice `id` or `@handle` from the catalogue of nameable voices."
    • changedInput schema / properties / creative_referent / description
      Previous value: -"The format/style referent id (see `list_referents`)."New value: +"The format referent id from Vixdeo's catalogue of formats."
    • changedInput schema / properties / production / description
      Previous value: -"How to produce it. Omit for the platform defaults."New value: +"The production settings; without them, the platform defaults apply."
    • changedInput schema / properties / production / properties / auto_produce / description
      Previous value: -"Run the whole line to the final video (default true)."New value: +"Whether the whole line runs to the final video (default true)."
    • changedInput schema / properties / production / properties / confirm_spend / description
      Previous value: -"Required true for formats that declare `requiresSpendConfirmation` (the wallet must also cover the band: otherwise `insufficient-funds-for-estimate` and no project is created)."New value: +"True confirms the spend of a format that declares `requiresSpendConfirmation`; the wallet also has to cover the band, otherwise the answer is `insufficient-funds-for-estimate` and no project is created."
    • changedInput schema / properties / production / properties / confirmed_request_ref / description
      Previous value: -"Alternative to `confirm_spend`: the `economics.requestRef` that `estimate` returned for THIS exact request — an informed confirmation. A ref of another request is rejected (`spend-not-confirmed`)."New value: +"Alternative to `confirm_spend`: the `economics.requestRef` of the price quote for THIS exact request — an informed confirmation. A ref of another request is rejected (`spend-not-confirmed`)."
    • changedInput schema / properties / production / properties / duration_profile / description
      Previous value: -"Target length profile (see `list_referents.durationProfiles` for seconds)."New value: +"Target length profile (`durationProfiles` in the catalogue of formats gives the seconds)."
    • changedInput schema / properties / production / properties / period_rigor / description
      Previous value: -"What to do when the era check finds an anachronism in a GENERATED shot (a modern helmet in 1906): `note` records it and mounts the shot; `rebuy` buys the shot again ONCE, telling the generator what to avoid, within the piece's recomposition cap. Omit it and the budget tier decides (premium rebuys; standard and economy note)."New value: +"What happens when the era check finds an anachronism in a GENERATED shot (a modern helmet in 1906): `note` records it and mounts the shot; `rebuy` buys the shot again ONCE, telling the generator what to leave out, within the piece's recomposition cap. Without it the budget tier decides (premium rebuys; standard and economy note)."
    • changedInput schema / properties / production / properties / subtitle_language / description
      Previous value: -"Language of the SUBTITLES (BCP-47: `es`, `pt-BR`…). Its OWN axis, independent of `target_language`: omit it and the subtitles follow the piece; declare it and the piece is narrated in one language and read in another (measured: 21 live projects declare the two on purpose)."New value: +"Language of the SUBTITLES (BCP-47: `es`, `pt-BR`…), its OWN axis, independent of `target_language`: without it the subtitles follow the piece; with it the piece is narrated in one language and read in another (measured: 21 live projects declare the two on purpose)."
    • changedInput schema / properties / production / properties / writing_profile / description
      Previous value: -"How the script is written — see `list_referents.writingProfiles` for each profile's meaning and the measured cost/time ratio per format. Default `estandar`."New value: +"How the script is written (`writingProfiles` in the catalogue of formats gives each profile's meaning and the measured cost/time ratio per format). Default `estandar`."
    • changedInput schema / properties / prompt_seed / description
      Previous value: -"The idea, in your own words (topic, angle, what the viewer should take away)."New value: +"The idea, in the creator's words (topic, angle, what the viewer takes away)."
    • changedInput schema / properties / source / description
      Previous value: -"Your OWN material. `kind=script` + `respect=strict`: the piece narrates your text verbatim (you keep word-level control from the start); `kind=content`: an article/notes the Director adapts (`respect` guided|adaptive). Omit to let the Director write from `prompt_seed`."New value: +"The creator's OWN material. `kind=script` + `respect=strict`: the piece narrates the text verbatim (word-level control from the start); `kind=content`: an article or notes the Director adapts (`respect` guided|adaptive). Without it the Director writes from `prompt_seed`."
  14. First observed

TDQS

A4.2/5.0
Behavior5/5

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

Beyond the annotations (write, non-idempotent, destructive), it discloses what is actually consumed (the organization balance, quota, daily free-action cap), the precise ordering of spend checks (the script is written before the balance is checked and settles with the first render; later stations stop with `waitingForFunds`), required scope (`write`), and the response shape (project id, pinned cast, status until `finalVideoUrl`, typically 20-60 min). That is materially more than the annotation flags convey and is exactly what an agent needs before triggering a paid mutation.

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?

The content is valuable but the ordering is poor: the first sentence is a billing caveat rather than what the tool does, and the paragraphs are dense with production-line minutiae (station ordering, `waitingForFunds`, pause reasons) packed into one block. It is not padded with fluff, but the front-loading fails the 'what does this do' test.

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

Completeness5/5

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

For a nine-parameter, deeply nested, paid, non-idempotent mutation with no output schema, the description covers prerequisites, spend gates, default-versus-override behavior, what gets returned and how long it takes. An agent can decide whether to call it and interpret the result without guessing.

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 the baseline is 3, but the description adds real cross-field semantics the schema does not: `creative_referent` may be a premium format with `requiresSpendConfirmation`, which then requires `production.confirm_spend=true`, and it describes the returned pinned cast (`cast.voice` / `cast.face`). The other eight parameters are left entirely to their already-rich schema descriptions.

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?

The description states a specific verb and resource: "Creates a NEW project from an idea and launches it — the creation→edition crossing", and clarifies that the script is the first station of a production line, which separates it from siblings like `produce` or `rewrite_script`. However, the opening sentence is about billing rather than purpose, and the tool name (`generate_script`) versus the actual effect (creates a whole project) creates a naming tension the agent must resolve by reading further.

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?

It gives a clear default behavior (`production.auto_produce=true` runs the whole line) and the condition for choosing otherwise (`auto_produce=false` stops after the script so the piece can be edited before production), plus the premium-format spend-confirmation requirement. It never names sibling tools such as `estimate`, `produce` or `get_project_status` as alternatives, so the routing is implied rather than explicit.

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