Skip to content
RPT AI Video Studio

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 execute mode 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

Values in angle brackets are placeholders. Every write gets its own new request_key (a UUIDv4); reuse a key only to retry the identical call.

  1. get_workspace

    Read the workspace id and your role.

    Arguments for get_workspace
    {}
  2. create_project

    Create 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>"
    }
  3. create_source

    Add 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>"
    }
  4. create_source

    Add 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>"
    }
  5. agent_preflight

    Check for blockers and read next_calls, the exact next calls for this token.

    Arguments for agent_preflight
    {
      "project_id": "<project_id>"
    }
  6. list_voices

    Pick a narration voice in the video’s language.

    Arguments for list_voices
    {
      "language": "<language code, e.g. en>",
      "use_case": "advertising"
    }
  7. read_external_context

    Read the context: brief, sources, storyboard schema, handle, hash and revisions.

    Arguments for read_external_context
    {
      "project_id": "<project_id>"
    }
  8. submit_external_composition

    Submit 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>"
    }
  9. create_quote

    Quote 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>"
    }
  10. approve_productionOnly after the person says yes

    Only 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>"
    }
  11. agent_continue

    When unsure what comes next, ask the server; it returns the next call.

    Arguments for agent_continue
    {
      "project_id": "<project_id>"
    }
  12. get_run_progress

    Poll until the run is READY. A run that stops in NEEDS_ATTENTION is 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>"
    }
  13. list_available_media

    List the verified clips and the final video.

    Arguments for list_available_media
    {
      "project_id": "<project_id>",
      "run_id": "<run_id from approve_production>"
    }
  14. get_media_asset

    Read 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>"
    }
  15. prepare_delivery

    Prepare 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>"
    }
  16. issue_deliveryOnly after the person says yes

    Only after the person approves the result. confirmed: true is 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_production for a run that failed; read its state and ask the person.