Skip to main content
Glama

Derive Composition

derive_composition

Derive a reframed SIBLING composition for a different aspect ratio (the agent-native Auto-Reframe / Magic-Resize). Pass projectId + body { fromCompositionId, targetFormat: { aspectRatio, fps?, resolution? } }. CueFrame copies the source composition's authored intent and content-aware-reframes every clip for the new aspect (point/face/active-speaker focus), then saves a new independent composition in the same project. Returns { compositionId } — render it with create_render, or refine it with apply_composition. Use this to make 9:16 + 1:1 + 4:5 cuts from one 16:9 edit. (To only change resolution within the SAME aspect, pass create_render.format instead — that is a scale-only export override, not a new composition.)

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "projectId": "<projectId>",
      "body": "<body>"
    },
    "name": "derive_composition"
  }
}

Input Schema

NameRequiredDescriptionDefault
bodyYesDerive a reframed sibling composition for a new aspect (Auto-Reframe / Magic-Resize, agent-native).
commandIdNoRetry identity. A call repeated with the same commandId returns the first result instead of acting twice.
projectIdYesprojectId (path).

Output Schema

NameRequiredDescriptionDefault
compositionIdNoThe new sibling composition's id.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed10 schema fields changed
    • removedInput schema / $defs / __schema1
      Removed value: -{
      -  "additionalProperties": {
      -    "$ref": "#/$defs/__schema6"
      -  },
      -  "description": "The target output format (aspectRatio + optional fps/resolution) for the new sibling.",
      -  "properties": {
      -    "aspectRatio": {
      -      "$ref": "#/$defs/__schema2"
      -    },
      -    "fps": {
      -      "$ref": "#/$defs/__schema3"
      -    },
      -    "platform": {
      -      "$ref": "#/$defs/__schema5"
      -    },
      -    "resolution": {
      -      "$ref": "#/$defs/__schema4"
      -    }
      -  },
      -  "required": [
      -    "aspectRatio"
      -  ],
      -  "type": "object"
      -}
    • removedInput schema / $defs / __schema2
      Removed value: -{
      -  "enum": [
      -    "16:9",
      -    "9:16",
      -    "1:1",
      -    "4:5"
      -  ],
      -  "type": "string"
      -}
    • removedInput schema / $defs / __schema3
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "const": 24,
      -      "type": "number"
      -    },
      -    {
      -      "const": 25,
      -      "type": "number"
      -    },
      -    {
      -      "const": 30,
      -      "type": "number"
      -    },
      -    {
      -      "const": 60,
      -      "type": "number"
      -    }
      -  ]
      -}
    • removedInput schema / $defs / __schema4
      Removed value: -{
      -  "enum": [
      -    "hd",
      -    "fhd",
      -    "4k"
      -  ],
      -  "type": "string"
      -}
    • removedInput schema / $defs / __schema5
      Removed value: -{
      -  "type": "string"
      -}
    • removedInput schema / $defs / __schema6
      Removed value: -{}
    • removedInput schema / properties / body / properties / targetFormat / $ref
      Removed value: -"#/$defs/__schema1"
    • addedInput schema / properties / body / properties / targetFormat / description
      Added value: +"The target output format (aspectRatio + optional fps/resolution) for the new sibling. Call describe_tool_input with tool \"derive_composition\" and field \"targetFormat\" for the exact JSON Schema."
    • addedInput schema / properties / body / properties / targetFormat / required
      Added value: +[
      +  "aspectRatio"
      +]
    • addedInput schema / properties / body / properties / targetFormat / type
      Added value: +"object"
  2. Changed18 schema fields changed
    • addedInput schema / $defs
      Added value: +{
      +  "__schema0": {
      +    "description": "Source composition to reframe a sibling from.",
      +    "minLength": 1,
      +    "type": "string"
      +  },
      +  "__schema1": {
      +    "additionalProperties": {
      +      "$ref": "#/$defs/__schema6"
      +    },
      +    "description": "The target output format (aspectRatio + optional fps/resolution) for the new sibling.",
      +    "properties": {
      +      "aspectRatio": {
      +        "$ref": "#/$defs/__schema2"
      +      },
      +      "fps": {
      +        "$ref": "#/$defs/__schema3"
      +      },
      +      "platform": {
      +        "$ref": "#/$defs/__schema5"
      +      },
      +      "resolution": {
      +        "$ref": "#/$defs/__schema4"
      +      }
      +    },
      +    "required": [
      +      "aspectRatio"
      +    ],
      +    "type": "object"
      +  },
      +  "__schema2": {
      +    "enum": [
      +      "16:9",
      +      "9:16",
      +      "1:1",
      +      "4:5"
      +    ],
      +    "type": "string"
      +  },
      +  "__schema3": {
      +    "anyOf": [
      +      {
      +        "const": 24,
      +        "type": "number"
      +      },
      +      {
      +        "const": 25,
      +        "type": "number"
      +      },
      +      {
      +        "const": 30,
      +        "type": "number"
      +      },
      +      {
      +        "const": 60,
      +        "type": "number"
      +      }
      +    ]
      +  },
      +  "__schema4": {
      +    "enum": [
      +      "hd",
      +      "fhd",
      +      "4k"
      +    ],
      +    "type": "string"
      +  },
      +  "__schema5": {
      +    "type": "string"
      +  },
      +  "__schema6": {},
      +  "__schema7": {
      +    "description": "Required: the source composition's strong etag the caller last saw. Missing is refused with 428 precondition_required; a source that changed since is 409 stale_etag.",
      +    "type": "string"
      +  },
      +  "__schema8": {
      +    "maxLength": 128,
      +    "minLength": 1,
      +    "type": "string"
      +  }
      +}
    • addedInput schema / properties / body / properties / fromCompositionId / $ref
      Added value: +"#/$defs/__schema0"
    • removedInput schema / properties / body / properties / fromCompositionId / description
      Removed value: -"Source composition to reframe a sibling from."
    • removedInput schema / properties / body / properties / fromCompositionId / minLength
      Removed value: -1
    • removedInput schema / properties / body / properties / fromCompositionId / type
      Removed value: -"string"
    • addedInput schema / properties / body / properties / if_match / $ref
      Added value: +"#/$defs/__schema7"
    • removedInput schema / properties / body / properties / if_match / description
      Removed value: -"Required: the source composition's strong etag the caller last saw. Missing is refused with 428 precondition_required; a source that changed since is 409 stale_etag."
    • removedInput schema / properties / body / properties / if_match / type
      Removed value: -"string"
    • addedInput schema / properties / body / properties / targetFormat / $ref
      Added value: +"#/$defs/__schema1"
    • removedInput schema / properties / body / properties / targetFormat / additionalProperties
      Removed value: -{}
    • removedInput schema / properties / body / properties / targetFormat / description
      Removed value: -"The target output format (aspectRatio + optional fps/resolution) for the new sibling."
    • removedInput schema / properties / body / properties / targetFormat / properties
      Removed value: -{
      -  "aspectRatio": {
      -    "enum": [
      -      "16:9",
      -      "9:16",
      -      "1:1",
      -      "4:5"
      -    ],
      -    "type": "string"
      -  },
      -  "fps": {
      -    "anyOf": [
      -      {
      -        "const": 24,
      -        "type": "number"
      -      },
      -      {
      -        "const": 25,
      -        "type": "number"
      -      },
      -      {
      -        "const": 30,
      -        "type": "number"
      -      },
      -      {
      -        "const": 60,
      -        "type": "number"
      -      }
      -    ]
      -  },
      -  "platform": {
      -    "type": "string"
      -  },
      -  "resolution": {
      -    "enum": [
      -      "hd",
      -      "fhd",
      -      "4k"
      -    ],
      -    "type": "string"
      -  }
      -}
    • removedInput schema / properties / body / properties / targetFormat / required
      Removed value: -[
      -  "aspectRatio"
      -]
    • removedInput schema / properties / body / properties / targetFormat / type
      Removed value: -"object"
    • addedInput schema / properties / commandId / $ref
      Added value: +"#/$defs/__schema8"
    • removedInput schema / properties / commandId / maxLength
      Removed value: -128
    • removedInput schema / properties / commandId / minLength
      Removed value: -1
    • removedInput schema / properties / commandId / type
      Removed value: -"string"
  3. Changed2 schema fields changed
    • addedInput schema / properties / body / properties / if_match
      Added value: +{
      +  "description": "Required: the source composition's strong etag the caller last saw. Missing is refused with 428 precondition_required; a source that changed since is 409 stale_etag.",
      +  "type": "string"
      +}
    • addedInput schema / properties / commandId
      Added value: +{
      +  "description": "Retry identity. A call repeated with the same commandId returns the first result instead of acting twice.",
      +  "maxLength": 128,
      +  "minLength": 1,
      +  "type": "string"
      +}
  4. Changed1 schema field changed
    • changedInput schema / properties / body / properties / targetFormat / additionalProperties
      Previous value: -falseNew value: +{}
  5. Changed1 schema field changed
    • addedInput schema / properties / body / properties / targetFormat / properties / platform
      Added value: +{
      +  "type": "string"
      +}
  6. First observed

