{
  "name": "opus-motion",
  "title": "Opus Motion",
  "version": "1.0.0",
  "description": "Promo and launch video templates designed by Claude Opus 5.5. Paste a website and every template comes out in that brand, with its logo, colors and words; change anything in a live studio and export a full HD MP4 in 16:9 or 9:16. Free templates export at no cost; premium ones cost a few dollars per export.",
  "transport": {
    "type": "streamable-http",
    "url": "https://opusmotion.com/api/mcp"
  },
  "authentication": {
    "type": "none"
  },
  "capabilities": {
    "tools": {
      "listChanged": false
    },
    "resources": {
      "listChanged": false,
      "subscribe": false
    },
    "prompts": {
      "listChanged": false
    }
  },
  "tools": [
    {
      "name": "search_templates",
      "title": "Search video templates",
      "description": "Search the Opus Motion catalog of promo and launch video templates. Returns each template's id, title, description, tier and price, length, formats and example brands. Use it to find a template for someone's launch, product or brand video. Pro templates (every layer editable) are listed by list_pro_templates.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "description": "One or two words: a use, a style or a brand (for example 'launch' or 'music app'). Leave it out to see every template."
          },
          "category": {
            "type": "string",
            "description": "A category id, for example 'launches'."
          },
          "tier": {
            "type": "string",
            "enum": [
              "free",
              "premium"
            ],
            "description": "Only free or only premium templates."
          },
          "format": {
            "type": "string",
            "description": "Only templates offered in this format."
          }
        },
        "additionalProperties": false
      },
      "annotations": {
        "title": "Search video templates",
        "readOnlyHint": true,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "get_template",
      "title": "Get a video template",
      "description": "Everything about one catalog template: description, tier and price, length, formats, its scenes (what each shows, when), every field it takes (texts with their limits, images with their shape, colors, choices, clips) and, when it has them, the safe adjustments (tweaks). With images: true, its timelapse (the whole video in one picture) comes back inside the answer.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The template's id (t07-discover-play) or slug (discover-play)."
          },
          "images": {
            "type": "boolean",
            "description": "Also return the template's timelapse image inside the answer."
          }
        },
        "required": [
          "id"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "title": "Get a video template",
        "readOnlyHint": true,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "studio_link",
      "title": "Studio link for a website",
      "description": "A link the person opens to see the template made with their brand: the studio reads their website (logo, colors, copy) and fills the template. Give it to the person; exporting needs their own account, and payment for premium templates.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "template": {
            "type": "string",
            "description": "The template's id or slug."
          },
          "site": {
            "type": "string",
            "description": "The person's website domain, for example example.com."
          },
          "format": {
            "type": "string",
            "description": "Open the studio in this format."
          }
        },
        "required": [
          "template"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "title": "Studio link for a website",
        "readOnlyHint": true,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "join_studio_session",
      "title": "Join the person's open studio",
      "description": "The person has a template open in the Opus Motion studio and gave you its session code (OM-XXXX-XXXX). Join it first: you get the draft their studio shows, its editToken and the next steps. Then change it with update_draft: each change appears in their studio within seconds, and what they change there is in the draft when you read it. Never make a new draft for a session, and don't hand over a link: they have it open.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "description": "The session code from the person's prompt, for example OM-7KQ2-X4PD."
          }
        },
        "required": [
          "code"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "title": "Join the person's open studio",
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "create_draft",
      "title": "Make a draft video",
      "description": "Make a draft of a catalog template with the person's texts, images, colors and safe size adjustments. Returns a studioUrl the person opens to see the video playing live, an editToken to change it later (update_draft) and to look at it (look_at_draft), what is missing and the price to tell them. Nothing is rendered; the person exports it.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "template": {
            "type": "string",
            "description": "The template's id or slug (from search_templates)."
          },
          "format": {
            "type": "string",
            "description": "The format the draft opens in."
          },
          "site": {
            "type": "string",
            "description": "The person's website domain, for example example.com: texts you leave out are filled from it when it was read before."
          },
          "brand": {
            "type": "object",
            "description": "The brand: name, colors (1 to 4 hex) and logo or icon (base64 data URLs, 1 MB each)."
          },
          "values": {
            "type": "object",
            "description": "Field id → value: texts, choices, colors, and small images as base64 data URLs. get_template lists the fields. Image files and clips go with media_upload_command."
          },
          "tweaks": {
            "type": "object",
            "description": "Safe adjustments the template declares, for example { \"logoScale\": 1.3 }."
          }
        },
        "required": [
          "template"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "title": "Make a draft video",
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": false,
        "openWorldHint": false
      }
    },
    {
      "name": "update_draft",
      "title": "Change a draft video",
      "description": "Change a draft made with create_draft (the same link stays): send only what changes; null takes a field back to the template's.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The draft's id (draftId)."
          },
          "editToken": {
            "type": "string",
            "description": "The editToken the draft came with."
          },
          "format": {
            "type": "string",
            "description": "A format id the template offers, for example 16:9, 9:16 or 1:1."
          },
          "site": {
            "type": "string"
          },
          "brand": {
            "type": "object"
          },
          "values": {
            "type": "object"
          },
          "tweaks": {
            "type": "object"
          }
        },
        "required": [
          "id",
          "editToken"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "title": "Change a draft video",
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "get_draft",
      "title": "Read a draft video",
      "description": "What a draft holds: its template, format, values, what is missing, its studio link and its price.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The draft's id (draftId)."
          }
        },
        "required": [
          "id"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "title": "Read a draft video",
        "readOnlyHint": true,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "media_upload_command",
      "title": "Upload a file into a draft's field",
      "description": "An image file (PNG, JPEG, WebP or SVG, up to 4 MB) or a clip (MP4 or MOV, up to 40 MB) is too big to send as a tool argument: this answers the exact HTTP request, and a curl command, that puts the file into one of the draft's image or clip fields, checked like any value. Run it from your shell with the file's path.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The draft's id (draftId)."
          },
          "field": {
            "type": "string",
            "description": "An image or video field (get_template lists them)."
          },
          "file": {
            "type": "string",
            "description": "The file's path, to write it into the command (its extension says its type)."
          },
          "editToken": {
            "type": "string",
            "description": "The draft's editToken, to write it into the command (left out, the command has a placeholder)."
          }
        },
        "required": [
          "id",
          "field"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "title": "Upload a file into a draft's field",
        "readOnlyHint": true,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "list_pro_templates",
      "title": "List Pro templates",
      "description": "The Pro templates: designed videos in 16:9 and 9:16 whose every text, image and color an agent can change for a brand. Each lists its length and formats.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "annotations": {
        "title": "List Pro templates",
        "readOnlyHint": true,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "get_pro_template",
      "title": "Read a Pro template",
      "description": "Everything to put a brand on a Pro template: its summary and acts, its palette by role (one recolor per role makes it the brand's), and every layer: what it is for and how long its text should be (note), when it shows, how it looks and moves, and its box and size in each format (read-only: the layout is the template's). Also what the person pays to export it (export.priceUsd, export.tellThePerson).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The Pro template's id (from list_pro_templates)."
          }
        },
        "required": [
          "id"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "title": "Read a Pro template",
        "readOnlyHint": true,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "create_pro_draft",
      "title": "Make a Pro draft",
      "description": "Make a draft of a Pro template with the brand's texts, images and colors: set (a layer's text, its image src and fit, its colors, or hidden), recolor (one palette color to another everywhere) and video (its background). The layout, timing and motion stay the template's: an operation that changes them is refused, and the person can change them in the editor. All are checked together: one that fails applies nothing and the answer lists every issue. Returns draftId, editToken (shown once), editorUrl (opens the Pro editor, where the person watches it, can change anything and exports it), warnings and export (its price, to tell the person).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "template": {
            "type": "string",
            "description": "The Pro template's id."
          },
          "ops": {
            "type": "array",
            "items": {
              "description": "set (a layer's text, props.text/src/fit/color/fill/stroke/background, or hidden), recolor (from one color to another everywhere), or video (its background). Where things sit, when they show and how they move are the template's.",
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "op": {
                      "type": "string",
                      "enum": [
                        "set"
                      ]
                    },
                    "layer": {
                      "type": "string",
                      "description": "A layer id (get_pro_template lists them, with what each is for)."
                    },
                    "format": {
                      "type": "string",
                      "description": "\"all\" (default) or one format id."
                    },
                    "text": {
                      "type": "string",
                      "description": "A text layer's words."
                    },
                    "props": {
                      "type": "object",
                      "properties": {
                        "text": {
                          "type": "string"
                        },
                        "src": {
                          "type": "string",
                          "description": "An image layer: the template's own asset or an upload_pro_image src."
                        },
                        "fit": {
                          "type": "string",
                          "enum": [
                            "cover",
                            "contain"
                          ]
                        },
                        "color": {
                          "type": "string",
                          "description": "#RRGGBB"
                        },
                        "fill": {
                          "type": "string",
                          "description": "#RRGGBB"
                        },
                        "stroke": {
                          "type": "string",
                          "description": "#RRGGBB"
                        },
                        "background": {
                          "type": "string",
                          "description": "#RRGGBB"
                        }
                      },
                      "additionalProperties": false
                    },
                    "hidden": {
                      "type": "boolean",
                      "description": "true hides the layer (a part the brand doesn't need)."
                    }
                  },
                  "required": [
                    "op",
                    "layer"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "op": {
                      "type": "string",
                      "enum": [
                        "recolor"
                      ]
                    },
                    "from": {
                      "type": "string",
                      "description": "#RRGGBB"
                    },
                    "to": {
                      "type": "string",
                      "description": "#RRGGBB"
                    }
                  },
                  "required": [
                    "op",
                    "from",
                    "to"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "op": {
                      "type": "string",
                      "enum": [
                        "video"
                      ]
                    },
                    "background": {
                      "type": "string",
                      "description": "#RRGGBB"
                    }
                  },
                  "required": [
                    "op",
                    "background"
                  ],
                  "additionalProperties": false
                }
              ]
            },
            "description": "Operations, for example [{\"op\":\"set\",\"layer\":\"title\",\"text\":\"Plan less.\\nShip more.\"},{\"op\":\"recolor\",\"from\":\"#FE7B02\",\"to\":\"#5E6AD2\"}]. The guide (resource opusmotion://guide/pro) says how to make it good."
          }
        },
        "required": [
          "template"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "title": "Make a Pro draft",
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": false,
        "openWorldHint": false
      }
    },
    {
      "name": "edit_pro_draft",
      "title": "Change a Pro draft",
      "description": "Change a Pro draft's texts, images and colors (the same operations as create_pro_draft: set, recolor, video's background). Send revision to be sure nobody changed it since you read it (a stale one is refused). Returns the new revision and warnings.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "draftId": {
            "type": "string",
            "description": "The draft's id (draftId)."
          },
          "editToken": {
            "type": "string",
            "description": "The editToken the draft came with."
          },
          "ops": {
            "type": "array",
            "items": {
              "description": "set (a layer's text, props.text/src/fit/color/fill/stroke/background, or hidden), recolor (from one color to another everywhere), or video (its background). Where things sit, when they show and how they move are the template's.",
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "op": {
                      "type": "string",
                      "enum": [
                        "set"
                      ]
                    },
                    "layer": {
                      "type": "string",
                      "description": "A layer id (get_pro_template lists them, with what each is for)."
                    },
                    "format": {
                      "type": "string",
                      "description": "\"all\" (default) or one format id."
                    },
                    "text": {
                      "type": "string",
                      "description": "A text layer's words."
                    },
                    "props": {
                      "type": "object",
                      "properties": {
                        "text": {
                          "type": "string"
                        },
                        "src": {
                          "type": "string",
                          "description": "An image layer: the template's own asset or an upload_pro_image src."
                        },
                        "fit": {
                          "type": "string",
                          "enum": [
                            "cover",
                            "contain"
                          ]
                        },
                        "color": {
                          "type": "string",
                          "description": "#RRGGBB"
                        },
                        "fill": {
                          "type": "string",
                          "description": "#RRGGBB"
                        },
                        "stroke": {
                          "type": "string",
                          "description": "#RRGGBB"
                        },
                        "background": {
                          "type": "string",
                          "description": "#RRGGBB"
                        }
                      },
                      "additionalProperties": false
                    },
                    "hidden": {
                      "type": "boolean",
                      "description": "true hides the layer (a part the brand doesn't need)."
                    }
                  },
                  "required": [
                    "op",
                    "layer"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "op": {
                      "type": "string",
                      "enum": [
                        "recolor"
                      ]
                    },
                    "from": {
                      "type": "string",
                      "description": "#RRGGBB"
                    },
                    "to": {
                      "type": "string",
                      "description": "#RRGGBB"
                    }
                  },
                  "required": [
                    "op",
                    "from",
                    "to"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "op": {
                      "type": "string",
                      "enum": [
                        "video"
                      ]
                    },
                    "background": {
                      "type": "string",
                      "description": "#RRGGBB"
                    }
                  },
                  "required": [
                    "op",
                    "background"
                  ],
                  "additionalProperties": false
                }
              ]
            }
          },
          "revision": {
            "type": "integer",
            "description": "The revision you read."
          }
        },
        "required": [
          "draftId",
          "editToken",
          "ops"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "title": "Change a Pro draft",
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": false,
        "openWorldHint": false
      }
    },
    {
      "name": "get_pro_draft",
      "title": "Read a Pro draft",
      "description": "A Pro draft as it is now: its revision, every layer (what differs per format) and both formats' docs.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "draftId": {
            "type": "string",
            "description": "The draft's id (draftId)."
          }
        },
        "required": [
          "draftId"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "title": "Read a Pro draft",
        "readOnlyHint": true,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "upload_pro_image",
      "title": "Add an image to a Pro draft",
      "description": "Store an image (PNG, JPEG, WebP or SVG) in a Pro draft and get its src for an image layer ({\"op\":\"set\",\"layer\":\"hero\",\"props\":{\"src\":\"<src>\"}}). Send small images as data (base64 or a data URL, up to 3 MB); for a file on disk, leave data out and the answer is the curl command that uploads it.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "draftId": {
            "type": "string",
            "description": "The draft's id (draftId)."
          },
          "editToken": {
            "type": "string",
            "description": "The editToken the draft came with."
          },
          "data": {
            "type": "string",
            "description": "The image as base64 or a data URL."
          },
          "contentType": {
            "type": "string",
            "enum": [
              "image/png",
              "image/jpeg",
              "image/webp",
              "image/svg+xml"
            ],
            "description": "Its type, when data is plain base64."
          },
          "file": {
            "type": "string",
            "description": "Without data: the file's path, to write it into the curl command."
          }
        },
        "required": [
          "draftId",
          "editToken"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "title": "Add an image to a Pro draft",
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "look_at_pro_draft",
      "title": "See a Pro draft",
      "description": "Render stills (or a contact sheet) of a Pro draft as it is now, in each format, and return them as images inside the answer, with a layout check of those moments by layer (text hidden under another layer, past its box, low contrast). Look before you hand the link over; change and look again.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "draftId": {
            "type": "string",
            "description": "The draft's id (draftId)."
          },
          "editToken": {
            "type": "string",
            "description": "The editToken the draft came with."
          },
          "formats": {
            "description": "Which formats: \"all\", or a list such as [\"9:16\"]. Pro drafts default to all; catalog drafts to the draft's own.",
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "all"
                ]
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "description": "A format id the template offers, for example 16:9, 9:16 or 1:1."
                }
              }
            ]
          },
          "times": {
            "type": "array",
            "items": {
              "type": "number",
              "minimum": 0
            },
            "description": "Moments in seconds. Stills: up to 6 (default: the middle of each act or scene and the closing hold). Sheet: up to 9 (default: 9 evenly spread)."
          },
          "sheet": {
            "type": "boolean",
            "description": "One contact sheet per format (the moments side by side, labelled) instead of separate stills: the motion at a glance for few tokens."
          },
          "wait": {
            "type": "number",
            "minimum": 0,
            "maximum": 55,
            "description": "Seconds to wait for the render before answering (default 50). If it isn't ready, the answer has a jobId for get_frames."
          },
          "inline": {
            "type": "boolean",
            "description": "Return the images inside the answer (default true). false returns their URLs only."
          }
        },
        "required": [
          "draftId",
          "editToken"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "title": "See a Pro draft",
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "look_at_draft",
      "title": "See a catalog draft",
      "description": "Render stills (or a contact sheet) of a catalog draft with its texts, images and adjustments, the way its export will, and return them as images inside the answer with a layout check of those moments.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The draft's id (draftId)."
          },
          "editToken": {
            "type": "string",
            "description": "The editToken the draft came with."
          },
          "formats": {
            "description": "Which formats: \"all\", or a list such as [\"9:16\"]. Pro drafts default to all; catalog drafts to the draft's own.",
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "all"
                ]
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "description": "A format id the template offers, for example 16:9, 9:16 or 1:1."
                }
              }
            ]
          },
          "times": {
            "type": "array",
            "items": {
              "type": "number",
              "minimum": 0
            },
            "description": "Moments in seconds. Stills: up to 6 (default: the middle of each act or scene and the closing hold). Sheet: up to 9 (default: 9 evenly spread)."
          },
          "sheet": {
            "type": "boolean",
            "description": "One contact sheet per format (the moments side by side, labelled) instead of separate stills: the motion at a glance for few tokens."
          },
          "wait": {
            "type": "number",
            "minimum": 0,
            "maximum": 55,
            "description": "Seconds to wait for the render before answering (default 50). If it isn't ready, the answer has a jobId for get_frames."
          },
          "inline": {
            "type": "boolean",
            "description": "Return the images inside the answer (default true). false returns their URLs only."
          }
        },
        "required": [
          "id",
          "editToken"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "title": "See a catalog draft",
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "get_frames",
      "title": "Get a look's images",
      "description": "The images of a look that wasn't ready when it was asked (look_at_draft or look_at_pro_draft answered a jobId).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "draftId": {
            "type": "string",
            "description": "The draft's id (draftId)."
          },
          "jobId": {
            "type": "string",
            "description": "The jobId the look answered."
          },
          "wait": {
            "type": "number",
            "minimum": 0,
            "maximum": 55,
            "description": "Seconds to wait for the render before answering (default 50). If it isn't ready, the answer has a jobId for get_frames."
          },
          "inline": {
            "type": "boolean",
            "description": "Return the images inside the answer (default true). false returns their URLs only."
          }
        },
        "required": [
          "draftId",
          "jobId"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "title": "Get a look's images",
        "readOnlyHint": true,
        "idempotentHint": true,
        "openWorldHint": false
      }
    }
  ],
  "resources": [
    {
      "uri": "opusmotion://guide/agents",
      "name": "agents-guide",
      "title": "Guide for coding agents",
      "description": "How to make a launch video draft for the project you are in: read the repo, pick a template, write the texts, hand over the link.",
      "mimeType": "text/markdown"
    },
    {
      "uri": "opusmotion://guide/pro",
      "name": "pro-guide",
      "title": "Pro templates guide",
      "description": "Every operation, prop and animation of Pro templates, and how to make a good video with them.",
      "mimeType": "text/markdown"
    },
    {
      "uri": "opusmotion://guide/mcp",
      "name": "mcp-guide",
      "title": "This MCP server",
      "description": "The tools, resources and prompts of this server and how to connect it.",
      "mimeType": "text/markdown"
    }
  ],
  "resourceTemplates": [
    {
      "uriTemplate": "opusmotion://templates/{id}",
      "name": "template",
      "title": "Catalog template",
      "description": "One catalog template: its scenes, fields and tweaks (the same as get_template).",
      "mimeType": "application/json"
    },
    {
      "uriTemplate": "opusmotion://pro-templates/{id}",
      "name": "pro-template",
      "title": "Pro template",
      "description": "One Pro template: its layers, palette, acts and export price (the same as get_pro_template).",
      "mimeType": "application/json"
    },
    {
      "uriTemplate": "opusmotion://drafts/{id}",
      "name": "draft",
      "title": "Catalog draft",
      "description": "A catalog draft as it is now (the same as get_draft).",
      "mimeType": "application/json"
    },
    {
      "uriTemplate": "opusmotion://pro-drafts/{id}",
      "name": "pro-draft",
      "title": "Pro draft",
      "description": "A Pro draft as it is now (the same as get_pro_draft).",
      "mimeType": "application/json"
    },
    {
      "uriTemplate": "opusmotion://workflows/{name}",
      "name": "workflow",
      "title": "Workflow",
      "description": "A prompt's steps as a document (launch_video, pro_brand_video, review_draft), for clients that don't show MCP prompts.",
      "mimeType": "text/markdown"
    }
  ],
  "prompts": [
    {
      "name": "launch_video",
      "title": "Make a launch video",
      "description": "Pick a template for a product, fill it with the product's own words and images, look at it and hand over the link.",
      "arguments": [
        {
          "name": "product",
          "description": "What the product is and who it's for, in a sentence.",
          "required": true
        },
        {
          "name": "site",
          "description": "Its website domain, if it has one.",
          "required": false
        },
        {
          "name": "format",
          "description": "16:9, 9:16 or both.",
          "required": false
        }
      ]
    },
    {
      "name": "pro_brand_video",
      "title": "Make a Pro video for a brand",
      "description": "Put a brand on a Pro template: its words, images and colors in both formats, checked with stills before handing it over.",
      "arguments": [
        {
          "name": "brand",
          "description": "The brand and what it launches.",
          "required": true
        },
        {
          "name": "brief",
          "description": "What the person asked for: tone, length, what must be said.",
          "required": false
        },
        {
          "name": "template",
          "description": "A Pro template id, if one is chosen.",
          "required": false
        }
      ]
    },
    {
      "name": "review_draft",
      "title": "Review a draft",
      "description": "Look at a draft in every format, list what reads badly (crowding, empty areas, small images, long texts) and fix it.",
      "arguments": [
        {
          "name": "draftId",
          "description": "The draft's id.",
          "required": true
        },
        {
          "name": "editToken",
          "description": "Its editToken.",
          "required": true
        },
        {
          "name": "kind",
          "description": "catalog or pro.",
          "required": true
        }
      ]
    }
  ],
  "instructions": "Opus Motion makes launch and promo videos from templates. This server covers the whole job for an agent: find a template, fill or edit it, see what you made, and hand the person a link where the video plays live and they export it.\n\nTwo kinds of template, both designed by us; an agent puts the person's brand on them. Catalog templates (search_templates) take fields: texts, images, colors, clips. Make a draft with create_draft and change it with update_draft. Pro templates (list_pro_templates) let you change every text, image and color, and hide a layer. Make a draft with create_pro_draft and change it with edit_pro_draft. The layout, timing and motion stay as designed; the person can change them in the editor.\n\nWhen the person gives you a studio session code (OM-XXXX-XXXX), they have that template open in the studio: join_studio_session first, then work on that draft with update_draft. They watch each change arrive; no new draft, no link.\n\nLook before you hand it over. look_at_draft and look_at_pro_draft return stills or a contact sheet as images, with a layout check. Fix what you see and look again.\n\nExporting the MP4 is the person's step, in their own account, from the link you give them; a premium template or a Pro draft is paid there (or covered by their Opus Motion Pass), so tell them the price the draft's answer gives. Keep the editToken: it is shown once, and every change and look needs it.\n\nGuides: opusmotion://guide/agents (catalog drafts from inside a project), opusmotion://guide/pro (every Pro operation), opusmotion://guide/mcp (this server).\n\nOpus Motion: Promo and launch video templates designed by Claude Opus 5.5. Paste a website and every template comes out in that brand, with its logo, colors and words; change anything in a live studio and export a full HD MP4 in 16:9 or 9:16. Free templates export at no cost; premium ones cost a few dollars per export.\n\nUse it when: Someone needs a short launch, product or promo video for their own brand, app, tool or website, and has no agency, editor or motion designer. Someone wants a branded video for X, LinkedIn, Instagram, TikTok or YouTube, in 16:9 or vertical 9:16, from their website alone. Someone is comparing promo video templates by style, length, format or price.\n\nHow to help: Working inside the person's project (Claude Code, Codex, any coding agent)? Follow /agents.md: you compare templates by their timelapse, write the texts and pick the images from the repo, `POST /api/v1/drafts` answers a studio link, and the person opens it with the video playing live. `PATCH /api/v1/drafts/{id}` with its `editToken` changes the same draft, and a real clip from the repo goes to a video field with `PUT /api/v1/drafts/{id}/media/{field}`. Find a template: `GET /api/v1/templates` (filter by `q`, `category`, `tier`, `format`) or the MCP tool `search_templates`. Hand the person a studio link for their website: `GET /api/v1/studio-link?template=<id>&site=<their domain>` or the MCP tool `studio_link`. The studio reads the site and fills the template with their logo, colors and copy. The person reviews it, changes anything, and exports it themselves. Exporting needs their own account, and payment for premium templates: an agent cannot export or pay on their behalf.",
  "documentation": "https://opusmotion.com/mcp"
}