Skip to main content
Glama

Estimate cost

estimate
Read-onlyIdempotent

What a piece would cost and whether it can launch, BEFORE anything is spent — the same verdict the human cockpit shows. Accepts the same arguments as project creation (idea, format, source, cast, production). $0, no LLM. The answer has two parts: launch.ready says whether the REQUEST is complete and allowed (launch.blockers names what is missing); economics says what it costs and whether the wallet governs it: estimateUsd (typical) with estimateMinUsd/estimateMaxUsd (a band, not a quote — production charges what it actually spends), walletBalanceUsd, and reason, one of: guard_inactivo — billing is not active in this environment: no wallet governs the launch. · saldo_desconocido — the wallet balance could not be read; nothing is inferred from that. · pedido_sin_cotizar — not enough to price yet: the request needs an idea (prompt_seed or source) and a duration_profile (or the platform default). · alcanza — the wallet covers the estimated band. · casa_invita — first piece of this account: the balance does not govern it; the band is informational. · excede_bienvenida — first piece of this account, and this request is above what a first piece can be: a shorter duration profile or no presenter fits — price the change with estimate. · operador_de_la_casa — this credential belongs to a platform operator: production is not charged to this wallet; the band is informational. · no_alcanza — the organization's balance does not cover the estimated band. economics.applies is true only when the wallet does not cover the request; estimateMaxUsd against walletBalanceUsd is what decides whether a real wallet covers the piece; hint restates the reason in words. WHERE THE LINE STOPS FOR FUNDS: the script (first station) is written before the balance is checked and settles with the first render; the first station that checks the balance is the studio build, then the final render — if the balance does not cover a station the line stops there (the project status reports waitingForFunds with the station) and what was already produced stays. vocabulary in the answer glosses every typed value that is not English.

Input Schema

NameRequiredDescriptionDefault
castNoThe cast, as at creation. A presenter on screen (`face`, `on_camera` or `describe_face`) moves the price.
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.
productionNo
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 idea (the same field as at creation). Optional here: without an idea or a `source` the verdict says `no_idea` and there is no price yet.
target_languageNo
creative_referentYesA referent id from Vixdeo's catalogue of formats.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • 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. Changed1 schema field changed
    • 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
    • addedInput schema / properties / production / properties / target_duration_sec / description
      Added 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."
  10. 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"
      +}
  11. Changed10 schema fields changed
    • changedInput schema / properties / cast / description
      Previous value: -"As in generate_script. A presenter on screen (`face`, `on_camera` or `describe_face`) moves the price."New value: +"The cast, as at creation. A presenter on screen (`face`, `on_camera` or `describe_face`) moves the price."
    • 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: -"Referent id from `list_referents`."New value: +"A referent id from Vixdeo's catalogue of formats."
    • changedInput schema / properties / production / properties / duration_profile / description
      Previous value: -"Omit to price the platform default (`list_referents.platformDefaults.durationProfile`)."New value: +"Without it, the platform default is priced (`platformDefaults.durationProfile` in the catalogue of formats)."
    • 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 / prompt_seed / description
      Previous value: -"The idea (same as generate_script). Optional here: without an idea or a `source` the verdict says `no_idea` and there is no price yet."New value: +"The idea (the same field as at creation). Optional here: without an idea or a `source` the verdict says `no_idea` and there is no price yet."
    • 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`."
  12. First observed

TDQS

A4.2/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), yet the description still adds substantial behavior: zero cost, no LLM call, the two-part answer shape (`launch` vs `economics`), the meaning of `economics.applies`, and exactly where funding checks stop the line (script before balance, studio build and final render after, status `waitingForFunds`). That is context no structured field carries.

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?

It is correctly front-loaded — the first sentence carries the whole purpose — but the body is a single dense block with deep parenthetical nesting and untranslated enum values (`casa_invita`, `excede_bienvenida`), which slows scanning. Length is partly justified by the absence of an output schema, yet the sentence structure is heavier than it needs to be.

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?

With no output schema, the description carries the return-value burden and does so thoroughly: field names, all reason codes, the applies/band/balance relationship, and the `vocabulary` escape hatch for non-English typed values. It stops short of stating authorization or credential requirements, though the operator-credential reason code partially covers that.

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 coverage is 75% and the schema itself documents nearly every parameter in depth, so the description's parameter content (source, cast, material, production) is largely restatement. The only genuine additions are the cross-tool framing ('accepts the same arguments as project creation', mapping idea→`prompt_seed`) and the note that material is excluded from price — both already hinted at in the schema text.

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 opening sentence gives a specific verb and resource (price a piece and check whether it can launch) plus a decisive scope marker: 'BEFORE anything is spent — the same verdict the human cockpit shows.' Combined with '$0, no LLM' this cleanly separates it from the production siblings (`produce`, `commit`) without the agent needing to open any 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?

It states the operating context (pre-spend dry run, accepts the same arguments as project creation) and explicitly routes one case to itself: 'price the change with `estimate`' under `excede_bienvenida`. It never names `produce` or `get_project_status` as the alternative for the opposite case, so the when-not half is only implied.

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