Validate AI-made motion graphics and package them as editable HyperCodeMotion projects.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Validate a finished HyperCodeMotion composition and package it as a .hcmotion project file, the format HyperCodeMotion Studio opens. If the composition has problems, returns created: false with the errors to fix and stores nothing. On success, stores the file temporarily and returns an `open` link (opens the project in HyperCodeMotion Studio) and a `download` link; both expire 24 hours after creation. It does not render video or generate media.
The full composition (version, name, width, height, fps, duration, background, layers…), as an object or JSON-encoded string.
Optional project name.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Validate a finished HyperCodeMotion composition and package it as a .hcmotion project file, the format HyperCodeMotion Studio opens. If the composition has problems, returns created: false with the errors to fix and stores nothing. On success, stores the file temporarily and returns an `open` link (opens the project in HyperCodeMotion Studio) and a `download` link; both expire 24 hours after creation. It does not render video or generate media.
| Argument | Type | Description |
|---|---|---|
| json* | any | The full composition (version, name, width, height, fps, duration, background, layers…), as an object or JSON-encoded string. |
| name | string | Optional project name. |
{
"type": "object",
"required": [
"json"
],
"properties": {
"json": {
"anyOf": [
{
"type": "object"
},
{
"type": "string"
}
],
"description": "The full composition (version, name, width, height, fps, duration, background, layers…), as an object or JSON-encoded string."
},
"name": {
"type": "string",
"description": "Optional project name."
}
},
"additionalProperties": false
}List the HyperCodeMotion JSON formats, layer types and properties, and effect presets that HyperCodeMotion Studio supports, how to reference files the user keeps in Studio by id, the screen rule that decides type size (field screen: the canvas wins over a requested size), a runtime layer that keeps an existing Lottie, glTF or GSAP file and seeks it, and the Studio contract revision they come from.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}Return the status of a Community template proposal by the tracking code propose_template gave: comparing (it waits a little while the comparison renders), review (with the comparison sheet as an image: original and recreation side by side at the same moments), rendering, published, failed (with the reason) or retired, and its template id, which get_template accepts once it is published.
| Argument | Type | Description |
|---|---|---|
| code* | string | The tracking code. |
{
"type": "object",
"required": [
"code"
],
"properties": {
"code": {
"type": "string",
"description": "The tracking code."
}
},
"additionalProperties": false
}Start turning a public motion video into a HyperCodeMotion Studio gallery template. Takes the link of the video's page (prompt-motion.com or oneshotted.io) and what that page shows (its video file, prompt, title and author, read by the caller, since the source sites often refuse this server) and returns the source details (title, author, and the published prompt when the page shows it), the brief (how to recreate it in three formats with the HyperCodeMotion signature, and the gallery card to fill in) and reference frames of the original video as images, labelled with their times. The first call starts extracting those frames and may answer reference.status: preparing; call it again until it is ready, and do not build before seeing them. When it answers reference.status: upload (prompt-motion.com refuses servers), run upload.script in a code or shell tool to send the video, then call it again. If the video is already a Community template, says so with its status instead.
| Argument | Type | Description |
|---|---|---|
| url* | string | Link of the video's page, such as https://prompt-motion.com/<id> or https://oneshotted.io/v/<slug>. |
| title | string | The video's title on the page. |
| video | string | Address of the page's video file (.mp4 on media.prompt-motion.com or r2.oneshotted.io), as read on the page. |
| author | string | The author's name, only when the page names one. |
| prompt | string | The prompt the page publishes with the video, as read on the page. |
| authorUrl |
Return the full design of a template from the HyperCodeMotion Studio gallery, by its id and format: brief (palette, fonts, frame, rhythm), scenes with timings, and the composition with its HTML scene documents and layers. Use it as the design reference when asked to follow a template; it does not create or store anything.
| Argument | Type | Description |
|---|---|---|
| format | string | Aspect ratio of the video being made. Defaults to 16:9. |
| template* | string | Template id, such as "mix-promo-editorial". |
{
"type": "object",
"required": [
"template"
],
"properties": {
"format": {
"enum": [
"16:9",
"9:16",
"1:1",
"4:3",
"3:4"
],
"type": "string",
"description": "Aspect ratio of the video being made. Defaults to 16:9."
},
"template": {
"type": "string",
"description": "Template id, such as \"mix-promo-editorial\"."
}
},
"additionalProperties": false
}Submit a recreated video as a HyperCodeMotion Studio gallery template: the source link, its three compositions (cuadrado 1080×1080, vertical 1080×1920, horizontal 1920×1080) and the gallery card. It checks the source, the compositions and the card; if anything fails it returns accepted: false with the errors to fix and stores nothing. When accepted, the composition in the original's format is rendered with the Studio engine and compared with the original frame by frame; get_proposal_status returns that comparison. To send fixes after a comparison, call it again with the same code (up to 3 comparisons). Nothing is published until publish_template. A video that is already a template is not stored twice.
| Argument | Type | Description |
|---|---|---|
| url* | string | Link of the source video's page, the same one given to get_recreation_brief. |
| card* | object | Gallery card, in Spanish. |
| code | string | Only to send a revision after a comparison: the tracking code of the first proposal. |
| compositions* | object | The three compositions, as objects or JSON-encoded strings. |
{
"type": "object",
"required": [
"url",
"compositions",
"card"
],
"properties": {
"url": {
"type": "string",
"description": "Link of the source video's page, the same one given to get_recreation_brief."
},
"card": {
"type": "object",
"required": [
"name",
"description",
"chips",
"group",
"moments"
],
"properties": {
"name": {
"type": "string"
},
"chips": {
"type": "array",
"items": {
"type": "string"
}
},
"group": {
"enum": [
"ui",
"editorial",
"data",
"organic",
"ugc"
],
"type": "string"
},
"moments": {
"type": "array",
"items": {
"type": "array"
}
},
"description": {
"type": "string"
}
},
"description": "Gallery card, in Spanish."
},
"code": {
"type": "string",
"description": "Only to send a revision after a comparison: the tracking code of the first proposal."
},
"compositions": {
"type": "object",
"required": [
"cuadrado",
"vertical",
"horizontal"
],
"properties": {
"cuadrado": {
"anyOf": [
{
"type": "object"
},
{
"type": "string"
}
]
},
"vertical": {
"anyOf": [
{
"type": "object"
},
{
"type": "string"
}
]
},
"horizontal": {
"anyOf": [
{
"type": "object"
},
{
"type": "string"
}
]
}
},
"description": "The three compositions, as objects or JSON-encoded strings."
}
},
"additionalProperties": false
}Publish a compared Community template in the HyperCodeMotion Studio gallery, marked «Community», once its comparison with the original looks faithful. Takes the tracking code and notes on what is consciously different from the original and why. Its gallery videos are rendered and it then appears without manual review; get_proposal_status tells when.
| Argument | Type | Description |
|---|---|---|
| code* | string | The tracking code. |
| notes* | string | Up to 600 characters: what is consciously different from the original and why, or that nothing is. |
{
"type": "object",
"required": [
"code",
"notes"
],
"properties": {
"code": {
"type": "string",
"description": "The tracking code."
},
"notes": {
"type": "string",
"description": "Up to 600 characters: what is consciously different from the original and why, or that nothing is."
}
},
"additionalProperties": false
}Check a composition (layers), design (elements), or improvement patch (add/change/remove/sfx) and return actionable errors and warnings. Rejects measurable text that cannot fit the canvas safe area, text that crosses the canvas, and line-height below 1. This is not proof of a successful render.
| Argument | Type | Description |
|---|---|---|
| json* | any | HyperCodeMotion JSON object or JSON-encoded string to validate. |
| composition | object | Optional original composition used to resolve patch references and timings. |
{
"type": "object",
"required": [
"json"
],
"properties": {
"json": {
"anyOf": [
{
"type": "object"
},
{
"type": "string"
}
],
"description": "HyperCodeMotion JSON object or JSON-encoded string to validate."
},
"composition": {
"type": "object",
"description": "Optional original composition used to resolve patch references and timings."
}
},
"additionalProperties": false
}| string |
| The author's profile link, when the page gives one. |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "Link of the video's page, such as https://prompt-motion.com/<id> or https://oneshotted.io/v/<slug>."
},
"title": {
"type": "string",
"description": "The video's title on the page."
},
"video": {
"type": "string",
"description": "Address of the page's video file (.mp4 on media.prompt-motion.com or r2.oneshotted.io), as read on the page."
},
"author": {
"type": "string",
"description": "The author's name, only when the page names one."
},
"prompt": {
"type": "string",
"description": "The prompt the page publishes with the video, as read on the page."
},
"authorUrl": {
"type": "string",
"description": "The author's profile link, when the page gives one."
}
},
"additionalProperties": false
}