TDQS

A4.6/5.0
Behavior4/5

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

Goes well beyond the annotations by disclosing what actually happens internally (copies authored intent, content-aware reframes each clip with point/face/active-speaker focus) and what is created (a new independent composition, source preserved). Annotations already mark it as a non-read-only, non-destructive, non-idempotent write; the description supplies the missing 'what does it materialize' context. Minor gaps: it doesn't mention the commandId retry contract or any latency/async behavior for the reframing pass.

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

Conciseness4/5

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

Front-loads the verb and resource in the first clause, then the call shape, then behavior, then the sibling-routing note — a good information ordering. The two trailing parentheticals are dense but both earn their place by preventing misuse; the sentence is slightly overpacked, with a dangling parenthetical after the comma.

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?

Output schema exists and the description still names the return ({ compositionId }) and routes to create_render/apply_composition for next steps. With annotations, full schema coverage, and an output schema all present, nothing an agent needs in order to call this correctly is missing.

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. The description still adds value by spelling out the nesting shape inline (projectId + body { fromCompositionId, targetFormat: { aspectRatio, fps?, resolution? } }), which makes the optionality of fps/resolution readable before opening the schema. The if_match and commandId semantics are left entirely 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?

States a specific verb (derive) and specific resource (a reframed SIBLING composition) with scope (different aspect ratio) and product terminology (Auto-Reframe / Magic-Resize). The word 'sibling' plus 'independent composition in the same project' distinguishes it from new_composition, create_render, and apply_composition without needing the schemas.

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?

Gives an explicit use case ('make 9:16 + 1:1 + 4:5 cuts from one 16:9 edit'), an explicit exclusion ('to only change resolution within the SAME aspect, pass create_render.format instead — that is a scale-only export override, not a new composition'), and names downstream alternatives (create_render, apply_composition). This is exactly the routing information an agent needs to pick between near-duplicate tools.

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.