Use cases
Marketing video made by an agent
An agent plans and produces a short marketing video end to end; a person approves the price and the delivery.
Goal
Let an agent plan and produce a short marketing video from a product page and a few facts, while one person approves the price and the result.
Before you start
- A token in
executemode for the whole workspace, so the agent can create the project. - A product page URL and the facts the video must get right, such as the offer and the claims the brand allows.
MCP calls, in order
get_workspaceRead the workspace id and your role.
Arguments for get_workspace {}create_projectCreate the project with the goal, audience, offer and tone in the brief.
Arguments for create_project { "workspace_id": "<workspace_id from get_workspace>", "title": "<campaign name>", "brief": "<goal, audience, offer, tone>", "duration": 20, "ratio": "9:16", "request_key": "<new UUIDv4>" }create_sourceAdd the product page as a source; the server reads it for facts.
Arguments for create_source { "project_id": "<project_id>", "kind": "web", "url": "<product page URL>", "request_key": "<new UUIDv4>" }create_sourceAdd the facts the video must get right as a text source.
Arguments for create_source { "project_id": "<project_id>", "kind": "text", "text": "<facts the video must get right>", "request_key": "<new UUIDv4>" }agent_preflightCheck for blockers and read
next_calls, the exact next calls for this token.Arguments for agent_preflight { "project_id": "<project_id>" }list_voicesPick a narration voice in the video’s language.
Arguments for list_voices { "language": "<language code, e.g. en>", "use_case": "advertising" }read_external_contextRead the context: brief, sources, storyboard schema, handle, hash and revisions.
Arguments for read_external_context { "project_id": "<project_id>" }submit_external_compositionSubmit the storyboard: shots, narration and on-screen text. The check is free.
Arguments for submit_external_composition { "project_id": "<project_id>", "expected_project_revision": "<project revision from the context>", "expected_composition_revision": "<composition revision from the context>", "context_handle": "<context_handle>", "context_hash": "<context_hash>", "composition": { "shots": [ { "reference_asset_ids": [ "<asset_id>" ], "...": "<fields from the schema in the context>" } ] }, "client_task_id": "<your task id>", "request_key": "<new UUIDv4>" }create_quoteQuote with the chosen voice and subtitles. Stop and show the person the storyboard and the total.
Arguments for create_quote { "project_id": "<project_id>", "composition_id": "<composition_id>", "candidates": 1, "voice": "<voice id>", "subtitles": true, "request_key": "<new UUIDv4>" }approve_productionOnly after the person says yesOnly after the person agrees. Production starts at once.
Arguments for approve_production { "project_id": "<project_id>", "quote_id": "<quote_id>", "expected_content_hash": "<content_hash from the quote>", "request_key": "<new UUIDv4>" }agent_continueWhen unsure what comes next, ask the server; it returns the next call.
Arguments for agent_continue { "project_id": "<project_id>" }get_run_progressPoll until the run is
READY. A run that stops inNEEDS_ATTENTIONis never submitted again on its own; tell the person.Arguments for get_run_progress { "project_id": "<project_id>", "run_id": "<run_id from approve_production>" }list_available_mediaList the verified clips and the final video.
Arguments for list_available_media { "project_id": "<project_id>", "run_id": "<run_id from approve_production>" }get_media_assetRead one file to check it or to show it to the person.
Arguments for get_media_asset { "project_id": "<project_id>", "artifact_id": "<artifact_id>", "name": "<file name from list_available_media>" }prepare_deliveryPrepare the delivery package: the video, its subtitles and the other files of the run.
Arguments for prepare_delivery { "project_id": "<project_id>", "run_id": "<run_id from approve_production>", "request_key": "<new UUIDv4>" }issue_deliveryOnly after the person says yesOnly after the person approves the result.
confirmed: trueis their decision.Arguments for issue_delivery { "project_id": "<project_id>", "run_id": "<run_id from approve_production>", "confirmed": true, "request_key": "<new UUIDv4>" }
What the person approves
- The storyboard and the quote, before
approve_production. - The finished video, before
issue_delivery.
Expected output
- A vertical video of about 20 seconds with narration and subtitles.
- A delivery package the person can download.
Good to know
- Claude Code, Codex and other MCP clients connect the same way; see the agent setup guides.
- The token’s own limits (spend cap, calls per minute, paid jobs at once) are the only thing the server enforces on spend; see the overview. Do not repeat
approve_productionfor a run that failed; read its state and ask the person.