Skip to main content
Glama

studio.apply_ops

Apply several edits atomically against base_version; any refusal applies nothing and names the failing op. Small models: prefer the single-purpose verbs. Each op is {op, args}; the ops and their args are: add_scene_from_asset {asset_id, at_index?}; delete_elements {element_ids, ripple_secondary?}; shift_clips {clip_ids, delta_ms}; duplicate_clips {clip_ids, at_ms}; insert_time {at_ms, length_ms}; ripple_delete {element_id, scope?}; roll_edit {left_id, right_id, delta_ms}; slip_edit {clip_id, delta_ms}; slide_edit {clip_id, delta_ms}; move_caption {caption_id?, at_ms?, delta_ms}; cut_transcript_span {from_caption_id, to_caption_id, from_word_index?, to_word_index?}; add_track {role, name?}; remove_track {track_id, delete_clips?}; move_track {track_id, position}; rename_track {track_id, name}; set_track_muted {track_id, muted}; move_clips_to_track {clip_ids, track_id, delta_ms?}; place_product_card {stock_item_id, product_name, sell_price_cents, currency, start_ms?, duration_ms?, style?, track_id?}. base_version is the composition_version you last read; a stale one is refused with a 409 that carries head_version, so re-read with studio.get_composition and resend. Send 1 to 50 ops per call.

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": {
      "project_id": "<project_id>",
      "base_version": "<base_version>",
      "ops": "<ops>"
    },
    "name": "studio.apply_ops"
  }
}

Input Schema

NameRequiredDescriptionDefault
opsYesThe edits, applied in order; all land or none do.
project_idYesThe studio project (vp_…) this batch edits.
base_versionYesThe composition_version your ops were planned against (0 for a project with no saved composition).

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.6/5.0
Behavior5/5

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

Beyond readOnlyHint=false, it discloses the transactional contract (all land or none), failure semantics (refusal names the failing op), the specific 409 + head_version error shape, and the 1–50 op limit. These are exactly the operational facts an agent needs before committing a batch write.

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?

Purpose, atomicity and the recovery rule are front-loaded, and the op catalogue is dense but necessary. The single-paragraph layout makes the long op enumeration harder to scan than a structured list would.

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?

Covers the full input contract and the failure path, and no output schema exists to defer to. It does not state what a successful call returns (e.g., the new composition_version), which matters given the whole tool is version-guarded.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the flat args object cannot express which arguments belong to which op; the description supplies that per-op mapping explicitly across all 18 ops, which is information available nowhere else in the structured data.

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 and resource ('Apply several edits atomically against base_version') and immediately distinguishes itself from the single-purpose sibling verbs. The agent knows this is a batched, transactional write path rather than an incremental edit.

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 names the alternative path ('Small models: prefer the single-purpose verbs') and prescribes the recovery workflow for a stale version (re-read with studio.get_composition and resend). It doesn't say when batching is preferable for capable models, so the guidance stops just short of explicit when-to-use/when-not.

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